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.
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# صفحات فرود سئویی
|
||||
|
||||
سایت عمومی علاوه بر `/` هفت صفحهٔ فرود دارد، هرکدام روی یک کلیدواژهٔ تجاری. آدرس هر
|
||||
صفحه فارسی و تخت است تا کلیدواژه در خودِ 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` تکراری را رد میکند، ولی شباهت متن بدنه را ماشین
|
||||
تشخیص نمیدهد — موقع افزودن صفحهٔ جدید حواست باشد.
|
||||
Reference in New Issue
Block a user