---
title: "Iniezione JSON‑LD Edge in tempo reale per dati strutturati multilingue"
---

# Iniezione JSON‑LD Edge in tempo reale per dati strutturati multilingue

I motori di ricerca fanno sempre più affidamento sui dati strutturati per comprendere il contesto di una pagina, e la velocità con cui tali dati vengono consegnati può influenzare direttamente il potenziale di posizionamento. Per i siti globali che servono decine di varianti linguistiche, il modello tradizionale di inserire blocchi JSON‑LD statici durante la fase di build genera latenza, ridondanza e un elevato onere di manutenzione. Spostando la generazione e la validazione di JSON‑LD all'edge, è possibile fornire **schemi istantanei e sensibili alla lingua** sia ai crawler che agli utenti, garantendo che ogni variante di una pagina presenti i micro‑dati più accurati senza sacrificare le prestazioni.

## Perché i dati strutturati ospitati all'edge sono importanti

Quando una richiesta viaggia dal browser del visitatore al server di origine, ogni millisecondo conta. **Content Delivery Networks (CDN)** posizionati all'edge possono intercettare le risposte HTTP e modificarle prima che raggiungano il client. Questa capacità rende possibile:

* Aggiungere o sostituire blocchi JSON‑LD in base alla lingua rilevata.
* Validare lo schema rispetto alle ultime definizioni di [Schema.org] in tempo reale.
* Sfruttare modelli di **Intelligenza Artificiale (AI)** per arricchire le entità con attributi contestuali come orari di apertura locali, valuta o parole chiave culturalmente rilevanti.

Il risultato è un'esperienza **a zero latenza** sia per gli utenti umani sia per i crawler automatizzati, che migliora le metriche di caricamento della pagina — un noto fattore di ranking — e riduce il rischio di servire dati strutturati obsoleti o errati.

## Componenti principali di una pipeline di iniezione edge in tempo reale

La pipeline si articola in tre fasi logiche: rilevamento, generazione e validazione.

### Rilevamento della lingua

All'edge, l'header di richiesta `Accept-Language` viene ispezionato e una rapida ricerca in una tabella di mapping multilingue determina il codice lingua di destinazione (es. `en`, `fr`, `de`). Se l'header è assente, si effettua un fallback alla lingua predefinita del sito.

### Generazione di JSON‑LD

Una funzione serverless leggera, scritta in JavaScript o Rust, preleva il modello di contenuto di base da un key‑value store. La funzione quindi fonde i campi specifici per lingua — come `name`, `description` e `offers.priceCurrency` — in un **template JSON‑LD**. Per l'arricchimento guidato dall'AI, può essere invocato un compatto **Large Language Model (LLM)** per sintetizzare sinonimi o idiomi locali che migliorano la rilevanza semantica.

### Validazione in tempo reale

Prima che la risposta lasci l'edge, il JSON‑LD generato passa attraverso un validatore JSON‑Schema che fa riferimento alla versione corrente di [Schema.org]. Gli errori attivano un fallback a uno schema sicuro già validato, garantendo che i motori di ricerca non incontrino markup rotto.

## Implementazione di JSON‑LD Edge con Cloudflare Workers (Esempio)

Di seguito un esempio conciso di come un Cloudflare Worker possa eseguire il rilevamento della lingua, la generazione di JSON‑LD e la validazione. Il codice utilizza la libreria `jsonschema` per la validazione e un piccolo endpoint di inferenza LLM per l'arricchimento contestuale.

```javascript
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  const lang = request.headers.get('Accept-Language')?.split(',')[0] || 'en'
  const baseContent = await KV.get(`content:${url.pathname}`, { type: 'json' })
  const localized = await enrichWithLLM(baseContent, lang)

  const schema = await fetch('https://schema.org/version/latest/schema.json').then(r => r.json())
  const validator = new jsonschema.Validator()
  const result = validator.validate(localized.jsonld, schema)

  let jsonldBlock = result.errors.length ? baseContent.fallbackJsonld : localized.jsonld
  const response = await fetch(request)
  let html = await response.text()
  html = html.replace('</head>', `<script type="application/ld+json">\n${JSON.stringify(jsonldBlock, null, 2)}\n</script></head>`)
  return new Response(html, response)
}

async function enrichWithLLM(content, lang) {
  const llmResponse = await fetch('https://llm.example.com/enrich', {
    method: 'POST',
    body: JSON.stringify({ content, lang })
  }).then(r => r.json())
  return llmResponse
}
```

Lo script dimostra una funzione edge **stateless** che:

1. Legge la preferenza linguistica dell'utente.
2. Recupera un modello di contenuto di base dallo storage KV.
3. Chiama un LLM per