From b5606c2d2de97eb2f3d7df5b6c9c52834627942a Mon Sep 17 00:00:00 2001 From: Your Name <119736744+aborayan2022@users.noreply.github.com> Date: Sun, 8 Mar 2026 23:19:41 +0200 Subject: [PATCH] =?UTF-8?q?=D8=A7=D9=84=D9=85=D9=8A=D8=B2=D8=A9:=20=D8=A5?= =?UTF-8?q?=D8=B6=D8=A7=D9=81=D8=A9=20=D9=85=D9=83=D9=88=D9=86=D8=A7=D8=AA?= =?UTF-8?q?=20=D8=AA=D8=AD=D8=B3=D9=8A=D9=86=20=D9=85=D8=AD=D8=B1=D9=83?= =?UTF-8?q?=D8=A7=D8=AA=20=D8=A7=D9=84=D8=A8=D8=AD=D8=AB=20=D9=84=D8=B5?= =?UTF-8?q?=D9=81=D8=AD=D8=A7=D8=AA=20=D9=87=D8=A8=D9=88=D8=B7=20=D8=A7?= =?UTF-8?q?=D9=84=D8=A3=D8=AF=D9=88=D8=A7=D8=AA=D8=8C=20=D8=A8=D9=85=D8=A7?= =?UTF-8?q?=20=D9=81=D9=8A=20=D8=B0=D9=84=D9=83=20=D9=82=D8=B3=D9=85=20?= =?UTF-8?q?=D8=A7=D9=84=D8=A3=D8=B3=D8=A6=D9=84=D8=A9=20=D8=A7=D9=84=D8=B4?= =?UTF-8?q?=D8=A7=D8=A6=D8=B9=D8=A9=20=D9=88=D9=82=D8=B3=D9=85=20=D8=A7?= =?UTF-8?q?=D9=84=D8=A3=D8=AF=D9=88=D8=A7=D8=AA=20=D8=B0=D8=A7=D8=AA=20?= =?UTF-8?q?=D8=A7=D9=84=D8=B5=D9=84=D8=A9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - تم تنفيذ مكون قسم الأسئلة الشائعة لعرض الأسئلة المتكررة مع إجابات قابلة للتوسيع. - تم إنشاء مكون الأدوات ذات الصلة لعرض الأدوات المرتبطة بالأداة الحالية بناءً على بيانات تحسين محركات البحث. - تم تطوير مكون صفحة هبوط الأدوات لتغليف مكونات الأدوات ببيانات تعريف تحسين محركات البحث، والبيانات المنظمة، والمحتوى الإضافي. - تم إنشاء إعدادات مركزية لتحسين محركات البحث في ملف seoData.ts لإدارة بيانات تعريف الأدوات، والأسئلة الشائعة، والأدوات ذات الصلة. ---- feat: add SEO components for tool landing pages including FAQ and related tools sections - Implemented FAQSection component to display frequently asked questions with expandable answers. - Created RelatedTools component to show tools related to the current tool based on SEO data. - Developed ToolLandingPage component to wrap tool components with SEO metadata, structured data, and additional content. - Established central SEO configuration in seoData.ts for managing tool metadata, FAQs, and related tools. --- frontend/public/humans.txt | 11 + frontend/public/llms.txt | 56 ++ frontend/public/robots.txt | 7 + frontend/public/sitemap.xml | 50 ++ frontend/src/App.tsx | 65 +- frontend/src/components/layout/Footer.tsx | 115 ++- frontend/src/components/seo/FAQSection.tsx | 49 ++ frontend/src/components/seo/RelatedTools.tsx | 56 ++ .../src/components/seo/ToolLandingPage.tsx | 107 +++ frontend/src/config/seoData.ts | 677 ++++++++++++++++++ 10 files changed, 1132 insertions(+), 61 deletions(-) create mode 100644 frontend/public/humans.txt create mode 100644 frontend/public/llms.txt create mode 100644 frontend/public/sitemap.xml create mode 100644 frontend/src/components/seo/FAQSection.tsx create mode 100644 frontend/src/components/seo/RelatedTools.tsx create mode 100644 frontend/src/components/seo/ToolLandingPage.tsx create mode 100644 frontend/src/config/seoData.ts diff --git a/frontend/public/humans.txt b/frontend/public/humans.txt new file mode 100644 index 0000000..656781c --- /dev/null +++ b/frontend/public/humans.txt @@ -0,0 +1,11 @@ +/* TEAM */ +Project: SaaS-PDF +Role: Full-Stack Development +Technology: React, TypeScript, Python, Flask, Celery + +/* SITE */ +Standards: HTML5, CSS3, ECMAScript 2020+ +Components: React 18, Vite, Tailwind CSS, react-helmet-async +Backend: Flask, Celery, Redis +Languages: English, Arabic, French +Software: VS Code, Docker, GitHub diff --git a/frontend/public/llms.txt b/frontend/public/llms.txt new file mode 100644 index 0000000..8dd7839 --- /dev/null +++ b/frontend/public/llms.txt @@ -0,0 +1,56 @@ +# SaaS-PDF — llms.txt +# A description of this site for AI assistants and large language models. + +> SaaS-PDF is a free, online document toolkit that lets users convert, +> compress, merge, split, edit, and process PDF files, images, and more — +> directly in the browser with no signup required. + +## Tools Available + +### PDF Tools +- [PDF to Word](/tools/pdf-to-word): Convert PDF documents to editable Word (DOCX) format +- [Word to PDF](/tools/word-to-pdf): Convert Word documents (DOC/DOCX) to PDF +- [Compress PDF](/tools/compress-pdf): Reduce PDF file size while maintaining quality +- [Merge PDF](/tools/merge-pdf): Combine multiple PDF files into one document +- [Split PDF](/tools/split-pdf): Split a PDF into separate pages or ranges +- [Rotate PDF](/tools/rotate-pdf): Rotate PDF pages by 90°, 180°, or 270° +- [PDF to Images](/tools/pdf-to-images): Convert PDF pages to PNG or JPG images +- [Images to PDF](/tools/images-to-pdf): Combine multiple images into a single PDF +- [Watermark PDF](/tools/watermark-pdf): Add custom text watermarks to PDF pages +- [Remove Watermark](/tools/remove-watermark-pdf): Remove text watermarks from PDFs +- [Protect PDF](/tools/protect-pdf): Add password protection and encryption to PDFs +- [Unlock PDF](/tools/unlock-pdf): Remove password protection from PDFs +- [Page Numbers](/tools/page-numbers): Add page numbers to PDF documents +- [Reorder PDF](/tools/reorder-pdf): Rearrange pages in a PDF document +- [Extract Pages](/tools/extract-pages): Extract specific pages from a PDF +- [PDF Editor](/tools/pdf-editor): Edit and optimize PDF documents online + +### Image Tools +- [Image Converter](/tools/image-converter): Convert images between JPG, PNG, and WebP +- [Image Resize](/tools/image-resize): Resize images to exact dimensions +- [Compress Image](/tools/compress-image): Reduce image file size while keeping quality +- [Remove Background](/tools/remove-background): AI-powered background removal from images + +### AI Tools +- [OCR](/tools/ocr): Extract text from images and scanned PDFs (English, Arabic, French) +- [Chat with PDF](/tools/chat-pdf): Ask questions about PDF documents using AI +- [Summarize PDF](/tools/summarize-pdf): Generate AI summaries of PDF documents +- [Translate PDF](/tools/translate-pdf): Translate PDF content to any language +- [Extract Tables](/tools/extract-tables): Detect and extract tables from PDF documents +- [PDF Flowchart](/tools/pdf-flowchart): Convert PDF procedures into interactive flowcharts + +### Convert Tools +- [PDF to Excel](/tools/pdf-to-excel): Convert PDF tables to Excel spreadsheets +- [HTML to PDF](/tools/html-to-pdf): Convert HTML files to PDF documents + +### Utility Tools +- [QR Code Generator](/tools/qr-code): Generate QR codes from text or URLs +- [Video to GIF](/tools/video-to-gif): Create animated GIFs from video clips +- [Word Counter](/tools/word-counter): Count words, characters, sentences, and paragraphs +- [Text Cleaner](/tools/text-cleaner): Clean up text formatting and whitespace + +## Key Facts +- All tools are free to use with no signup required +- Files are automatically deleted within 30 minutes for privacy +- Available in English, Arabic, and French +- Works on any device with a modern web browser diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt index ac021d3..14039b0 100644 --- a/frontend/public/robots.txt +++ b/frontend/public/robots.txt @@ -2,5 +2,12 @@ User-agent: * Allow: / Disallow: /api/ +Disallow: /account +Disallow: /forgot-password +Disallow: /reset-password +# Sitemaps Sitemap: https://yourdomain.com/sitemap.xml + +# AI/LLM discoverability +# See also: /llms.txt diff --git a/frontend/public/sitemap.xml b/frontend/public/sitemap.xml new file mode 100644 index 0000000..4f3a84e --- /dev/null +++ b/frontend/public/sitemap.xml @@ -0,0 +1,50 @@ + + + + https://yourdomain.com/daily1.0 + https://yourdomain.com/aboutmonthly0.4 + https://yourdomain.com/privacyyearly0.3 + https://yourdomain.com/termsyearly0.3 + + + https://yourdomain.com/tools/pdf-to-wordweekly0.9 + https://yourdomain.com/tools/word-to-pdfweekly0.9 + https://yourdomain.com/tools/compress-pdfweekly0.9 + https://yourdomain.com/tools/merge-pdfweekly0.9 + https://yourdomain.com/tools/split-pdfweekly0.8 + https://yourdomain.com/tools/rotate-pdfweekly0.7 + https://yourdomain.com/tools/pdf-to-imagesweekly0.8 + https://yourdomain.com/tools/images-to-pdfweekly0.8 + https://yourdomain.com/tools/watermark-pdfweekly0.7 + https://yourdomain.com/tools/remove-watermark-pdfweekly0.7 + https://yourdomain.com/tools/protect-pdfweekly0.8 + https://yourdomain.com/tools/unlock-pdfweekly0.8 + https://yourdomain.com/tools/page-numbersweekly0.7 + https://yourdomain.com/tools/reorder-pdfweekly0.7 + https://yourdomain.com/tools/extract-pagesweekly0.7 + https://yourdomain.com/tools/pdf-editorweekly0.8 + https://yourdomain.com/tools/pdf-flowchartweekly0.7 + + + https://yourdomain.com/tools/image-converterweekly0.8 + https://yourdomain.com/tools/image-resizeweekly0.8 + https://yourdomain.com/tools/compress-imageweekly0.8 + https://yourdomain.com/tools/remove-backgroundweekly0.8 + + + https://yourdomain.com/tools/ocrweekly0.8 + https://yourdomain.com/tools/chat-pdfweekly0.8 + https://yourdomain.com/tools/summarize-pdfweekly0.8 + https://yourdomain.com/tools/translate-pdfweekly0.8 + https://yourdomain.com/tools/extract-tablesweekly0.8 + + + https://yourdomain.com/tools/pdf-to-excelweekly0.8 + https://yourdomain.com/tools/html-to-pdfweekly0.7 + + + https://yourdomain.com/tools/qr-codeweekly0.7 + https://yourdomain.com/tools/video-to-gifweekly0.7 + https://yourdomain.com/tools/word-counterweekly0.6 + https://yourdomain.com/tools/text-cleanerweekly0.6 + diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index b765bf4..b1ac10d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -3,6 +3,7 @@ import { Routes, Route, useLocation } from 'react-router-dom'; import Header from '@/components/layout/Header'; import Footer from '@/components/layout/Footer'; import ErrorBoundary from '@/components/shared/ErrorBoundary'; +import ToolLandingPage from '@/components/seo/ToolLandingPage'; import { useDirection } from '@/hooks/useDirection'; import { initAnalytics, trackPageView } from '@/services/analytics'; import { useAuthStore } from '@/stores/authStore'; @@ -91,52 +92,52 @@ export default function App() { } /> {/* PDF Tools */} - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> {/* Image Tools */} - } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> + } /> {/* Convert Tools */} - } /> - } /> + } /> + } /> {/* PDF Extra Tools */} - } /> - } /> - } /> + } /> + } /> + } /> {/* AI Tools */} - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> {/* Other Tools */} - } /> + } /> {/* Video Tools */} - } /> + } /> {/* Text Tools */} - } /> - } /> + } /> + } /> {/* 404 */} } /> diff --git a/frontend/src/components/layout/Footer.tsx b/frontend/src/components/layout/Footer.tsx index 1b17cfb..6ef160c 100644 --- a/frontend/src/components/layout/Footer.tsx +++ b/frontend/src/components/layout/Footer.tsx @@ -2,41 +2,98 @@ import { Link } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { FileText } from 'lucide-react'; +const FOOTER_TOOLS = { + PDF: [ + { slug: 'pdf-to-word', label: 'PDF to Word' }, + { slug: 'compress-pdf', label: 'Compress PDF' }, + { slug: 'merge-pdf', label: 'Merge PDF' }, + { slug: 'split-pdf', label: 'Split PDF' }, + { slug: 'pdf-to-images', label: 'PDF to Images' }, + { slug: 'protect-pdf', label: 'Protect PDF' }, + { slug: 'watermark-pdf', label: 'Watermark PDF' }, + { slug: 'pdf-editor', label: 'PDF Editor' }, + ], + 'Image & Convert': [ + { slug: 'compress-image', label: 'Compress Image' }, + { slug: 'image-converter', label: 'Image Converter' }, + { slug: 'image-resize', label: 'Image Resize' }, + { slug: 'remove-background', label: 'Remove Background' }, + { slug: 'word-to-pdf', label: 'Word to PDF' }, + { slug: 'html-to-pdf', label: 'HTML to PDF' }, + { slug: 'pdf-to-excel', label: 'PDF to Excel' }, + ], + 'AI & Utility': [ + { slug: 'chat-pdf', label: 'Chat with PDF' }, + { slug: 'summarize-pdf', label: 'Summarize PDF' }, + { slug: 'translate-pdf', label: 'Translate PDF' }, + { slug: 'ocr', label: 'OCR' }, + { slug: 'qr-code', label: 'QR Code Generator' }, + { slug: 'video-to-gif', label: 'Video to GIF' }, + { slug: 'word-counter', label: 'Word Counter' }, + ], +}; + export default function Footer() { const { t } = useTranslation(); return (