SEO
BreadcrumbList senza errori: posizioni, URL e test
BreadcrumbList è un elenco ordinato di passaggi dalla home alla pagina. Tre proprietà contano: itemListElement, position e item; il resto è cosmetica.
In sintesi
- BreadcrumbList è un elenco ordinato: servono itemListElement, e per ogni ListItem una position e un item che sia un URL.
- La pagina articolo di questo sito dichiara 3 elementi, il primo dei quali è Home verso /it, letto il 1 novembre 2026.
- Un percorso nel markup diverso dal percorso visibile è la definizione di markup fuorviante, e nasce quasi sempre da un template.
BreadcrumbList è il markup che dice a Google dove sta la pagina nella gerarchia del sito: un elenco ordinato che parte dalla home e finisce sulla pagina corrente. Si aggiunge come JSON-LD e deve corrispondere al percorso visibile.
Le tre proprietà che contano
La documentazione sui breadcrumb, letta il 1 novembre 2026, chiede itemListElement come array ordinato. Ogni ListItem ha position e item, cioè l'URL della pagina che rappresenta; name è l'etichetta che si vede. La stessa pagina dice che Google usa il markup dei breadcrumb nel body della pagina per categorizzare il contenuto nel risultato, e che la funzione è disponibile su desktop in tutte le lingue e regioni in cui esiste Search.
Un blocco corretto
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://ui.eneawork.it/it"
},
{
"@type": "ListItem",
"position": 2,
"name": "Blog",
"item": "https://ui.eneawork.it/it/blog"
},
{
"@type": "ListItem",
"position": 3,
"name": "BreadcrumbList senza errori",
"item": "https://ui.eneawork.it/it/blog/breadcrumb-schema-guida"
}
]
}
Tre elementi sono la forma minima utile: home, sezione, pagina. Le posizioni sono consecutive e partono da 1, il nome è quello che l'utente legge, l'URL risponde 200. L'ultimo elemento ha un item come gli altri: è la pagina corrente, e la pagina corrente ha un URL.
Verificare posizioni e URL
cat > check-breadcrumb.mjs ]*application\/ld\+json[^>]*>([\s\S]*?)/g)];
const nodes = blocks.flatMap(([, raw]) => {
const data = JSON.parse(raw);
return data["@graph"] || [data];
});
const crumbs = nodes.find((n) => n["@type"] === "BreadcrumbList");
if (!crumbs) {
console.log("no BreadcrumbList");
process.exit(1);
}
let expected = 1;
for (const item of crumbs.itemListElement) {
if (item.position !== expected) console.log(`position ${item.position}, expected ${expected}`);
if (!item.name || !item.item) console.log(`item at ${item.position} misses name or item`);
expected += 1;
}
console.log(`${crumbs.itemListElement.length} crumbs, positions ${expected - 1} checked`);
EOF
node check-breadcrumb.mjs https://ui.eneawork.it/blog/come-aggiungere-schema-markup
Lo script estrae il BreadcrumbList, controlla che le posizioni siano consecutive a partire da 1 e che ogni elemento abbia nome e URL. Un errore di posizione non rompe la pagina: rende l'elenco ambiguo, e Google può scartare il markup senza dirlo.
Gli errori che si vedono nei template
- La posizione parte da 0 perché l'array parte da 0: position è un numero di schema.org, non un indice.
- L'ultimo elemento è la pagina corrente ma senza item, perché «tanto è questa»: item serve anche all'ultimo.
- Il breadcrumb visibile dice «Blog» e il markup dice «Articoli»: due percorsi, e solo uno è vero.
- Il percorso include il nome del sito come primo elemento: la home è già la home, il brand va in Organization.
- Il markup nasce da un array di categorie che cambia con i filtri: una pagina filtrata non è un livello in più della gerarchia.
Il record dal vivo
Nel catalogo il percorso esiste già come navigazione: menu, navbar e /blocks mostrano lo stesso schema a due livelli. Se il menu visibile e il markup raccontano la stessa gerarchia, il breadcrumb non è un dato in più: è la stessa informazione scritta due volte. Dati verificati il 1 novembre 2026.
La limitazione
Il breadcrumb non è garantito: Google può mostrare il percorso o l'URL nudo, e sullo schermo di un telefono lo spazio spesso non c'è. Il markup resta utile perché descrive la gerarchia, non perché disegna una riga nel risultato. Su un sito con due percorsi possibili per la stessa pagina, la documentazione chiede di dichiarare quello che l'utente vede.
Dove continuare
La struttura dei link è in link interni hub-and-spoke; l'indirizzo canonico della pagina è in canonicalizzazione; l'elenco che Google legge è in sitemap index o file unico. Se la gerarchia nasce dalle route, il framework la cambia: il confronto è in Remix o Next.js.
Domande frequenti
Il breadcrumb visibile deve corrispondere al markup?
Sì. Google chiede che il markup descriva ciò che l'utente vede: un percorso nel markup diverso da quello in pagina è la definizione di markup fuorviante.
Quanti livelli può avere un breadcrumb?
Il vocabolario schema.org non pone un limite, ma un percorso leggibile ha due o tre livelli oltre la home. Oltre, l'utente smette di leggere e il risultato non lo mostra.
Serve il breadcrumb su ogni pagina?
Serve dove la pagina ha un genitore. La home non ha un percorso, e un elenco di un solo elemento non aggiunge informazione.
Posso generare il breadcrumb dal router?
Sì, ed è il modo più affidabile: le route annidate contengono già la gerarchia. Attenzione ai filtri e ai parametri, che non sono livelli.
Il breadcrumb migliora il ranking?
No, non è un fattore di posizione. Cambia il modo in cui il risultato mostra il percorso e aiuta Google a capire la gerarchia del sito.