diff options
Diffstat (limited to 'src/components/starlight/Breadcrumbs.astro')
| -rw-r--r-- | src/components/starlight/Breadcrumbs.astro | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/src/components/starlight/Breadcrumbs.astro b/src/components/starlight/Breadcrumbs.astro index 8f7aba0..bd65fec 100644 --- a/src/components/starlight/Breadcrumbs.astro +++ b/src/components/starlight/Breadcrumbs.astro @@ -22,9 +22,25 @@ if (breadcrumbs.length > 0) { breadcrumbs[breadcrumbs.length - 1].label = route.entry?.data?.title || breadcrumbs[breadcrumbs.length - 1].label; } +// パンくずリストの構造化データ(BreadcrumbList) +const siteUrl = Astro.site ?? new URL(Astro.url.origin); +const breadcrumbList = { + '@context': 'https://schema.org', + '@type': 'BreadcrumbList', + itemListElement: [{ label: 'ホーム', href: '/' }, ...breadcrumbs].map( + (crumb, i) => ({ + '@type': 'ListItem', + position: i + 1, + name: crumb.label, + item: new URL(crumb.href, siteUrl).href, + }), + ), +}; + function labelMap(segment: string): string | null { const map: Record<string, string> = { 'ippan-situmon': '一般質問', + 'about-dyslexia': 'ディスレクシアについて', 'gian-tou': '議案等', 'hattatu': '発達関連', 'blog': 'ふらっとブログ', @@ -39,20 +55,27 @@ function labelMap(segment: string): string | null { --- {breadcrumbs.length > 0 && ( - <nav class="breadcrumbs" aria-label="パンくず"> - <ol> - <li><a href="/">ホーム</a></li> - {breadcrumbs.map((crumb, i) => ( - <li> - {i < breadcrumbs.length - 1 ? ( - <a href={crumb.href}>{crumb.label}</a> - ) : ( - <span>{crumb.label}</span> - )} - </li> - ))} - </ol> - </nav> + <> + <script + type="application/ld+json" + is:inline + set:html={JSON.stringify(breadcrumbList)} + /> + <nav class="breadcrumbs" aria-label="パンくず"> + <ol> + <li><a href="/">ホーム</a></li> + {breadcrumbs.map((crumb, i) => ( + <li> + {i < breadcrumbs.length - 1 ? ( + <a href={crumb.href}>{crumb.label}</a> + ) : ( + <span>{crumb.label}</span> + )} + </li> + ))} + </ol> + </nav> + </> )} <style> |
