WP Schema: il plugin che ho costruito per dire a Google chi sono
Quando ho iniziato a ottimizzare questo sito, mi sono reso conto di un paradosso: avevo un portfolio che parlava di sviluppo WordPress, ma Google non aveva idea di chi fossi davvero. Sapeva che esisteva un blog. Non sapeva che dietro c’era un developer, che quegli articoli erano miei, che il sito rappresentava il mio lavoro professionale.
La risposta era nei dati strutturati e nessuno dei plugin che avevo già installato faceva esattamente quello che mi serviva.
Cosa sono i dati strutturati (e perché non bastano le parole)
I motori di ricerca sono ottimi a leggere testo, ma faticano a interpretarne il significato. “Davide Mugnaini” è una stringa. Per Google, senza ulteriori informazioni, potrebbe essere il nome di un articolo, di un autore, di un personaggio citato. I dati strutturati risolvono questa ambiguità: invece di descrivere, dichiarano. “Questa è una persona. Si chiama così. Fa questo lavoro. Puoi trovarla qui.”
Lo standard universale per queste dichiarazioni è Schema.org, creato nel 2011 da Google, Microsoft, Yahoo e Yandex proprio per questo scopo.
Quando i dati strutturati sono corretti e completi, Google può mostrare risultati arricchiti (rich results): stelle di valutazione, breadcrumb, knowledge panel, e per un portfolio da developer il riconoscimento dell’identità professionale con data di pubblicazione degli articoli e immagine in evidenza.
Perché ho scelto JSON-LD
Esistono tre modi per aggiungere dati strutturati a una pagina:
- Microdati e RDFa inseriscono attributi semantici direttamente nell’HTML. Il problema è che ogni modifica al markup deve tenere conto degli attributi Schema.org, creando un accoppiamento difficile da mantenere nei template WordPress.
- JSON-LD separa completamente i dati strutturati dal markup visuale. Viene emesso in un tag
<script type="application/ld+json">nell’<head>, senza toccare il resto del DOM.
Google preferisce esplicitamente JSON-LD, ed è la scelta più pulita da gestire nel contesto di WordPress: un blocco di dati in un posto solo, indipendente dal tema.
@graph: un unico documento, tutto collegato
La parte che mi ha convinto definitivamente è il concetto di @graph. Invece di tre script JSON separati uno per la persona, uno per il sito, uno per l’articolo il @graph raccoglie tutte le entità in un unico documento dove ciascuna può referenziarne un’altra tramite @id.
In pratica: BlogPosting non duplica il nome dell’autore, si riferisce all’entità Person tramite il suo identificatore. Se domani cambio il titolo professionale, lo aggiorno in un posto solo e tutte le pagine restano coerenti.
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://example.com/#website",
"url": "https://example.com",
"name": "Nome del sito"
},
{
"@type": "Person",
"@id": "https://example.com/#person",
"name": "Davide Mugnaini",
"jobTitle": "WordPress Developer",
"sameAs": [
"https://github.com/davmug",
"https://linkedin.com/in/davide-mugnaini"
]
},
{
"@type": "BlogPosting",
"@id": "https://example.com/post-slug/#article",
"headline": "Titolo del post",
"author": { "@id": "https://example.com/#person" },
"isPartOf": { "@id": "https://example.com/#website" }
}
]
}WP Schema: cosa ho costruito e perché
Ho sviluppato WP Schema perché i plugin SEO che avevo già Yoast incluso generano schemi generici che funzionano per qualsiasi sito, non per il mio nello specifico. Non volevo uno strumento all-in-one. Volevo qualcosa di piccolo, preciso, che facesse esattamente quello che mi serve.
Il plugin gestisce tre tipi Schema.org:
- Person chi sono, cosa faccio, dove trovarmi (GitHub, LinkedIn)
- WebSite informazioni sul sito, nome, URL, lingua
- BlogPosting per ogni articolo: titolo, data, autore, immagine, excerpt
La generazione è contestuale: la homepage emette WebSite e Person, i singoli post aggiungono BlogPosting referenziato all’autore. Nessuno schema fuori contesto, nessun dato inutile.
Altre caratteristiche:
- Pannello admin configurabile via Settings API di WordPress nessuna UI custom, piena coerenza con il sistema
- Integrazione con Yoast SEO usa il filtro
wpseo_schema_graphper disabilitare i tipi sovrapposti senza conflitti - Distribuzione via wp-github-updater si aggiorna da GitHub come un plugin su wordpress.org
Il risultato? Il Rich Results Test di Google riconosce tutti e tre i tipi senza errori né avvisi.