- 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.
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 تکراری را رد میکند، ولی شباهت متن بدنه را ماشین
تشخیص نمیدهد — موقع افزودن صفحهٔ جدید حواست باشد.