# Breadcrumb / navigation schema

> Breadcrumb / navigation schema: Helps an agent make sense of where a page sits in your site. The fix: add breadcrumb schema.

- Source: /checks/breadcrumb
- Site: AgenticWebScore
- Language: English

---
Helps an agent make sense of where a page sits in your site.

| Property | Value |
| --- | --- |
| Check id | `breadcrumb` |
| Dimension | Content Accessibility (22%) |
| Tier | Emerging — pool 5 pts |
| Weight inside tier | 1 |
| Impact | Low |
| Maturity | Draft — A published specification that is not yet ratified. |
| Conditional | No |
| Publishing skill | `breadcrumb-schema` |
| Standards | schema.org/BreadcrumbList |

## What is measured

This check declares no probe path, so the scanner walks the JSON-LD of the fetched homepage `/` for a `BreadcrumbList` and inspects `itemListElement`. Pass when the list has at least two entries typed `ListItem` whose `position` values start at 1 and increase by one, each with a `name` and an `item` that is a resolvable URL (an absolute http(s) URL or a host-relative path — a bare string such as `garbage` is not an item URL). The last entry may omit `item` entirely, as Google's breadcrumb guidance allows, because it stands for the current page. Partial when `BreadcrumbList` is present but an entry is not typed `ListItem`, a position is missing or out of order, an entry before the last has no resolvable `item` URL, or any entry carries an `item` that is not one; fail when no `BreadcrumbList` appears.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN="https://example.com"
curl -sL "$DOMAIN/" | perl -0777 -ne 'while (m{<script[^>]*application/ld\+json[^>]*>(.*?)</script>}gsi) { print "$1\n" }' | jq -r '.. | objects | select((."@type"? | if type == "array" then .[] else . end) == "BreadcrumbList") | .itemListElement[] | [(.position|tostring), .name, ((.item."@id" // .item) // "NO URL")] | @tsv'
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```html
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    { "@type": "ListItem", "position": 1, "name": "Home", "item": "https://www.example.com/" },
    { "@type": "ListItem", "position": 2, "name": "Checks", "item": "https://www.example.com/checks" },
    { "@type": "ListItem", "position": 3, "name": "Structured data", "item": "https://www.example.com/checks/jsonld" }
  ]
}
</script>
```

> Mirror the same trail as visible links in a `<nav aria-label="Breadcrumb">` — schema alone helps no reader.

## Standards referenced

- `schema.org/BreadcrumbList`

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `markdown-negotiation` — Markdown content negotiation | Recommended | Critical | — |
| `headings` — Semantic heading structure | Essential | High | — |
| `meta` — Title and summary metadata | Essential | High | — |
| `jsonld` — JSON-LD structured data | Essential | Critical | — |
| `faq-schema` — FAQ / question-answer schema | Recommended | High | — |
| `summary` — Prominent summary block | Recommended | Medium | — |
| `lang` — Language declaration and multilingual access | Recommended | Medium | — |
| `no-js-fallback` — Content that needs no JavaScript | Essential | High | — |
