diff --git a/src/components/SEO.astro b/src/components/SEO.astro
index 79f3aaf..4140b90 100644
--- a/src/components/SEO.astro
+++ b/src/components/SEO.astro
@@ -92,6 +92,37 @@ const articleJsonLd =
}
: null;
+// BreadcrumbList JSON-LD (all pages except home)
+const breadcrumbJsonLd = !isHomePage
+ ? (() => {
+ const segments = pathname.split("/").filter(Boolean);
+ // Build cumulative paths: /en/code → [{name: "Home", url: /en}, {name: "Code", url: /en/code}]
+ const homeUrl = locale === "fr" ? "/" : `/${locale}`;
+ const homeName = locale === "ar" ? "الرئيسية" : locale === "en" ? "Home" : "Accueil";
+ const items = [{ name: homeName, url: new URL(homeUrl, siteUrl).href }];
+ // Skip locale prefix for building readable names
+ const startIdx = locale !== "fr" ? 1 : 0;
+ let cumulativePath = locale !== "fr" ? `/${locale}` : "";
+ for (let i = startIdx; i < segments.length; i++) {
+ cumulativePath += `/${segments[i]}`;
+ const name = decodeURIComponent(segments[i])
+ .replace(/-/g, " ")
+ .replace(/^\w/, (c) => c.toUpperCase());
+ items.push({ name, url: new URL(cumulativePath, siteUrl).href });
+ }
+ return {
+ "@context": "https://schema.org",
+ "@type": "BreadcrumbList",
+ itemListElement: items.map((item, i) => ({
+ "@type": "ListItem",
+ position: i + 1,
+ name: item.name,
+ item: item.url,
+ })),
+ };
+ })()
+ : null;
+
// WebSite JSON-LD (only on home pages)
const websiteJsonLd = isHomePage
? {
@@ -150,6 +181,11 @@ const websiteJsonLd = isHomePage
)}
+
+{breadcrumbJsonLd && (
+
+)}
+
{websiteJsonLd && (