Blog

SEO 8 min di lettura

Dati strutturati JSON-LD: esempi pronti all'uso e un generatore PHP

JSON-LD è il formato consigliato da Google per i dati strutturati. Questa guida spiega cosa eseguire il markup, mostra esempi pronti per la copia dei tipi schema.org più utili e il piccolo pattern PHP che utilizziamo per generare markup valido su ogni pagina senza scrivere a mano JSON.

Immagine di copertina: Dati strutturati JSON-LD: esempi pronti all'uso e un generatore PHP

In breve

  • JSON-LD è un blocco <script type="application/ld+json"> nella pagina che lo descrive alle macchine, utilizzando il vocabolario schema.org.
  • Esegui il markup solo di ciò che gli utenti possono vedere nella pagina. Il markup che non corrisponde al contenuto rischia un'azione manuale e non guadagna nulla.
  • Inizia con Organization, BreadcrumbList e Article o Product; aggiungi FAQPage, Service o LocalBusiness dove si adattano.
  • Genera JSON in PHP da array con json_encode, un @graph per pagina, con valori @id stabili.
  • Convalida i modelli con il Rich Results Test e lo Schema Markup Validator e monitora i rapporti sui miglioramenti Search Console.

I dati strutturati JSON-LD sono un modo per dire ai motori di ricerca, in un formato leggibile dalla macchina, cos'è una pagina: un articolo, un prodotto con un prezzo, un'azienda con i dettagli di contatto, un elenco di domande e risposte. È invisibile ai visitatori, non sostituisce i contenuti validi e non aumenta di per sé il posizionamento. Ciò che fa è rendere una pagina idonea per risultati avanzati, aiutare i motori a collegare le tue pagine all'entità giusta e fornire alla ricerca basata sull'intelligenza artificiale una fonte più pulita da leggere. Lo generiamo su ogni pagina di integrono.com e sugli altri nostri siti, e questa guida è la versione pratica di quel lavoro.

JSON-LD vs Microdata vs RDFa

Il vocabolario di Schema.org può essere incorporato in tre sintassi. Microdata e RDFa inseriscono attributi nei tag HTML, che intrecciano il markup con i modelli. JSON-LD risiede in un blocco di script, separato dal layout, quindi è più semplice da generare, testare e modificare. Google afferma di consigliare JSON-LD ed è quello che utilizziamo ovunque.

Principi prima degli esempi

  • Descrivi i contenuti visibili. Se il prezzo, la valutazione o le domande frequenti non sono presenti nella pagina, non inserirli nel markup.
  • Utilizza URL assoluti e l'URL canonico della pagina.
  • Sii completo per le proprietà richieste e aggiungi quelle consigliate quando disponi di dati reali.
  • Utilizza @id per collegare le entità. L'autore dell'articolo è l'organizzazione definita una volta con un @id, non una nuova copia ogni volta.
  • Utilizza le date in ISO 8601 (2026-10-28 o con ora e fuso orario).
  • Non inventare recensioni o valutazioni. I dati AggregateRating falsi sono una causa comune di azioni manuali.

Esempio 1. Organizzazione (e sito Web)

Inseriscilo nella home page o in un grafico a livello di sito. Definisce l'entità a cui fa riferimento l'altro markup.

{
  "@context": "https://schema.org",
  "@type": "Organization",
  "@id": "https://example.com/#organization",
  "name": "Example Studio",
  "url": "https://example.com/",
  "logo": "https://example.com/images/logo.png",
  "email": "[email protected]",
  "sameAs": [
    "https://github.com/example",
    "https://www.linkedin.com/company/example"
  ]
}

Esempio 2. Elenco breadcrumb

Il markup breadcrumb consente a Google di mostrare il percorso della pagina anziché un URL non elaborato nei risultati. Deve corrispondere al pangrattato visibile.

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {"@type": "ListItem", "position": 1, "name": "Home", "item": "https://example.com/"},
    {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://example.com/blog"},
    {"@type": "ListItem", "position": 3, "name": "JSON-LD guide", "item": "https://example.com/blog/json-ld-guide"}
  ]
}

Esempio 3. Articolo

Per post di blog e guide. Le proprietà che contano: titolo, date, autore, editore, immagine e URL della pagina.

{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "JSON-LD structured data: examples",
  "description": "Short summary of the article.",
  "url": "https://example.com/blog/json-ld-guide",
  "mainEntityOfPage": "https://example.com/blog/json-ld-guide",
  "inLanguage": "en",
  "datePublished": "2026-08-23",
  "dateModified": "2026-10-28",
  "author": {"@id": "https://example.com/#organization"},
  "publisher": {"@id": "https://example.com/#organization"},
  "image": {"@type": "ImageObject", "url": "https://example.com/images/blog/json-ld.webp", "width": 1200, "height": 630}
}

Modifica dateModified solo quando il contenuto cambia realmente. Incontrarlo a ogni implementazione è un modo silenzioso per perdere la fiducia.

Esempio 4. Prodotto con offerta

Per le pagine dei prodotti con un prezzo visibile. Includi disponibilità e valuta; aggiungi valutazione o review aggregateRating solo se nella pagina vengono visualizzate recensioni reali.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Example product",
  "description": "What it is and who it is for.",
  "image": ["https://example.com/images/product.webp"],
  "sku": "EX-001",
  "brand": {"@type": "Brand", "name": "Example"},
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/product/ex-001",
    "priceCurrency": "EUR",
    "price": "49.00",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  }
}

Esempio 5. Servizio con Offerta

Per servizi a pagamento, come un audit a prezzo fisso o una consulenza oraria. Usiamo questo modello sulle nostre pagine di servizio.

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Architecture review",
  "serviceType": "Software architecture analysis",
  "provider": {"@id": "https://example.com/#organization"},
  "areaServed": "Worldwide",
  "offers": {
    "@type": "Offer",
    "price": "200",
    "priceCurrency": "EUR",
    "url": "https://example.com/services/architecture-review"
  }
}

Esempio 6. Pagina FAQ

Il markup delle FAQ descrive un elenco di domande e risposte visibili nella pagina. Tieni presente che dal 2023 Google mostra i risultati avanzati delle FAQ solo per un insieme limitato di siti autorevoli, quindi non aspettarti risposte espandibili nei risultati. Il markup è ancora valido, ancora leggibile da altri motori di ricerca e sistemi di intelligenza artificiale, e mantiene le FAQ strutturate in modo che le macchine possano citarle.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Do I need structured data to rank?",
      "acceptedAnswer": {"@type": "Answer", "text": "No. It is not a ranking requirement, but it can make pages eligible for rich results."}
    }
  ]
}

Combina tutto in un @graph

Una pagina raramente ha una sola entità. Mettili tutti in uno script usando @graph e fai riferimento alle entità condivise da @id:

{
  "@context": "https://schema.org",
  "@graph": [
    {"@type": "Organization", "@id": "https://example.com/#organization", "name": "Example Studio"},
    {"@type": "Article", "headline": "...", "author": {"@id": "https://example.com/#organization"}},
    {"@type": "BreadcrumbList", "itemListElement": []},
    {"@type": "FAQPage", "mainEntity": []}
  ]
}

Generazione sicura JSON-LD in PHP

Non concatenare JSON manualmente. Una citazione in un titolo interrompe l'intero script e il motore di ricerca la ignora silenziosamente. Costruisci un array PHP e codificalo. Due flag contano: mantenere Unicode leggibile e proteggere il contesto HTML eseguendo l'escape di barre e tag.

function jsonLdScript(array $graph): string
{
    $data = ['@context' => 'https://schema.org', '@graph' => $graph];
    $json = json_encode(
        $data,
        JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP | JSON_THROW_ON_ERROR
    );
    return '<script type="application/ld+json">' . $json . '</script>';
}

