--- title: Schema.org Breadcrumbs navigation: title: Breadcrumbs --- Creating breadcrumbs on your site is a great way to help your users understand your website hierarchy. ## Useful Links - [Breadcrumb | Google Search Central](https://developers.google.com/search/docs/advanced/structured-data/breadcrumb) - [Breadcrumb | Yoast](https://developer.yoast.com/features/schema/pieces/breadcrumb) ## Marking up Breadcrumbs [defineBreadcrumb](/docs/schema-org/api/schema/breadcrumb) creates Breadcrumb Schema whilst handling relations for you. Imagine we want to generate the following markup with the appropriate Schema. Note: Google recommends that the markup for the breadcrumbs should exist on the page matching the Schema.org entry. ```ts import { defineBreadcrumb, useSchemaOrg } from '@unhead/schema-org/@framework' const breadcrumbs = [ // item is the url and will be resolved to the absolute url { name: 'Home', item: '/' }, { name: 'Articles', item: '/blog' }, // item is not required for the last list element { name: 'How do breadcrumbs work' }, ] useSchemaOrg([ defineBreadcrumb({ itemListElement: breadcrumbs }), ]) ``` Here's an example of how you might structure your breadcrumbs in HTML: ```html
``` ## Adding Multiple Breadcrumbs There may be some cases where you'd like multiple breadcrumbs to be displayed. For these cases you can provide an `@id` and it will avoid overwriting the primary breadcrumb. ```ts import { defineBreadcrumb, useSchemaOrg } from '@unhead/schema-org/@framework' useSchemaOrg([ // primary breadcrumb defineBreadcrumb({ itemListElement: [ // item is the url and will be resolved to the absolute url { name: 'Home', item: '/' }, { name: 'Articles', item: '/blog' }, // item is not required for the last list element { name: 'How do breadcrumbs work' }, ] }), defineBreadcrumb({ '@id': '#secondary-breadcrumb', 'itemListElement': [ // item is the url and will be resolved to the absolute url { name: 'Sub Home', item: '/sub' }, { name: 'Sub Page', item: '/sub/page' }, { name: 'Sub Element' }, ] }), ]) ```