Files
clinicpro/docs/landing-pages.md
hamed 68b8b05630 feat: add landing page templates and registration modal
- Implemented header and hero section in _header.html.twig and _hero_art.html.twig.
- Created a pre-registration modal in _reg_modal.html.twig with form fields and validation.
- Added page scripts for dynamic behavior and interaction in _page_scripts.html.twig.
- Developed landing page structure in landing.html.twig, integrating header, footer, and modal.
- Introduced tests for landing page rendering and registry validation in LandingPageTest.php and LandingRegistryTest.php.
2026-08-10 14:38:27 +03:30

4.1 KiB

صفحات فرود سئویی

سایت عمومی علاوه بر / هفت صفحهٔ فرود دارد، هرکدام روی یک کلیدواژهٔ تجاری. آدرس هر صفحه فارسی و تخت است تا کلیدواژه در خودِ URL بنشیند.

کلیدواژه آدرس
نرم‌افزار مدیریت کلینیک زیبایی /نرم-افزار-مدیریت-کلینیک-زیبایی
نرم‌افزار مدیریت کلینیک دندان‌پزشکی /نرم-افزار-مدیریت-کلینیک-دندانپزشکی
نرم‌افزار مدیریت کلینیک فیزیوتراپی /نرم-افزار-مدیریت-کلینیک-فیزیوتراپی
سیستم جامع درمانگاهی /سیستم-جامع-درمانگاهی
نرم‌افزار رایگان مدیریت کلینیک /نرم-افزار-رایگان-مدیریت-کلینیک
نرم‌افزار مدیریت مطب /نرم-افزار-مدیریت-مطب
CRM کلینیک‌ها /crm-کلینیک

متن هر صفحه کجاست

در src/Shared/Landing/LandingRegistry.php — نه در فایل Twig. هر صفحه یک LandingPage است با عنوان، توضیحات متا، کلیدواژه‌ها، h1، لید، فهرست امکانات، پرسش‌های متداول و اسلاگ صفحات مرتبط.

برای ویرایش متن، فقط همان کلاس را عوض کن. برای افزودن صفحهٔ جدید، یک LandingPage تازه به build() اضافه کن؛ روت، sitemap و لینک فوتر خودشان به‌روز می‌شوند.

چرا رجیستری، نه هفت فایل Twig

قالب هر هفت صفحه یکی است و فقط متنشان فرق دارد. هفت فایل یعنی هر تغییر تم هشت بار تکرار شود و بعد از مدتی هشت نسخهٔ واگرا داشته باشیم.

تم مشترک

templates/public/landing.html.twig همان encore_entry صفحهٔ اصلی (home) را بارگذاری می‌کند و این partialها را با آن به اشتراک می‌گذارد:

templates/public/_header.html.twig
templates/public/_hero_art.html.twig
templates/public/_reg_modal.html.twig
templates/public/_footer.html.twig
templates/public/_page_scripts.html.twig

یعنی تغییر رنگ دکمه یا متن هدر در صفحهٔ اصلی، خودکار در هر هفت صفحه دیده می‌شود. LandingPageTest::testLandingUsesTheHomepageTheme همین را تضمین می‌کند.

روت

LandingController روی /{slug} با priority: -10 می‌نشیند. اولویت منفی لازم است: این الگو هر مسیر تک‌بخشی را می‌گیرد و بدون آن جلوی /health، /sitemap.xml و هر روت ریشه‌ای بعدی را می‌بندد. LandingPageTest::testExistingRoutesAreNotShadowed مراقب همین است.

سئو

هر صفحه title، description، keywords و canonical مخصوص خودش دارد، و سه schema: SoftwareApplication، BreadcrumbList و FAQPage.

JSON-LD با json_encode در Twig ساخته می‌شود نه رشتهٔ دستی — متن فارسی نقل‌قول دارد و JSONِ دست‌ساز خیلی راحت نامعتبر می‌شود.

sitemap.xml خودش هر هفت صفحه را اضافه می‌کند و اسلاگ فارسی را percent-encode می‌کند. فوتر مشترک هم به همهٔ آن‌ها لینک می‌دهد تا صفحات یتیم نمانند.

نکتهٔ محتوایی

متن هر صنف عمداً از پایه متفاوت نوشته شده، نه یک قالب با نام تخصص عوض‌شده. هفت صفحه با متن مشابه از نگاه موتور جستجو محتوای تکراری است و هر هفت‌تا را پایین می‌کشد. LandingRegistryTest عنوان و h1 تکراری را رد می‌کند، ولی شباهت متن بدنه را ماشین تشخیص نمی‌دهد — موقع افزودن صفحهٔ جدید حواست باشد.