diff --git a/prerender.cjs b/prerender.cjs index 8a11fec..eb1e7ed 100644 --- a/prerender.cjs +++ b/prerender.cjs @@ -313,7 +313,8 @@ const renderApp = async (categoryData, socket) => { ? "index.html" : "index.prerender.html"; const homeMetaTags = generateHomepageMetaTags(shopConfig.baseUrl, shopConfig); - const homeJsonLd = generateHomepageJsonLd(shopConfig.baseUrl, shopConfig); + const homepageCategories = categoryData ? collectAllCategories(categoryData) : []; + const homeJsonLd = generateHomepageJsonLd(shopConfig.baseUrl, shopConfig, homepageCategories); const combinedHomeMeta = homeMetaTags + "\n" + homeJsonLd; const homeSuccess = render( homeComponent, @@ -385,8 +386,8 @@ const renderApp = async (categoryData, socket) => { // Special handling for Sitemap page to include category data if (page.filename === "sitemap" && categoryData) { - const allCategories = collectAllCategories(categoryData); - metaTags = generateSitemapJsonLd(allCategories, shopConfig.baseUrl, shopConfig); + const sitemapCategories = collectAllCategories(categoryData); + metaTags = generateSitemapJsonLd(sitemapCategories, shopConfig.baseUrl, shopConfig); } // Special handling for Konfigurator page to include SEO tags diff --git a/prerender/seo.cjs b/prerender/seo.cjs index 27aa29b..33e2225 100644 --- a/prerender/seo.cjs +++ b/prerender/seo.cjs @@ -196,9 +196,9 @@ const generateHomepageMetaTags = (baseUrl, config) => { `; }; -const generateHomepageJsonLd = (baseUrl, config) => { +const generateHomepageJsonLd = (baseUrl, config, categories = []) => { - const jsonLd = { + const websiteJsonLd = { "@context": "https://schema.org/", "@type": "WebSite", name: config.brandName, @@ -232,9 +232,27 @@ const generateHomepageJsonLd = (baseUrl, config) => { ], }; - return ``; + // Generate BreadcrumbList for all categories + const breadcrumbJsonLd = { + "@context": "https://schema.org", + "@type": "BreadcrumbList", + "itemListElement": categories + .filter(category => category.seoName) // Only include categories with seoName + .map((category, index) => ({ + "@type": "ListItem", + "position": index + 1, + "name": category.name, + "item": `${baseUrl}/Kategorie/${category.seoName}` + })) + }; + + // Return both JSON-LD scripts + const websiteScript = ``; + const breadcrumbScript = categories.length > 0 + ? `` + : ''; + + return websiteScript + (breadcrumbScript ? '\n' + breadcrumbScript : ''); }; const generateSitemapJsonLd = (allCategories = [], baseUrl, config) => {