From 836d799c2d3f889b1dd5ebe8e678424a50a55576 Mon Sep 17 00:00:00 2001 From: Cyborg Viktor <307551610+vpetersson-bot@users.noreply.github.com> Date: Tue, 4 Aug 2026 09:40:48 +0000 Subject: [PATCH] Add BreadcrumbList schema to compliance, features and guides MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Semrush structured-data report for 2026-08-04 shows Breadcrumb items = 0 for every /compliance/, /features/ and /guides/ URL, while blog posts, case studies and FAQ pages all report 1. head.html had dedicated BreadcrumbList blocks for those three page types only. The compliance, features and guides trees never had one, so no page in them emitted breadcrumbs — 42 pages in the current build, not the ~20 the partial crawl sampled. Adds a single generic block driven by a section->label dict rather than three near-identical copies. Section indexes get a two-level trail (Home > Guides); child pages get three (Home > Guides > Rust). Verified against a production build (hugo --minify): compliance 16/16 content pages features 6/6 content pages guides 20/20 content pages The three remaining URLs under those sections (/compliance/ntia/, /features/public-sbom-portal/, /features/sbom-hub/) are alias stubs that emit canonical + meta-refresh, and correctly get no breadcrumbs. Also confirmed across all 479 built pages: no invalid JSON-LD, and no page emits a duplicate BreadcrumbList — the existing blog, case-study and FAQ blocks are untouched, since none of those sections appear in the dict. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01FbqYj6ztzG6yautDpRWDXS --- layouts/partials/head.html | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 4c2aab4..ba88fbf 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -612,4 +612,40 @@ } {{ end }} + + {{/* Blog posts, case studies and FAQ pages get their own BreadcrumbList above. + The compliance / features / guides trees had none, leaving every page in + them without breadcrumbs. One generic block covers all three rather than + three near-identical copies. */}} + {{ $crumbSections := dict "compliance" "Compliance" "features" "Features" "guides" "Guides" }} + {{ $crumbLabel := index $crumbSections .Section }} + {{ if $crumbLabel }} + + + {{ end }}