News
Breadcrumb JSON-LD vs Visible Nav for Public Sites
April 30, 2022
Breadcrumb JSON-LD vs visible nav for public sites is a markup-versus-UI decision: BreadcrumbList should repeat a trail users can actually see and click, while primary nav is the site-wide menu and does not have to be a breadcrumb. Do not invent a JSON-LD trail that lists internal or unpublished sections. RoastMyOpsec does not score BreadcrumbList as a standalone F, and fake crumbs are a public map if you fill them with sensitive prefixes.
The practical difference
Google’s breadcrumb structured data is a BreadcrumbList of ListItems with position, name, and item URL. It is meant to match a visible breadcrumb. A header nav with Products / Docs / Blog is not automatically a breadcrumb. Using JSON-LD to describe a trail that is not on the page is how rich results disagree with reality.
The OPSEC miss is encoding a trail like Home > Internal > Staging that never appears in the UI. That is a sitemap-quality leak in Schema.org clothing. Visible nav that links only to public sections is ordinary. JSON-LD that adds extra unpublished crumbs is not.
Breadcrumbs are not access control. A 200 on each item URL is still a 200.
How to choose based on what you shipped
If the template already shows breadcrumbs, mirror them in JSON-LD (or Microdata) one-for-one. If you only have a global nav, skip BreadcrumbList. Never add crumbs “for SEO” that point at URLs you would not put in the footer.
| Option | When it wins | Watch-out | Takeaway |
|---|---|---|---|
| Visible breadcrumbs + JSON-LD | The page already shows a matching trail | Drift between UI and graph | Mirror, do not invent |
| Visible nav only | A flat marketing site with no trail UI | Forcing BreadcrumbList anyway | Skip the type |
| JSON-LD without UI | Almost never | Advertising URLs users cannot see | Do not ship a ghost trail |
| Sitemap instead | You want crawlers to find public sections | Listing URLs that should stay unpublished | Different job than crumbs |
When breadcrumb JSON-LD still wins
Breadcrumb JSON-LD still wins when the visible trail is real and you want search to show it. Visible nav still wins as the actual way humans move. Missing BreadcrumbList on a homepage is normal. A graph that invents extra sections is the miss.
Common mistakes
The first mistake is adding BreadcrumbList items that do not appear in the page UI.
The second mistake is putting unpublished or internal section URLs in the trail graph.
The third mistake is treating missing breadcrumb JSON-LD as a security finding.
What a URL roast can prove
RoastMyOpsec does not grade BreadcrumbList, other JSON-LD, Open Graph, or hreflang as standalone Fs. It does roast chatty robots.txt Disallow lines and exposed paths such as .git/HEAD and .env, plus headers, TLS, cookies, and js-secrets. Do not use structured crumbs as a second sitemap of sensitive prefixes.
Free audit the URL you own
RoastMyOpsec is a defensive public-surface roast: headers, cookies, sensitive paths, and more — no exploit payloads. Start with the free audit, then open the vault if the blurred findings look expensive.
Free audit nowFAQ
- Must breadcrumbs be in JSON-LD?
- Only if you want that rich result and the trail is visible. A nav menu alone does not require BreadcrumbList.
- Can JSON-LD breadcrumbs hide a URL?
- No. They advertise URLs. If a URL should not be public, do not list it and do not serve it.
- Does RoastMyOpsec fail missing breadcrumbs?
- No. Structured trails are not a scored F.