Add schema.org breadcrumbs for docs, share one component with handbook - #5578
Merged
Conversation
Docs had no BreadcrumbList structured data at all - just a plain <nav>
built from raw URL segments (no real page titles). Handbook had schema
markup, but via a call duplicated in the page's script, separate from
the visual breadcrumb component, and both were subtly wrong: nuxt/content's
findPageBreadcrumb() excludes the current page by default, so the existing
`.slice(0, -1)` (meant to drop the current page) was actually dropping the
true parent crumb, and the current page was never in the schema at all.
Fixes:
- New shared nuxt/components/Breadcrumbs.vue renders the visual trail and
registers the matching BreadcrumbList in one place, so a page can't
show one without the other going stale. Every crumb gets a ListItem
(including the current page) - schema.org only makes `item` optional
for the last entry, not the entry itself.
- Renamed DocsNavNode's `name` field to `title`, matching @nuxt/content's
ContentNavigationItem shape, so docs can reuse @nuxt/content's own
findPageBreadcrumb() (via a small findDocsBreadcrumb() flatten-and-
delegate wrapper, since groups themselves aren't pages) instead of a
bespoke tree walker.
- Extracted useDocsNavTree() so the docs page and DocsLeftNav share one
useAsyncData('docs-nav', ...) call - they'd started emitting a "did you
mean to use a different handler" dev warning once both called it.
- Docs breadcrumbs now show real page titles instead of raw URL segments.
Verified locally: /docs/admin/sso/ldap and /handbook/design/design-thinking
both render the correct visible trail and a complete BreadcrumbList with
position 1..N, terminating in the current page.
✅ Deploy Preview for flowforge-website ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Yndira-E
approved these changes
Aug 12, 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.

Docs had no BreadcrumbList structured data at all - just a plain
built from raw URL segments (no real page titles). Handbook had schema markup, but via a call duplicated in the page's script, separate from the visual breadcrumb component, and both were subtly wrong: nuxt/content's findPageBreadcrumb() excludes the current page by default, so the existing.slice(0, -1)(meant to drop the current page) was actually dropping the true parent crumb, and the current page was never in the schema at all.Fixes:
itemoptional for the last entry, not the entry itself.namefield totitle, matching @nuxt/content's ContentNavigationItem shape, so docs can reuse @nuxt/content's own findPageBreadcrumb() (via a small findDocsBreadcrumb() flatten-and- delegate wrapper, since groups themselves aren't pages) instead of a bespoke tree walker.Verified locally: /docs/admin/sso/ldap and /handbook/design/design-thinking both render the correct visible trail and a complete BreadcrumbList with position 1..N, terminating in the current page.
Checklist