- 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.
70 lines
4.1 KiB
Markdown
70 lines
4.1 KiB
Markdown
# صفحات فرود سئویی
|
|
|
|
سایت عمومی علاوه بر `/` هفت صفحهٔ فرود دارد، هرکدام روی یک کلیدواژهٔ تجاری. آدرس هر
|
|
صفحه فارسی و تخت است تا کلیدواژه در خودِ 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` تکراری را رد میکند، ولی شباهت متن بدنه را ماشین
|
|
تشخیص نمیدهد — موقع افزودن صفحهٔ جدید حواست باشد.
|