# Schema Article passo per passo, senza duplicati

Article è il tipo schema.org che descrive un articolo: titolo, date, autore, immagine. Va aggiunto una volta per pagina, con i dati già visibili nel testo.

> Pagina: https://ui.eneawork.it/blog/structured-data-article
> Markdown: https://ui.eneawork.it/blog/structured-data-article.md

*2026-11-01*

Article è il tipo schema.org che descrive un articolo pubblicato: titolo, date, autore, immagine. Si aggiunge come JSON-LD nella pagina, una volta sola, con gli stessi valori che l'utente legge.

Il catalogo EneUI conta 111.985 componenti, 1.556 blocchi e 12.808 icone da 1.472 librerie, letti da /api/stats il 1 novembre 2026. Lo stesso giorno abbiamo letto l'HTML servito di /blog/come-aggiungere-schema-markup: 2 blocchi JSON-LD con 7 nodi (SoftwareApplication, WebPage, Organization, BreadcrumbList, FAQPage, Article, Blog), e il nodo Article dichiara 11 proprietà, fra cui headline, author, datePublished, dateModified e image. La documentazione Google su Article è stata verificata il 1 novembre 2026.

## Cosa chiede Google

La pagina Article, letta il 1 novembre 2026, dice che il markup aiuta Google a mostrare titolo, immagine e data migliori nel risultato, e che non esiste un requisito di markup per entrare nei servizi di Google News. L'esempio ufficiale usa NewsArticle con headline, image, datePublished, dateModified e author. BlogPosting e NewsArticle sono sottotipi di Article: scegli quello che descrive la pagina, non il più grande.

## Il blocco completo

{ "@context": "https://schema.org", "@type": "Article", "headline": "Come aggiungere schema markup senza rompere il sito", "datePublished": "2026-11-01T21:45:00+01:00", "dateModified": "2026-11-01T21:45:00+01:00", "author": { "@type": "Person", "name": "Enea Zani", "url": "https://eneawork.it" }, "image": ["https://ui.eneawork.it/blog-covers/it/come-aggiungere-schema-markup.png"], "mainEntityOfPage": { "@id": "https://ui.eneawork.it/it/blog/come-aggiungere-schema-markup" } }

Il blocco contiene i cinque campi dell'esempio, più mainEntityOfPage, che dice a quale URL appartiene l'articolo. image è un array: una sola immagine va bene, ma l'array evita di riscrivere il blocco quando ne aggiungi una seconda. author è un oggetto Person con un URL che risponde: un autore senza pagina è un nome, non un'entità.

## Controllare il nodo prima del deploy

cat > check-article.mjs ]*application\/ld\+json[^>]*>([\s\S]*?)/g)]; const nodes = blocks.flatMap(([, raw]) => { const data = JSON.parse(raw); return data["@graph"] || [data]; }); const article = nodes.find((n) => /^(Article|NewsArticle|BlogPosting)$/.test(n["@type"])); if (!article) { console.log("no Article node"); process.exit(1); } const missing = ["headline", "datePublished", "author", "image"].filter((k) => !article[k]); console.log(`${nodes.length} JSON-LD nodes, Article ${article["@type"]}`); console.log(missing.length ? `missing: ${missing.join(", ")}` : "required fields present"); EOF node check-article.mjs https://ui.eneawork.it/blog/come-aggiungere-schema-markup

Lo script scarica la pagina, unisce i nodi di ogni blocco (anche dentro @graph) e cerca il primo Article, NewsArticle o BlogPosting. Poi elenca le proprietà che mancano fra quelle dell'esempio. Un nodo assente è un errore di deploy, non di validatore: nessuno strumento sa che quel tipo doveva esserci.

## Quattro errori che si vedono spesso

## Il record dal vivo

Un articolo del catalogo ha già la forma giusta: glass-blog-card-shadcnui rende titolo, data e anteprima, cioè tre dei campi che Article riusa. Le liste da cui partire sono blog e i 1.556 blocchi. Dati verificati il 1 novembre 2026.

## La limitazione

Article non produce un rich result da solo e non sposta la posizione. Serve a far leggere a Google dati che sono già in pagina e a ridurre le ipotesi quando due pagine si somigliano. Se il markup contraddice il testo visibile, Google applica un'azione manuale: nessun validatore vede quella differenza, perché il confronto è semantico.

## Dove continuare

L'introduzione al formato è in come aggiungere schema markup; il markup delle domande è in schema FAQPage; la sequenza per entrare nell'indice è in indicizzare un sito su Google. Se il sito è su WordPress o su componenti React, chi genera il JSON-LD cambia: il confronto è in WordPress, Wix o componenti React.

## FAQ

### Meglio Article, NewsArticle o BlogPosting?

Quello che descrive la pagina: BlogPosting per un blog, NewsArticle per una testata, Article quando nessuno dei due è preciso. I tre condividono le stesse proprietà.

### L'immagine è obbligatoria?

Nell'esempio di Google sì, e nella pratica conviene sempre: è la parte del risultato che si vede di più. Deve rispondere 200 e avere un formato che Google indicizza.

### Dove va il blocco Article?

Nell'HTML della pagina, in head o in body, dentro un tag script con type application/ld+json. Non deve stare dentro un altro script.

### Posso usare un unico blocco con @graph?

Sì, ed è quello che fa questo sito: 2 script con 7 nodi, Article accanto a Organization e BreadcrumbList. L'importante è che ogni entità compaia una volta, con dati coerenti.

### datePublished e dateModified devono essere ISO 8601?

Sì. Google accetta data e ora con fuso orario, per esempio 2026-11-01T21:45:00+01:00. Una data senza fuso viene interpretata, e l'interpretazione non è sempre quella che intendevi.
