Add BreadcrumbList schema to compliance, features and guides - #122
Merged
Merged
Conversation
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) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FbqYj6ztzG6yautDpRWDXS
vpetersson
approved these changes
Aug 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What the report showed
In the 2026-08-04 Semrush structured-data export, Breadcrumb items = 0 for every
/compliance/,/features/and/guides/URL, while blog posts, case studies and FAQ pages all report1.That matches the code:
layouts/partials/head.htmlhad dedicatedBreadcrumbListblocks for blog posts, case studies, the FAQ index and individual FAQs — and nothing for the three other content trees. No page in them emitted breadcrumbs.The crawl only sampled part of each section. In the current build it is 42 pages, not the ~20 visible in the CSV.
The change
One generic block driven by a
section -> labeldict, rather than three near-identical copies of the existing pattern. Section indexes get a two-level trail (Home > Guides); child pages get three (Home > Guides > Rust).Verification
Built with
hugo --minify --environment productionand parsed all 479 output pages:BreadcrumbListThree URLs under those sections are not covered, correctly:
/compliance/ntia/,/features/public-sbom-portal/and/features/sbom-hub/are alias stubs that emitrel=canonical+meta http-equiv=refresh. They should not carry breadcrumbs.Also checked across the whole build:
BreadcrumbList. The existing blog / case-study / FAQ blocks are untouched — none of those sections appear in the dict, so there is no overlap.bun run lintand the production Hugo build both pass.Deliberately not changed
Two other columns in the report looked like findings but are not defects, so I left them alone:
Logo items = 0on every page. TheOrganizationschema already includes a validlogoImageObjectwithurl/width/height. This is a Semrush reporting quirk.Product snippet items = 1–2on most pages. Parsing the build shows exactly oneProductentity site-wide, on the homepage, which is correct. Semrush appears to be counting nested entities.The report also flags
trust.sbomify.compages as having Twitter Cards = 0 whilesbomify.comreports1. That is a real bug, but it lives in the webapp repo, not here — the app's base templates emitproperty="twitter:*"where the Twitter Card spec requiresname="twitter:*". Out of scope for this PR; worth a separate one.🤖 Generated with Claude Code
https://claude.ai/code/session_01FbqYj6ztzG6yautDpRWDXS