# SEO Open Graph

طبقة SEO العامة في المشروع أصبحت تعتمد على:

- [config/seo.php](C:/Users/a-djoudi/apps/ecoinv3/config/seo.php)
- [Meta.php](C:/Users/a-djoudi/apps/ecoinv3/app/Support/Seo/Meta.php)
- [MetaBuilder.php](C:/Users/a-djoudi/apps/ecoinv3/app/Support/Seo/MetaBuilder.php)
- [meta.blade.php](C:/Users/a-djoudi/apps/ecoinv3/resources/views/components/seo/meta.blade.php)

## كيف تعمل

- كل صفحة عامة تستخدم `components.layouts.public` أو `layouts.guest` تحصل على Meta server-side تلقائيًا.
- الـ layout يستدعي `MetaBuilder::forCurrentRequest()` حسب route الحالي.
- الصفحات الديناميكية مثل course, cohort, event, blog post تأخذ عنوانها ووصفها وصورتها من البيانات نفسها.
- الصفحات الخاصة أو الموقعة مثل خطوات التسجيل وروابط الحدث الخاصة تُعلَّم بـ `noindex,nofollow`.

## الصور

- الصورة الافتراضية: `public/images/og-default.png`
- إذا توفر غلاف للدورة أو الفعالية أو المقالة، يستخدم بدل الصورة الافتراضية.
- `og:image` دائمًا يخرج كرابط absolute.

## اللغات

- العربية: `og:locale = ar_DZ`
- الفرنسية: `og:locale = fr_DZ`
- اللغة البديلة تُطبع عبر `og:locale:alternate`

## القواعد

- canonical يزيل `utm_*` و`gclid/fbclid/ref`
- للصفحات paginated يحتفظ بـ `page`
- Twitter card الافتراضي: `summary_large_image`

## الاختبارات

- [OpenGraphMetaTest.php](C:/Users/a-djoudi/apps/ecoinv3/tests/Feature/Seo/OpenGraphMetaTest.php)
