Skip to content

Add BreadcrumbList schema to compliance, features and guides - #122

Merged
vpetersson merged 1 commit into
sbomify:masterfrom
vpetersson-bot:seo-section-breadcrumbs
Aug 4, 2026
Merged

Add BreadcrumbList schema to compliance, features and guides#122
vpetersson merged 1 commit into
sbomify:masterfrom
vpetersson-bot:seo-section-breadcrumbs

Conversation

@vpetersson-bot

Copy link
Copy Markdown
Contributor

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 report 1.

That matches the code: layouts/partials/head.html had dedicated BreadcrumbList blocks 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 -> label dict, 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 production and parsed all 479 output pages:

Section Pages with BreadcrumbList
compliance 16/16 content pages
features 6/6 content pages
guides 20/20 content pages

Three URLs under those sections are not covered, correctly: /compliance/ntia/, /features/public-sbom-portal/ and /features/sbom-hub/ are alias stubs that emit rel=canonical + meta http-equiv=refresh. They should not carry breadcrumbs.

Also checked across the whole build:

  • No invalid JSON-LD in any of the 479 pages.
  • No page emits a duplicate 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 lint and 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 = 0 on every page. The Organization schema already includes a valid logo ImageObject with url/width/height. This is a Semrush reporting quirk.
  • Product snippet items = 1–2 on most pages. Parsing the build shows exactly one Product entity site-wide, on the homepage, which is correct. Semrush appears to be counting nested entities.

The report also flags trust.sbomify.com pages as having Twitter Cards = 0 while sbomify.com reports 1. That is a real bug, but it lives in the webapp repo, not here — the app's base templates emit property="twitter:*" where the Twitter Card spec requires name="twitter:*". Out of scope for this PR; worth a separate one.

🤖 Generated with Claude Code

https://claude.ai/code/session_01FbqYj6ztzG6yautDpRWDXS

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
vpetersson merged commit f2acff2 into sbomify:master Aug 4, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants