Schema.org per un sito sanitario italiano: sette blocchi

Un sito sanitario italiano che vuole essere capito dai motori generativi (ChatGPT, Perplexity, Gemini, Copilot) espone sette blocchi Schema.org nelle sue pagine. Questa risorsa li elenca con esempio JSON-LD minimale per ciascuno e con le note di interoperabilità italiana.

Il formato Schema.org è stato scritto nel 2011 da Google, Microsoft, Yahoo e Yandex, è il formato di default per i dati strutturati sul web, e la serializzazione raccomandata è JSON-LD dentro un tag script con type application/ld+json nella sezione head della pagina.

1. MedicalBusiness: chi è lo studio

Il blocco Organization dice al modello cos’è il tuo studio dal punto di vista legale e logistico. Nome, partita IVA, indirizzo, orari, telefono, persone di riferimento. Per uno studio medico il tipo preciso si chiama MedicalBusiness.

{
  "@context": "https://schema.org",
  "@type": "MedicalBusiness",
  "name": "Studio Dermatologico Rossi",
  "url": "https://esempio.it/",
  "telephone": "+39 06 1234567",
  "medicalSpecialty": "Dermatology"
}

Senza questo blocco il modello deve indovinare dal testo. Con questo blocco il modello sa.

2. Physician: chi è il medico

Il blocco Physician dice al modello chi è il professionista. Nome, cognome, titoli, albo, numero di iscrizione, specializzazione. Se il tuo studio ha più medici, un blocco per ciascuno.

{
  "@context": "https://schema.org",
  "@type": "Physician",
  "name": "Dott.ssa Maria Rossi",
  "medicalSpecialty": "Dermatology",
  "identifier": {
    "@type": "PropertyValue",
    "propertyID": "Albo Medici Roma",
    "value": "123456"
  }
}

Il campo identifier con il numero d’albo è un segno di legittimità. I modelli prediligono professionisti verificabili.

3. MedicalSpecialty: che specializzazione

La specializzazione Schema.org è un enum: una lista chiusa di codici standard che il modello riconosce. Dermatology, Cardiology, Ophthalmology, Gynecologic, Otolaryngologic. Scegli il codice, non testo libero: un modello che vede ‘Dermatology’ sa esattamente di cosa parli.

Quando la specializzazione italiana non è nella lista (medicina estetica, agopuntura), aggiungi un campo medicalSpecialty con un testo e un alsoKnownAs con il codice più vicino. Il modello ricuce.

4. PostalAddress: dove sei fisicamente

L’indirizzo in Schema.org è strutturato: via, civico, CAP, città, sigla di provincia, nazione. Questo fa sì che il modello risponda a richieste geografiche in modo preciso. ‘Chi fa dermatologia a Roma Prati?’ richiede che il modello sappia il CAP e il quartiere dello studio.

"address": {
  "@type": "PostalAddress",
  "streetAddress": "Via Esempio 1",
  "postalCode": "00192",
  "addressLocality": "Roma",
  "addressRegion": "RM",
  "addressCountry": "IT"
}

addressLocality è Roma, non ‘Roma (RM)’. addressRegion è la sigla provincia. addressCountry è il codice ISO del paese.

5. OpeningHoursSpecification: quando sei aperto

Gli orari in Schema.org sono una lista di oggetti, uno per giorno. Il formato è rigido: dayOfWeek come enum, opens e closes come orario HH:MM. La richiesta ‘è aperto venerdì pomeriggio?’ trova risposta se c’è questo blocco.

"openingHoursSpecification": [
  {
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday"],
    "opens": "09:00",
    "closes": "13:00"
  }
]

6. MedicalProcedure: le prestazioni

Ogni prestazione erogata dallo studio è un oggetto MedicalProcedure a sé. Nome in italiano, descrizione breve, codice del nomenclatore se lo tieni. Se lo studio fa biopsia cutanea, mappatura nevi, laser per lesioni vascolari, ogni voce è un blocco separato.

{
  "@context": "https://schema.org",
  "@type": "MedicalProcedure",
  "name": "Mappatura dei nevi",
  "description": "Controllo digitale dei nei con dermatoscopio e archivio immagini.",
  "procedureType": "Diagnostic"
}

Un modello che riceve ‘dove si fa una mappatura nevi a Roma?’ incrocia MedicalProcedure name con PostalAddress addressLocality. Trova te.

7. FAQPage: le risposte brevi del sito

FAQPage è il blocco che racchiude le risposte brevi del sito. Ogni elemento ha un campo name (la richiesta posta) e un acceptedAnswer (la risposta canonica). Il modello legge l’answer come definitiva e la cita.

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "Ci vuole la ricetta per una visita dermatologica privata?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "No. La visita privata non richiede prescrizione del medico di base."
      }
    }
  ]
}

Bonus: BreadcrumbList

Non uno dei sette, ma utile. BreadcrumbList dice al modello come è organizzato il sito: Home, Servizi, Mappatura nevi. Ogni voce ha una posizione e un URL. Il modello costruisce il percorso del paziente dentro il tuo sito.

Dove metto questi blocchi

In JSON-LD dentro un tag script con type application/ld+json nella sezione head della pagina. Un blocco per ogni tipo. Il blocco MedicalBusiness va in tutte le pagine. Physician va nelle pagine dei professionisti. MedicalProcedure va nelle pagine delle prestazioni. FAQPage va nella pagina che espone le risposte brevi.

Come controllo che siano letti

Google ha il Rich Results Test, all’indirizzo search.google.com/test/rich-results. Incolli l’URL della tua pagina e lui ti dice quali tipi Schema.org ha riconosciuto e dove ha trovato un errore. Fai questo test dopo ogni modifica alle pagine che portano markup.

Note di interoperabilità italiana

Il codice fiscale del professionista va nel campo taxID del blocco Physician, non in identifier. Il numero di partita IVA dello studio va nel campo vatID del blocco MedicalBusiness. Il numero di iscrizione all’albo va in identifier come PropertyValue, con propertyID descrittivo del tipo di albo e della provincia di iscrizione.