$graph = [
    ['@type' => 'Organization', '@id' => $site . '/#organization', 'name' => 'Example Studio', 'url' => $site . '/'],
    [
        '@type'         => 'Article',
        'headline'      => $title,
        'url'           => $canonical,
        'datePublished' => $published,
        'dateModified'  => $modified,
        'author'        => ['@id' => $site . '/#organization'],
    ],
];
echo jsonLdScript($graph);

JSON_HEX_TAG trasforma < e > in sequenze di escape in modo che il contenuto dell'utente non possa mai chiudere anticipatamente il tag script. Alimenta il generatore con gli stessi dati che visualizzano la pagina (titolo, prezzo, date), in modo che markup e contenuto visibile non possano discostarsi. In un sito multilingue, tradurre i campi di testo e impostare inLanguage in base alle impostazioni internazionali; ecco come vengono prodotti gli articoli di questo blog e il markup delle FAQ.

Convalidare e monitorare

  1. Rich Results Test l'idoneità dei tipi di risultati avanzati di Google.
  2. Schema Markup Validator per la sintassi generale schema.org di qualsiasi tipo.
  3. Rapporti sui miglioramenti Search Console (breadcrumb, prodotti, domande frequenti e così via) per errori e avvisi su larga scala, dopo che Google ha eseguito la scansione delle tue pagine.
  4. Un test unitario che esegue il rendering di ogni modello e controlla che JSON-LD analizzi e contenga le chiavi richieste impedisce le regressioni dopo i refactoring.

Errori che ti costano

  • Markup per contenuti che non sono presenti nella pagina (FAQ nascoste, valutazioni inventate, prezzi diversi dal prezzo visibile).
  • Diversi blocchi in conflitto da un plugin e un modello, ciascuno con una diversa Organization.
  • URL relativi, date errate o @id mancante.
  • JSON non funzionante a causa della creazione manuale di stringhe e virgolette senza caratteri di escape.
  • Trattare lo schema come un trucco di classificazione. È uno strumento di chiarezza; la pagina deve ancora meritare di posizionarsi.

Come possiamo aiutare

I dati strutturati sono una parte del nostro lavoro tecnico SEO: progettiamo lo schema per i tuoi modelli, implementiamo il generatore nel tuo stack e impostiamo la convalida in modo che rimanga corretto dopo i rilasci. Se desideri una panoramica di ciò che non va nel tuo sito, inizia con la nostra lista di controllo tecnico SEO o prenota una consulenza.

Domande frequenti

Cosa sono i dati strutturati JSON-LD ?

JSON-LD è un blocco di script contenente dati schema.org in formato JSON che descrive il contenuto di una pagina ai motori di ricerca, ad esempio un articolo, un prodotto, un'organizzazione o una FAQ.

I dati strutturati migliorano il ranking?

Non direttamente. Aiuta i motori di ricerca a comprendere la pagina e può renderla idonea per risultati avanzati, il che può migliorare la percentuale di clic, ma non è un requisito di posizionamento.

Dove inserisco lo script JSON-LD ?

Ovunque nell'intestazione o nel corpo HTML della pagina; la maggior parte dei siti lo mettono in testa. Deve essere presente nell'HTML renderizzato recuperato da Google, quindi la generazione lato server è l'approccio più sicuro.

Vale ancora la pena aggiungere il markup FAQPage?

Google ora mostra risultati ricchi di FAQ solo per un insieme limitato di siti, ma il markup FAQ valido rimane leggibile da altri motori di ricerca e sistemi di intelligenza artificiale. Aggiungilo solo per le domande e le risposte visibili nella pagina.

Come posso testare i dati strutturati?

Utilizza Rich Results Test di Google per ottenere risultati avanzati idonei, lo Schema Markup Validator per la sintassi generale e i rapporti di miglioramento Search Console per tenere traccia degli errori nell'intero sito.

Chiamata conoscitiva gratuita

Portate uno stack disordinato o un'integrazione bloccata - Integrono mapperà la prima mossa più intelligente.

Ottenete una lettura senior su trappole di budget, dipendenze e se conviene comprare, assemblare o costruire - prima che parta il lavoro a pagamento. Il CEO resta nel loop.