SEO per Nuxt
Nuxt offre il rendering lato server per impostazione predefinita, ma la scelta vale per ogni singola rotta: i crawler ricevono HTML completo solo dove resta attiva. Modalità di rendering, useSeoMeta(), il pacchetto @nuxtjs/seo, idratazione, Nitro, metriche web essenziali ed errori difficili da notare.
Lingue
1 segnale di evidenza in questa pagina
- Strumento live correlatoCore Web Vitals History & Competitor Comparison
Nuxt esegue il rendering lato server per impostazione predefinita, quindi ogni rotta che conserva questa scelta fornisce ai crawler un documento HTML completo invece del guscio vuoto di una semplice SPA Vue. La garanzia non vale però per l'intero progetto: routeRules o un ssr:false globale possono trasformare una rotta in CSR, perciò va controllato l'URL effettivo. La decisione fondamentale è la modalità di rendering della singola rotta: SSR, SSG tramite nuxt generate o regole ibride; meta tag, schema e sitemap vengono dopo. Usa useSeoMeta() per i metadati e considera @nuxtjs/seo di Harlan Wilton un pacchetto facoltativo di terze parti, non parte del nucleo di Nuxt, per robots, sitemap, immagini OG, schema e URL canonici. Evita il rendering dinamico, deprecato da Google, verifica separatamente idratazione, payload, distribuzione e cache di Nitro e ricorda che i crawler AI non condividono un unico contratto di rendering: SSR e SSG inseriscono il contenuto nell'HTML grezzo e massimizzano la copertura.
TL;DR — Nuxt è un framework basato su Vue ed è adatto alla SEO per un motivo principale: su una rotta che mantiene l’impostazione predefinita, costruisce le pagine sul server, quindi i motori di ricerca ricevono una pagina HTML completa invece di un documento vuoto da riempire nel browser. È un’impostazione della singola rotta, non una garanzia per l’intero sito:
routeRuleso unssr: falseglobale possono riportare qualsiasi rotta al guscio vuoto tipico di Vue senza Nuxt. Controlla la rotta effettiva, non soltanto il nome del progetto. La scelta più importante che farai è come viene renderizzata ogni rotta; tutto il resto (meta tag, sitemap) viene dopo.
Perché Nuxt è buono per la SEO — sulle rotte che mantengono l’impostazione predefinita
Vue, da solo, costruisce una single-page app: il server invia un guscio HTML quasi vuoto, e JavaScript riempie il contenuto una volta che viene eseguito nel browser. Questo è complicato per la ricerca, perché la pagina sembra vuota finché JavaScript non viene eseguito.
Nuxt è il “meta-framework” di Vue, un insieme di strumenti più completo costruito attorno a Vue, e la sua
impostazione predefinita risolve quel problema. Nuxt esegue prima il rendering delle pagine sul server
(server-side rendering, o SSR), quindi quando Google o un visitatore chiedono una pagina
su una rotta che non ha disattivato SSR, ricevono l’HTML completo
subito. Evidence for this claim Nuxt universal rendering returns server-rendered HTML to the browser by default. Scope: Nuxt default universal rendering. Confidence: high · Verified: Nuxt: Rendering modes Nessuna attesa per JavaScript. Questa è la
ragione principale per cui un sito Nuxt può essere più facile da indicizzare rispetto a una semplice app Vue —
ma il risultato dipende dalla singola rotta e non è garantito dal nome del framework.
Una rotta con ssr: false, o una che si affida a <ClientOnly> per il suo contenuto
principale, perde quel vantaggio e presenta lo stesso problema di guscio vuoto che ha
il semplice Vue.
La decisione più importante: il rendering di ogni rotta
Quando qualcuno chiede una pagina specifica, dove viene costruito il suo HTML? Questa è una
questione a livello di routeRules, non a livello di progetto — un’app Nuxt può mescolare modalità
tra le rotte. Nuxt ti offre alcune opzioni:
- Server-side rendering (SSR) — l’impostazione predefinita. Il server costruisce la pagina completa a ogni richiesta. Ottimo per la SEO.
- Generazione statica (SSG) — esegui
nuxt generatee Nuxt costruisce tutte le tue pagine in normali file HTML prima della pubblicazione. Anche questa modalità è ottima per la SEO e perfetta per blog e documentazione che non cambiano ogni minuto. - Modalità SPA — la pagina viene costruita nel browser, come con Vue senza Nuxt. Evitala per qualsiasi contenuto che vuoi rendere reperibile nei risultati di ricerca.
La buona notizia è che le impostazioni predefinite sono già corrette: devi soprattutto evitare di disattivarle.
Aggiungere titoli e meta tag
In Nuxt imposti il titolo e la meta descrizione della pagina con la funzione integrata
useSeoMeta(). Evidence for this claim Nuxt provides useSeoMeta for defining SEO and social metadata. Scope: Current Nuxt composable. Confidence: high · Verified: Nuxt: useSeoMeta La richiami nella pagina e le passi il titolo, la descrizione e
l’immagine per la condivisione social:
useSeoMeta({
title: 'My Page Title',
description: 'A concise, page-specific summary with the key information first',
})Questo è il modo moderno e consigliato. (C’è una funzione più vecchia chiamata useHead()
che funziona ancora ed è usata per altre cose nel <head> della pagina, ma per i
meta tag SEO usa useSeoMeta().) Google non ha un limite fisso di caratteri per la meta description;
i frammenti dipendono dalla query e vengono troncati per adattarsi al dispositivo: controlla quindi
l’anteprima delle pagine importanti nella lingua e nel sistema di scrittura previsti, invece di programmare in funzione di una quota.
Il componente aggiuntivo opzionale: i moduli SEO di Nuxt
Il nucleo di Nuxt non genera un robots.txt, una sitemap XML, immagini per la condivisione social,
dati strutturati o URL canonici: questi compiti spettano a pacchetti separati e facoltativi,
non a una funzione fornita automaticamente da nuxt.config.ts. Lo sviluppatore
Harlan Wilton mantiene un pacchetto comunitario gratuito, installabile come
@nuxtjs/seo, che li riunisce. È uno strumento di terze parti e non
fa parte di Nuxt, quindi installarlo non rende automaticamente corretto ciò che produce;
devi comunque confermare che la sitemap, le regole robots e lo schema che genera
corrispondano a ciò che vuoi realmente.
La cosa che la gente sbaglia
Molti presumono che “Vue/Nuxt non possa comparire su Google”. Anni fa l’idea aveva qualche fondamento per Vue senza Nuxt, ma non vale per Nuxt con rendering lato server. Gli errori reali consistono, per esempio, nel disattivare SSR per sbaglio o nel bloccare i file JavaScript, impedendo così a Google di costruire la pagina.
Vuoi la versione più approfondita — il menu completo delle modalità di rendering, l’ecosistema dei moduli in dettaglio, Core Web Vitals, e gli errori comuni con le soluzioni? Passa alla scheda Avanzate.
TL;DR — L’impostazione predefinita di Nuxt è il rendering lato server, quindi una rotta che la mantiene ottiene un DOM completo invece del guscio vuoto fornito da una semplice SPA Vue; il risultato dipende però dalla singola rotta:
ssr: falseo una regola dirouteRulespuò trasformare qualsiasi rotta in CSR o ibrida, quindi testa la rotta effettiva, non il nome del progetto. La strategia di rendering è la decisione fondamentale — SSR (predefinito), SSG (nuxt generate), orouteRulesibridi — perché meta, schema e sitemap vengono tutti dopo. UsauseSeoMeta()per i meta tag (useHead()per il resto della sezione head, varianti solo server quando non ti serve reattività), e considera il pacchetto@nuxtjs/seodi Harlan Wilton come un pacchetto facoltativo di terze parti per robots, sitemap, immagini OG, schema e URL canonici: non fa parte del nucleo di Nuxt e il suo risultato va comunque controllato. Non usare il rendering dinamico, deprecato da Google. Le capacità dei crawler AI variano in base al fornitore: SSR e SSG massimizzano la copertura dell’HTML grezzo. Oltre all’HTML iniziale, verifica idratazione e payload, configurazione di distribuzione e cache di Nitro, oltre allo stato HTTP diretto: l’HTML del server da solo non prova nessuno di questi. Le solite regole JS-SEO valgono ancora: link reali<a href>, non bloccare JS/CSS, controlla HTML renderizzato vs. grezzo.
Nuxt è la risposta di Vue al problema delle SPA
Vue, da solo, fornisce un’applicazione a pagina singola: un guscio HTML e il JavaScript che costruisce il DOM nel browser. Nuxt è il meta-framework basato su Vue, eseguito dal motore server Nitro in Nuxt 3 e Nuxt 4, e il suo principale vantaggio per la SEO è il rendering lato server predefinito. Ogni pagina arriva come un documento HTML completo, proprio ciò che Googlebot vuole leggere senza dover eseguire JavaScript prima. La SEO di Vue senza Nuxt è un argomento a sé, con modalità di errore specifiche; qui presumo che tu abbia scelto Nuxt proprio per non dover combattere il problema delle SPA.
Questo è lo stesso punto che faccio su JavaScript in generale: “any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines. Gatsby, Next, Nuxt, etc., are all great.” (traduzione) «qualunque configurazione basata su SSR, rendering statico o prerendering funzionerà bene per i motori di ricerca. Gatsby, Next, Nuxt e simili sono tutte ottime soluzioni.» (fonte originale) Le impostazioni predefinite di Nuxt sono orientate nella giusta direzione. La maggior parte dei problemi SEO di Nuxt nasce quando qualcuno le disattiva o introduce altri errori.
La strategia di rendering è la base — decisa per rotta, non per progetto
Prima dei meta tag, prima dello schema, prima delle sitemap, la domanda che decide
tutto è come viene prodotto l’HTML per questa specifica rotta? Nuxt
documenta il rendering universale lato server come impostazione predefinita dell’app, ma questa scelta
non è una garanzia a livello di rotta: un ssr: false globale commuta l’intera app al
rendering lato client, mentre routeRules può assegnare una modalità diversa a qualsiasi schema di URL.
Dire “questa è un’app Nuxt” non chiarisce come venga renderizzata una determinata pagina:
viene renderizzata — devi controllare la rotta. Nuxt ti offre cinque strategie:
| Modalità | Come la imposti | Impatto SEO | Ideale per |
|---|---|---|---|
| Universale / SSR | Predefinito (ssr: true) | Eccellente — HTML completo a ogni richiesta | Contenuti dinamici e personalizzati |
| Statico / SSG | nuxt generate | Eccellente — HTML costruito al momento della distribuzione | Blog, documentazione, marketing |
| Ibrido | routeRules per rotta | Eccellente — mix per rotta | Siti grandi con contenuti misti |
| SPA / CSR | ssr: false | Scarso per contenuti indicizzati | Dashboard, pannelli admin |
| Lato edge | Destinazione di distribuzione | Eccellente — TTFB basso | Prestazioni globali |
La documentazione ufficiale di Nuxt è chiara sul perché il rendering lato client sia la scelta sbagliata per i contenuti: “Indexing and updating the content delivered via client-side rendering
takes more time” (traduzione) «indicizzare e aggiornare i contenuti forniti tramite rendering lato client richiede più tempo»; con il rendering universale lato server, invece, “web crawlers can
directly index the page’s content.” (traduzione) «i crawler web possono indicizzare direttamente il contenuto della pagina». Evidence for this claim Nuxt documents that universal rendering delivers HTML content immediately and allows crawlers to index it directly. Scope: Nuxt rendering; no indexing guarantee. Confidence: high · Verified: Nuxt: Rendering modes
(Documentazione sul rendering di Nuxt.) Il CSR
(ssr: false) è pensato per back-office, dashboard e giochi — non per qualcosa che vuoi indicizzato.
Il rendering ibrido è la mossa vincente per i siti di grandi dimensioni. Le regole di rotta in
nuxt.config.ts permettono di impostare la modalità di rendering e la cache per ogni schema di URL:
routeRules: {
'/blog/**': { prerender: true }, // SSG for the blog
'/product/**': { swr: 3600 }, // ISR-style: regenerate hourly
'/admin/**': { ssr: false }, // SPA for the admin area
'/checkout/**': { ssr: true }, // always-fresh SSR
}swr (stale-while-revalidate) e isr (incremental static regeneration) generano
una pagina in forma statica e poi la aggiornano in background: è una soluzione ideale per e-commerce con molte pagine
o notizie dove una ricostruzione completa a ogni modifica non è pratica. Nuxt
Islands (<NuxtIsland>) renderizzano componenti senza inviare JavaScript lato client,
riducendo il costo dell’idratazione e migliorando l’INP, la metrica web essenziale che più spesso rappresenta un
problema nelle app Nuxt.
Come verificare ciò che hai effettivamente pubblicato: Visualizza sorgente mostra l’HTML grezzo inviato dal server; se il contenuto è presente, il rendering avviene lato server. Il pannello Elements degli strumenti per sviluppatori mostra il DOM renderizzato, mentre lo strumento Controllo URL di GSC mostra ciò che Google ha effettivamente recuperato e renderizzato — la fonte di verità. Non fidarti di “sembra a posto nel mio browser.”
Come Googlebot gestisce un’app Nuxt
Google elabora qualsiasi app JavaScript in tre fasi — scansione, rendering e indicizzazione — e il problema è il tempismo: il rendering avviene in una coda, non istantaneamente. Come ho detto nel mio Guida SEO JavaScript, il renderer è paziente — “there is no fixed timeout for the renderer… It’s really patient, and you should not be concerned.” (traduzione) «non esiste un timeout fisso per il renderer… È davvero paziente e non dovresti preoccuparti». Ma essere paziente non significa essere veloce per i contenuti freschi. Se pubblichi una pagina renderizzata lato client, il tuo contenuto non esiste per Google finché non viene eseguita quella ondata di rendering; SSR e SSG colmano questo divario perché l’HTML è completo al primo recupero.
Altre due cose contano su larga scala. Renderizzare JavaScript è costoso — dal mio talk del 2019
JavaScript SEO (Ungagged), i costi di crawl aumentano di circa 20× una volta che Google deve renderizzare
(direzionale, ma l’ordine di grandezza regge ancora). E Google prende la direttiva più
restrittiva tra HTML grezzo e renderizzato — quindi un noindex iniettato da
JavaScript vincerà su un index nell’HTML grezzo, e viceversa. Un canonical
iniettato via JavaScript è rispettato solo se non c’è già un canonical nell’HTML grezzo.
Mantieni i segnali robots e canonical nell’HTML renderizzato lato server, cosa che
Nuxt fa per te quando SSR è attivo.
La realtà dei crawler AI
Questa è la novità del 2026. I crawler AI, tra cui GPTBot, ClaudeBot e PerplexityBot, altri — generalmente non eseguono affatto JavaScript. Indicizzano l’HTML grezzo e nient’altro. Quindi una pagina Nuxt renderizzata lato client è di fatto invisibile ai motori di risposta AI. SSR o SSG non sono solo migliori per Google qui; sono il prezzo d’ingresso anche per l’ottimizzazione dei motori di risposta. Se vuoi che il tuo contenuto sia citato da ChatGPT, Perplexity o Claude, deve trovarsi nell’HTML già al primo recupero.
Oltre l’HTML iniziale: payload, idratazione e codici di stato
Ottenere dal server un HTML che contenga il testo è necessario ma non sufficiente: molte cose possono ancora andare storte a valle di quella prima risposta, e “ho controllato View Source” non le copre:
- Payload e idratazione. Il rendering universale invia l’HTML e un payload di dati serializzato che il client usa per idratare la pagina, collegare i gestori degli eventi e riprendere da dove il server ha terminato, senza recuperare nuovamente i dati. Un HTML del server apparentemente corretto non prova che l’idratazione sia riuscita, che la navigazione client riproduca lo stesso contenuto, o che il payload non sia obsoleto. Se una pagina sembra a posto al primo caricamento ma si rompe dopo un cambio di rotta lato client, è un problema di idratazione/payload, non di modalità di rendering.
<ClientOnly>e contenuti solo browser. Avvolgere qualcosa in<ClientOnly>— comune per widget che dipendono dalle API del browser — significa che è assente dalla risposta del server anche su una rotta altrimenti universale. Se il tuo contenuto principale, un link chiave o i tuoi meta tag finiscono dentro un confine solo client, i crawler e i bot AI che leggono solo l’HTML grezzo lo perdono, indipendentemente dalla tua impostazione di modalità di rendering. Ispeziona la risposta effettiva, non solo la configurazione della modalità di rendering.- Codici di stato e redirect non sono auto-certificanti. Una pagina di
errore Nuxt che si renderizza nel browser, o un redirect guidato da
navigateTo()/composable, non prova da solo quale stato HTTP la risposta diretta del server ha inviato. Le linee guida di Google sono esplicite che i codici di stato significativi contano per la scansione e l’indicizzazione — conferma l’header effettivo concurl -I, non ciò che la pagina di errore renderizzata dal client mostra.
Niente di tutto questo è un argomento contro il rendering universale — è il promemoria che «l’HTML è renderizzato lato server» è il primo controllo, non l’ultimo.
Nitro, configurazioni di distribuzione e confini della cache
La risposta del server Nuxt viene costruita da Nitro, che compila in modo diverso a seconda della configurazione di distribuzione scelta (server Node, Cloudflare, Vercel, Netlify, output statico e altre). Questo conta per la SEO perché configurazioni e adattatori possono differire nelle API disponibili durante l’esecuzione, nel comportamento della cache, nel supporto allo streaming, nella distribuzione regionale e nell’accesso al file system: non è garantito che una regola di rotta o un gestore del server funzionino allo stesso modo con un’altra configurazione. Due conseguenze che vale la pena testare esplicitamente piuttosto che assumere:
- Chiavi di cache e invalidazione sono specifiche della rotta, non automatiche.
Le regole di rotta
swreisrmemorizzano nella cache e rigenerano l’output, ma una chiave di cache errata, un’invalidazione mancante o un’intestazione di memorizzazione impostata dalla piattaforma di distribuzione possono restituire HTML obsoleto, personalizzato o incoerente ai crawler. Controlla l’età effettiva della risposta e le intestazioniCache-Control/Agesu un URL pubblico, non solo la configurazionerouteRules. - L’ambiente di prova non garantisce la parità con la produzione. Una rotta che viene renderizzata correttamente in sviluppo locale o in una distribuzione di anteprima non conferma che la configurazione di produzione restituisca lo stesso risultato: rotte del server, reindirizzamenti e gestione degli errori appartengono allo strato server di Nitro, che è la parte più incline a cambiare tra destinazioni. Verifica direttamente l’URL di produzione dopo ogni modifica alla distribuzione, come faresti per la modalità di rendering.
Meta tag: useSeoMeta() e useHead()
La gestione della sezione head di Nuxt si basa su Unhead e offre due funzioni componibili per compiti diversi.
useSeoMeta() è quello da usare per i meta tag SEO e social. È un’API
piatta e sicura rispetto ai tipi, con parametri tipizzati. Evidence for this claim useSeoMeta is a typed Nuxt API for SEO and social meta tags. Scope: Current Nuxt composable. Confidence: high · Verified: Nuxt: useSeoMeta Aiuta a evitare il classico errore Open Graph
di usare name dove serviva property:
useSeoMeta({
title: 'My Page Title',
ogTitle: 'My Page Title',
description: 'Concise page-specific description with the key information first',
ogDescription: 'Concise social description tailored to this page',
ogImage: 'https://mysite.com/og-image.png', // must be an absolute URL
twitterCard: 'summary_large_image',
})useHead() è lo strumento generico per tutto il resto della sezione head: script, tag link,
attributi del body e modelli di titolo:
useHead({
titleTemplate: '%s · My Site Name',
htmlAttrs: { lang: 'en' },
})Il pattern di stratificazione affidabile è: impostazioni predefinite statiche (charset, viewport, favicon) in
nuxt.config.ts → modello di titolo a livello di sito e impostazioni predefinite OG globali in app.vue →
sovrascritture specifiche per pagina tramite useSeoMeta() nel componente della pagina. Un bug comune è
mettere useSeoMeta() in un layout invece che nella pagina, il che sovrascrive i tag specifici della pagina
con quelli generici. E poiché i motori di ricerca leggono il caricamento iniziale, i meta SEO in genere
non devono essere reattivi — useServerHead() salta la riesecuzione lato client.
Quale API, e cosa dimostra realmente:
| API | Ambito | Reattivo? | Cosa dimostra sull’output |
|---|---|---|---|
useSeoMeta() | Solo meta SEO/social piatti e tipizzati | Sì (predefinito) | Imposta correttamente le proprietà tipizzate — non che la rotta sia unica, canonica o indicizzabile; quella logica resta tua |
useHead() | Qualsiasi cosa in <head> — script, link, attributi, modello di titolo | Sì (predefinito) | Controllo generale della sezione head; stessa avvertenza — l’uso dell’API non prova che la risposta del server sia corretta |
useServerHead() / chiamate solo server | Come sopra | No — solo server, salta la riesecuzione client | Conferma che il tag viene inviato una volta nell’HTML del server; non conferma che la navigazione client lo reimposti se ci fai affidamento lì |
Chiamare uno di questi composable ti dice che l’API è stata eseguita — non ti dice da solo
cosa emette effettivamente una risposta server diretta o un cambio di rotta lato client.
Conferma con Visualizza sorgente o curl, non solo “Ho chiamato useSeoMeta().”
L’ecosistema di moduli @nuxtjs/seo di Harlan Wilton — facoltativo, non incluso nel nucleo
Il nucleo di Nuxt non include una sitemap, un robots.txt, la generazione di immagini OG o
Schema.org di serie — questi sono al di fuori delle primitive di Nuxt (useHead,
useSeoMeta, regole di rotta, modalità di rendering). La comunità colma questa lacuna con
@nuxtjs/seo di Harlan Wilton — un pacchetto ombrello di terze parti installato separatamente
(nuxtseo.com, attualmente alla v5.x, mantenuto attivamente, pensato per Nuxt
3,16+ e Nuxt 4) che raggruppa sei moduli. Installarlo ti dà la generazione di sitemap,
robots, immagini OG e schema, ma non garantisce da solo che il risultato sia corretto per le tue rotte;
verifica ciò che produce nello stesso modo in cui verificheresti qualsiasi altra cosa:
| Modulo | Cosa fa |
|---|---|
@nuxtjs/robots | robots.txt + meta robots + intestazione X-Robots-Tag |
@nuxtjs/sitemap | Sitemap XML automatiche da pagine + rotte dinamiche |
nuxt-og-image | Immagini OG dinamiche (un template Vue → un’immagine) |
nuxt-schema-org | Dati strutturati Schema.org JSON-LD |
nuxt-seo-utils | URL canonici, breadcrumb, impostazioni predefinite |
nuxt-link-checker | Rilevamento link rotti in fase di build |
Installa l’intero pacchetto con npx nuxt module add seo, oppure prendi i singoli moduli
(npx nuxt module add sitemap robots). Alcuni comportamenti che vale la pena conoscere:
@nuxtjs/sitemapgenera automaticamente dalla tua directorypages/più le rotte dinamiche, si divide in un indice sitemap automaticamente oltre 50 000 URL, supporta sitemap multilingua i18n e ha supporto IndexNow integrato. Una cosa da fare bene: Google ignorachangefreqepriority; conta solo unlastmodaccurato, e solo quando il contenuto cambia davvero.@nuxtjs/robotsgenerarobots.txt, il meta tag robots e l’headerX-Robots-Tag— e per impostazione predefinita disabilita tutti i crawler su ambienti non di produzione, creando la tipica trappola di indicizzazione negli ambienti di prova delle applicazioni headless. Ti dà anche regole per singolo bot, così puoi bloccare GPTBot specificamente mentre lasci stare tutti gli altri (sii intenzionale — blocca un crawler AI e non ti citerà).nuxt-seo-utilsgestisce gli URL canonici e, utilmente, rimuove i parametri di tracciamento (utm_*,fbclid,gclid) dai canonici automaticamente.
nuxt/image e metriche web essenziali
@nuxt/image è il modulo per le immagini: srcset adattivo automatico, formati moderni
(WebP/AVIF), ottimizzazione integrata tramite un fornitore CDN e caricamento differito. Due
regole portano la maggior parte del valore SEO:
- Non caricare mai in modo differito l’immagine LCP. L’immagine principale dovrebbe essere caricata subito; il caricamento differito ritarda il tuo Largest Contentful Paint.
- Imposta sempre
widtheheightcosì il browser riserva spazio e non subisci un impatto sul Cumulative Layout Shift.
<NuxtImg
src="/hero.jpg"
width="1200"
height="630"
alt="Descriptive alt text"
:loading="isHeroImage ? 'eager' : 'lazy'"
format="webp"
/>Gli obiettivi 2026 da raggiungere (p75): LCP ≤ 2,5 s, INP ≤ 200ms, CLS ≤ 0,1. Sulle app Nuxt,
INP è la metrica che tende a peggiorare perché l’idratazione crea ritardi nella risposta agli input, proprio il problema
che Nuxt Islands e <NuxtIsland> aiutano a ridurre.
Nuxt Content + SEO
Se stai usando @nuxt/content (il modulo per contenuti markdown/MDX), l’integrazione
con @nuxtjs/seo è semplice ma ha un problema di ordinamento: carica @nuxtjs/seo
prima di @nuxt/content nel tuo array di moduli. Puoi quindi impostare la SEO nel
frontmatter dei contenuti (title, description, robots, ogImage, schemaOrg) e
estrarla nel tuo template [slug].vue con useSeoMeta() dopo aver recuperato il contenuto. Questa
è la versione nativa di Nuxt del pattern headless-CMS, e vale la stessa disciplina di “ricostruire ciò che
il plugin faceva”.
Errori SEO comuni di Nuxt
- Usare la modalità SPA (
ssr: false) per contenuti che vuoi indicizzare. L’errore più costoso — e quello che ti rende invisibile ai crawler AI. - URL relativi per le immagini OG.
ogImagedeve essere un URL assoluto o le anteprime social si rompono. useSeoMeta()in un layout invece che nella pagina — i tag generici sovrascrivono quelli specifici della pagina.- Non verificare l’HTML renderizzato — View Source ≠ DevTools ≠ ciò che Google ha renderizzato. Usa URL Inspection.
- Bloccare JS/CSS in
robots.txt— Google non renderizza da file bloccati. - Lasciare il
noindex/disallow di staging in posizione dopo il lancio (o, al contrario, dimenticare che@nuxtjs/robotsblocca per impostazione predefinita gli ambienti diversi dalla produzione e chiedersi perché la produzione funziona ma un ambiente personalizzato no). - Caricare in modo differito l’immagine LCP — peggiora il valore LCP.
- Mancanza di
width/heightsulle immagini — CLS. changefreq/prioritynelle sitemap — Google li ignora; sololastmodconta.- Ricorrere al rendering dinamico. Google lo ha deprecato — “dynamic rendering is a workaround and not a long-term solution” (traduzione) «il rendering dinamico è una soluzione temporanea e non una soluzione a lungo termine» — e serve solo ai motori per cui lo configuri, perdendo Bing e ogni crawler AI. Con Nuxt non ti serve mai: SSR e SSG danno già ai crawler HTML completo.
llms.txt e AEO
llms.txt è un file di testo semplice — il cugino di robots.txt — che aiuta gli strumenti AI a navigare
i tuoi contenuti. Il modulo nuxt-llms genera automaticamente /llms.txt e /llms-full.txt
da Nuxt Content. Dalla fine del 2025 i suoi principali utilizzatori sono i server MCP e gli strumenti di programmazione assistita dall’AI
(Cursor, Claude Code) piuttosto che ChatGPT o Perplexity direttamente, ed è più
utile per siti di documentazione e blog tecnici — meno per e-commerce o notizie.
Vale la pena aggiungerlo se sei un sito di documentazione/dev; non è una priorità altrimenti.
Dove si colloca
La SEO di Nuxt è in realtà un’applicazione concreta di JavaScript SEO attraverso le convenzioni di Nuxt — e si sovrappone pesantemente con l’argomento SEO per un CMS headless quando il tuo frontend Nuxt attinge da un backend headless. I principi non cambiano; Nuxt ti dà solo buone impostazioni predefinite e un forte ecosistema di moduli per implementarli.
Riepilogo AI
Una sintesi della versione Advanced:
- Nuxt è il meta-framework di Vue, e il suo vantaggio SEO deriva dall’impostazione predefinita:
server-side rendering. Una rotta che la mantiene fornisce HTML completo,
non il guscio vuoto che una semplice SPA Vue fornisce — ma è un risultato per rotta, non
una garanzia a livello di progetto.
ssr: falseo un override dirouteRulespuò trasformare qualsiasi rotta in CSR o ibrida, quindi verifica la rotta effettiva. - La strategia di rendering è la base, decisa per rotta — decide
tutto prima di meta, schema o sitemap. Modalità: SSR (predefinito), SSG
(
nuxt generate), ibrida (routeRules), SPA (ssr: false, da evitare per contenuti indicizzati), edge. routeRulesibridi mescolano le modalità per URL;swr/isrrigenerano in background; Nuxt Islands riducono il costo dell’idratazione e migliorano INP.- Googlebot esegue la scansione → il rendering (in coda, non istantaneo) → l’indicizzazione; applica la direttiva più restrittiva tra HTML grezzo e renderizzato. Il rendering costa circa 20 volte la scansione. SSR/SSG chiudono il divario temporale.
- Il rendering dei crawler AI dipende dal fornitore — CSR richiede l’esecuzione lato client che non è coperta da un contratto condiviso, quindi SSR/SSG massimizza la visibilità AI.
- Oltre all’HTML di primo caricamento: verifica idratazione e payload in modo indipendente (l’HTML del server
non prova che l’idratazione sia riuscita né che la navigazione lato client sia equivalente), fai attenzione a
<ClientOnly>che nasconde contenuti ai crawler anche su rotte universali, e conferma stato HTTP e reindirizzamenti diretti concurl -Iinvece di fidarti di una pagina di errore renderizzata dal client. - Nitro e configurazioni di distribuzione (Node, Cloudflare, Vercel, Netlify, output statico) possono differire per API disponibili durante l’esecuzione, cache, streaming e regioni: controlla le intestazioni di cache e la parità di produzione per rotta, senza presumere che le configurazioni si comportino in modo identico.
- Meta tag:
useSeoMeta()per SEO e social, con controllo dei tipi;useHead()per il resto della sezione head e varianti solo server quando la reattività non è necessaria. Ordine:nuxt.config.ts→app.vue→ pagina. Non mettereuseSeoMeta()in un layout. Le immagini OG richiedono URL assoluti. Chiamare un’API prova che l’API è stata eseguita, non ciò che restituisce una risposta diretta: verifica con Visualizza sorgente o curl. @nuxtjs/seodi Harlan Wilton è un pacchetto facoltativo di terze parti (v5.x, mantenuto attivamente, per Nuxt 3,16+/4.x) e non fa parte del nucleo di Nuxt. Include robots, sitemap, immagini OG, Schema.org, URL canonici e controllo dei link, ma installarlo non dimostra di per sé che il risultato sia corretto. Sitemap: sololastmodconta. Robots: blocca per impostazione predefinita gli ambienti diversi dalla produzione; supporta regole per i bot AI.@nuxt/image+ metriche web essenziali: non caricare mai in modo differito l’immagine LCP; imposta semprewidth/height(CLS). Obiettivi: LCP ≤ 2,5 s, INP ≤ 200ms, CLS ≤ 0,1.- Non usare il rendering dinamico — Google lo ha deprecato; SSR/SSG di Nuxt servono già HTML completo.
Documentazione ufficiale
Documentazione di fonte primaria da Nuxt e dai motori di ricerca.
Nuxt
- Nuxt — Concetti di rendering — rendering universale, client-side e ibrido (
routeRules), e perché i crawler preferiscono rotte renderizzate lato server. - Nuxt — SEO e Meta (per iniziare) —
useSeoMeta(),useHead()e gestione della head. - Nuxt — Funzione componibile
useSeoMeta— riferimento API tipizzato per i metadati, incluso l’uso solo server. - Nuxt — Motore server (Nitro) — configurazioni di distribuzione, output multipiattaforma e possibili differenze di esecuzione e cache.
- Nuxt — Ciclo di vita di Nuxt — rendering sul server, trasferimento del payload e idratazione come fasi distinte.
- Nuxt Image —
<NuxtImg>, formati adattivi e configurazione del fornitore per le metriche web essenziali. @nuxtjs/seosu Nuxt Modules — voce del catalogo moduli: versione corrente, download e che è un pacchetto installato separatamente.
- Comprendi le basi della SEO per JavaScript — il processo di crawl → render → indicizzazione e i link crawlabili (indipendente dal framework; la documentazione di Google non menziona Nuxt per nome).
- Dynamic Rendering (workaround deprecato) — perché Google lo ha deprecato e cosa usare al suo posto (SSR, rendering statico, hydration).
Citazioni dalla fonte
Dichiarazioni ufficiali da Nuxt, Google e dai miei scritti. Ogni collegamento a un motore di ricerca / Nuxt è un deep link che salta al passaggio citato nella pagina di origine.
Nuxt — rendering per la SEO
- “Indexing and updating the content delivered via client-side rendering takes more time.” (traduzione) «L’indicizzazione e l’aggiornamento dei contenuti forniti tramite il rendering lato client richiedono più tempo.» — Documentazione sul rendering di Nuxt. Vai alla citazione
- “Web crawlers can directly index the page’s content, which makes Universal rendering a great choice for any content that you want to index quickly.” (traduzione) «I crawler web possono indicizzare direttamente il contenuto della pagina, il che rende il rendering universale un’ottima scelta per qualsiasi contenuto che desideri indicizzare rapidamente.» — Documentazione sul rendering di Nuxt. Vai alla citazione
Google — elaborazione di JavaScript e rendering dinamico
- “Google processes JavaScript web apps in three main phases: 1. Crawling 2. Rendering 3. Indexing.” (traduzione) «Google elabora le app web JavaScript in tre fasi principali: 1. Crawling 2. Rendering 3. Indicizzazione.» — Documentazione di Google Search Central. Vai alla citazione
- “Dynamic rendering is a workaround and not a long-term solution for problems with JavaScript-generated content in search engines. Instead, we recommend that you use server-side rendering, static rendering, or hydration as a solution.” (traduzione) «Il rendering dinamico è una soluzione temporanea e non una soluzione a lungo termine per i problemi relativi ai contenuti generati da JavaScript nei motori di ricerca. Consigliamo invece il rendering lato server, il rendering statico o l’idratazione.» — Documentazione di Google Search Central. Vai alla citazione
Patrick Stox (mio lavoro — JavaScript SEO: A Definitive Guide)
- “Any kind of SSR, static rendering, and prerendering setup is going to be fine for search engines. Gatsby, Next, Nuxt, etc., are all great.” (traduzione) «Qualsiasi tipo di configurazione SSR, rendering statico e prerendering andrà bene per i motori di ricerca. Gatsby, Next, Nuxt, ecc. sono tutti ottimi.»
- “There is no fixed timeout for the renderer… It’s really patient, and you should not be concerned.” (traduzione) «Non esiste un timeout fisso per il renderer… È davvero paziente e non dovresti preoccuparti.»
- “JavaScript is not bad for SEO, and it’s not evil. It’s just different from what many SEOs are used to.” (traduzione) «JavaScript non è dannoso per la SEO e non è malvagio. È solo diverso da ciò a cui molti SEO sono abituati.»
Checklist SEO per Nuxt
Una rapida verifica per confermare che un sito Nuxt sia configurato per i crawler di ricerca e AI:
- Il contenuto che vuoi indicizzare è renderizzato sul server o in fase di build (SSR o
SSG) — non in modalità SPA (
ssr: false). - Confermato tramite Visualizza sorgente che il contenuto importante è nell’HTML grezzo, e tramite Ispezione URL che Google lo renderizza.
-
useSeoMeta()è nei componenti di pagina, non in un layout condiviso che sovrascrive i tag di pagina. -
ogImageutilizza un URL assoluto (non relativo). - Un modello per il titolo è impostato una volta in
app.vue; titoli e descrizioni per pagina sono univoci. -
@nuxtjs/sitemapsta generando una sitemap XML;lastmodè accurato e non fai affidamento suchangefreq/priority. -
@nuxtjs/robotsè configurato; il blocco automatico degli ambienti diversi dalla produzione non si applica accidentalmente alla produzione. -
robots.txtnon blocca il tuo JS/CSS. - I canonical sono assoluti e per pagina (
nuxt-seo-utils). - L’immagine LCP viene caricata con priorità (non lazy); tutte le immagini hanno
width/height(CLS). - Link reali
<a href>/<NuxtLink>per la navigazione — nessun routing con<div @click>. - Se usi
@nuxt/content,@nuxtjs/seoè caricato prima di esso nell’array dei moduli. - Il rendering dinamico non è in uso da nessuna parte.
I modelli mentali
1. La strategia di rendering viene prima di tutto. Meta tag, schema e sitemap dipendono da una decisione: come viene prodotto l’HTML. Rispondi “questo contenuto è renderizzato lato server, generato staticamente o renderizzato lato client?” prima di eseguire il debug di qualsiasi altra cosa.
2. SSR è l’impostazione predefinita — il tuo compito è principalmente non romperla.
Nuxt punta le impostazioni predefinite nella giusta direzione. La maggior parte dei fallimenti SEO di Nuxt sono dovuti a qualcuno che imposta
ssr: false, blocca JS/CSS o inietta segnali tramite JavaScript che entrano in conflitto con
l’HTML grezzo.
3. Scegli la modalità di rendering in base al tipo di contenuto.
- Prevalentemente statico (blog, documentazione, marketing) → SSG (
prerender: true). - Sempre aggiornato / dinamico → SSR.
- Contenuto orario/giornaliero che vuole velocità statica →
swr/isr. - Dietro un login, non indicizzato → SPA (
ssr: false) va bene. - Contenuto pubblico che vuoi posizionare o citato dall’IA → mai SPA.
4. HTML-first, JS-second per ogni segnale. Contenuto, meta, canonical, direttive robots e link appartengono tutti all’HTML renderizzato lato server. Google prende la direttiva più restrittiva tra grezzo e renderizzato; i crawler IA vedono solo il grezzo. La SEO iniettata via JS è un ripiego, non il piano.
5. Usa i moduli, ma capisci cosa fanno.
@nuxtjs/seo fa risparmiare lavoro, ma devi comunque gestire correttamente il blocco automatico dei crawler fuori produzione, la sitemap basata soltanto su lastmod e gli URL canonici assoluti.
Nuxt SEO — cheat sheet
Modalità di rendering
| Modalità | Configurazione | SEO | Ideale per |
|---|---|---|---|
| Universale / SSR | ssr: true (predefinito) | ✅ Migliore | Dinamico / personalizzato |
| Statico / SSG | nuxt generate | ✅ Migliore | Blog, documentazione, marketing |
| Ibrido | routeRules | ✅ Migliore | Siti grandi con contenuti misti |
| SPA / CSR | ssr: false | ⚠️ Scarso per l’indicizzazione | Dashboard, admin |
| Lato edge | Destinazione di distribuzione | ✅ TTFB basso | Prestazioni globali |
Composables
| Uso | Ricorri a |
|---|---|
| Meta tag SEO + social | useSeoMeta() (con controllo dei tipi) |
| Modelli per titoli, script, tag link, attributi HTML | useHead() |
| Salta la riesecuzione client per meta statici | useServerHead() |
Moduli @nuxtjs/seo
| Modulo | Compito |
|---|---|
@nuxtjs/robots | robots.txt + meta robots + X-Robots-Tag (blocca per impostazione predefinita gli ambienti diversi dalla produzione) |
@nuxtjs/sitemap | Sitemap XML (solo lastmod conta; indice automatico oltre 50k URL) |
nuxt-og-image | Immagini OG dinamiche |
nuxt-schema-org | Dati strutturati JSON-LD |
nuxt-seo-utils | URL canonici (rimuove utm_*/fbclid/gclid), breadcrumb |
nuxt-link-checker | Link rotti in fase di build |
Regole rapide
- Installa tutto:
npx nuxt module add seo. - Immagini OG: solo URL assoluti.
- Immagine LCP:
loading="eager"; tutte le immagini necessitano diwidth/height(CLS). - Obiettivi CWV: LCP ≤ 2,5 s, INP ≤ 200ms, CLS ≤ 0,1.
- Mai bloccare JS/CSS in robots.txt.
- Rendering dinamico: deprecato — SSR/SSG di Nuxt lo sostituiscono.
- Crawler AI: niente JavaScript → il contenuto SPA è invisibile per loro.
Scopri cosa invia realmente una pagina Nuxt
L’intera questione SEO di Nuxt si riduce a un controllo: il tuo contenuto è nell’HTML grezzo che il server invia, o solo dopo che JavaScript viene eseguito? Se è nell’HTML grezzo, stai facendo server-rendering e i crawler (e i bot AI) possono leggerlo.
Recupera l’HTML grezzo e cerca il tuo contenuto
macOS / Linux:
# Raw HTML as the server sends it — before any client JS runs
curl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
https://example.com/page/ -o raw.html
# Is your headline actually in the server HTML? (empty = client-rendered)
grep -o "Your headline text" raw.htmlWindows (PowerShell):
$ua = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
Invoke-WebRequest -Uri "https://example.com/page/" -UserAgent $ua -OutFile raw.html
Select-String -Path raw.html -Pattern "Your headline text"Se il testo appare nel browser ma manca da raw.html, la pagina viene renderizzata
lato client: passa la rotta a SSR o prerenderizzala. Un semplice curl non può eseguire JavaScript;
per il DOM renderizzato usa Controllo URL o un crawler basato su Chrome senza interfaccia grafica.
Conferma di non bloccare JS/CSS
macOS / Linux:
curl -sL https://example.com/robots.txt | grep -iE "disallow.*\.(js|css)|Disallow:\s*/(_nuxt|_ipx|assets)"Un Disallow che corrisponde a /_nuxt/ (l’output di build di Nuxt) o /_ipx/ (l’ottimizzatore
@nuxt/image) romperà il rendering — quasi sempre un errore.
Frammento di configurazione statica (nuxt.config.ts)
export default defineNuxtConfig({
modules: ['@nuxtjs/seo'], // robots, sitemap, og-image, schema-org, utils
site: { url: 'https://mysite.com' }, // required for absolute canonicals + sitemap
routeRules: {
'/blog/**': { prerender: true }, // SSG for content
'/admin/**': { ssr: false }, // SPA for the dashboard (won't be indexed)
},
}) Strumenti per la SEO di Nuxt
- URL Inspection (Google Search Console) — la fonte di verità. Esegui un test live e controlla l’HTML renderizzato, lo screenshot e le risorse della pagina per confermare che il tuo contenuto Nuxt sia realmente renderizzato e che nulla sia bloccato.
@nuxtjs/seo/ nuxtseo.com — il pacchetto di moduli di Harlan Wilton; il pannello degli strumenti di sviluppo mostra i tuoi robots, sitemap, schema e immagini OG generati in sviluppo.- Nuxt DevTools — ispeziona i tag head, le regole di rotta e quale modalità di rendering sta usando ogni rotta.
- Rich Results Test — conferma che il JSON-LD di
nuxt-schema-orgsia presente nell’output renderizzato dopo qualsiasi modifica al rendering. - Ahrefs Site Audit / Screaming Frog (modalità di rendering JS) — esegui una scansione con rendering JavaScript attivo e una senza, quindi confronta l’HTML grezzo con quello renderizzato nell’intera app Nuxt per individuare lacune CSR.
- Lighthouse / PageSpeed Insights — Core Web Vitals (LCP, INP, CLS) per il
lavoro con
@nuxt/imagee Nuxt Islands. - Bing Webmaster Tools — la vista crawl/indicizzazione di Bing e dove appaiono le sottomissioni IndexNow.
Errori SEO di Nuxt da evitare
Errori concreti che si ripetono su siti Nuxt reali — previenili prima che vengano pubblicati, piuttosto che diagnosticarli dopo che il traffico cala.
Impostare ssr: false su contenuti che vuoi indicizzare
L’errore SEO di Nuxt più costoso in assoluto. La modalità SPA invia lo stesso problema di guscio vuoto che ha il semplice Vue — i motori di ricerca devono aspettare che una coda di rendering riempia il contenuto. I contratti di rendering dei crawler AI variano per fornitore, quindi un crawler che recupera solo l’HTML iniziale perderà il contenuto della pagina.
Perché è sbagliato: rinunci volontariamente all’impostazione predefinita, SSR, che rende Nuxt più facile da indicizzare rispetto al semplice Vue.
Cosa fare invece: lascia ssr: true come impostazione predefinita per qualsiasi contenuto pubblico e
indicizzabile. Riserva ssr: false per superfici genuinamente non indicizzate — dashboard per utenti
registrati, pannelli admin — tramite routeRules, non con un cambio globale di configurazione.
Mettere useSeoMeta() in un layout condiviso
Impostare title/description all’interno di un componente layout sembra efficiente — un unico punto,
si applica ovunque — ma significa che ogni pagina che usa quel layout riceve gli stessi
tag generici, e le chiamate useSeoMeta() a livello di pagina possono essere sovrascritte a seconda
dell’ordine di rendering.
Perché è sbagliato: titoli e descrizioni unici e specifici per pagina sono segnali di rilevanza di base; un valore predefinito a livello di layout li riduce tutti a una singola stringa.
Cosa fare invece: imposta una volta in app.vue i valori di riserva globali, come modello del titolo e dati OG
predefiniti, poi chiama useSeoMeta() all’interno di ogni componente pagina con il titolo e la
descrizione effettivi di quella pagina.
Pubblicare un URL ogImage relativo
ogImage: '/social.png' sembra corretto nel browser ma fallisce completamente quando
Facebook, LinkedIn o X provano a recuperarlo, perché i crawler sociali non risolvono i percorsi
relativi rispetto al tuo sito.
Perché è sbagliato: le piattaforme sociali necessitano di un URL assoluto per recuperare l’immagine; un percorso relativo non si risolve dal loro lato.
Cosa fare invece: passa sempre un URL completo https:// e imposta site.url in
nuxt.config.ts così che i moduli di @nuxtjs/seo possano costruire URL assoluti per te
automaticamente.
Ricorrere al rendering dinamico
Servire uno snapshot pre-renderizzato ai bot noti e la SPA a tutti gli altri era una soluzione legittima anni fa. Google lo ha da allora segnalato direttamente: “dynamic rendering is a workaround and not a long-term solution.” (traduzione) «Il rendering dinamico è una soluzione temporanea e non una soluzione a lungo termine.»
Perché è sbagliato: serve solo i bot che configuri, ignora tutto il resto (Bing, la maggior parte dei crawler AI) e aggiunge infrastruttura reale da mantenere — per un problema che l’SSR/SSG di Nuxt risolve già.
Cosa fare invece: usa SSR o nuxt generate e salta del tutto il rendering dinamico.
Non esiste uno scenario in cui un sito Nuxt ne abbia bisogno.
Bloccare /_nuxt/ o /_ipx/ in robots.txt
Un Disallow: /assets/ generico o una regola robots troppo zelante può catturare accidentalmente
la directory di output di build di Nuxt (/_nuxt/) o il percorso dell’ottimizzatore @nuxt/image
(/_ipx/).
Perché è sbagliato: se Googlebot non può recuperare il JS/CSS che costruisce la pagina, non può confermare che il risultato SSR sia quello atteso, e qualsiasi miglioramento lato client smette silenziosamente di essere renderizzato per esso.
Cosa fare invece: non bloccare mai i percorsi dell’output di build o dell’ottimizzazione immagini. Controlla
robots.txt dopo ogni distribuzione che modifica le rotte o la configurazione dei moduli, non solo una volta
all’avvio.
Lasciare attivo il blocco robots non di produzione dopo il lancio
@nuxtjs/robots blocca tutti i crawler negli ambienti diversi dalla produzione per impostazione predefinita:
è una buona protezione per l’ambiente di prova, ma si basa sulle variabili d’ambiente e un
NODE_ENV configurato male o un’impostazione della distribuzione di anteprima possono farlo scattare anche in produzione.
Perché è sbagliato: il sito sembra perfettamente funzionante nel browser mentre robots.txt
blocca silenziosamente tutto, impedendo l’indicizzazione finché qualcuno non se ne accorge.
Cosa fare invece: dopo qualsiasi distribuzione o modifica dell’ambiente, recupera direttamente
https://yoursite.com/robots.txt e conferma che non sia un Disallow: / generico.
KPI costanti per la SEO di Nuxt
I numeri da monitorare nel tempo una volta che la configurazione di rendering è corretta: non controlli una tantum, ma segnali ricorrenti che catturano regressioni man mano che l’app cambia.
Metriche web essenziali (LCP, INP, CLS)
Cosa ti dice: se i visitatori reali ricevono una pagina veloce e stabile, risultato influenzato direttamente dal costo di idratazione di Nuxt Islands (INP) e dalle scelte di caricamento delle immagini (LCP, CLS).
Come ottenerlo: dati sul campo dal Chrome UX Report tramite /tools/crux-tracker/ o /tools/cwv-checker/; dati di laboratorio da Lighthouse per controlli pre-rilascio.
Benchmark / intervallo realistico: le soglie “buone” pubblicate da Google sono LCP ≤ 2,5 s, INP ≤ 200ms, CLS ≤ 0,1 al 75° percentile — queste sono le linee di superamento/fallimento che CrUX stesso usa, non un numero che invento. Dove ti collochi all’interno di “buono” dipende fortemente dal peso delle tue immagini e da quanto idrati.
Cadenza: i dati sul campo di CrUX si aggiornano su una finestra mobile di 28 giorni — controlla mensilmente, e immediatamente dopo qualsiasi modifica a immagini, font o idratazione.
Parità HTML renderizzato vs. grezzo
Cosa ti dice: se il contenuto che i motori di ricerca e i crawler AI possono
effettivamente vedere (l’HTML grezzo) corrisponde a ciò che un visitatore vede nel browser (il
DOM renderizzato) — il rischio SEO Nuxt principale se ssr viene disattivato o una rotta regredisce a CSR.
Come ottenerlo: /tools/render-gap/ confronta l’HTML grezzo e quello renderizzato per un URL; per la visione autorevole lato Google, usa l’URL Inspection di GSC → “View Crawled Page.”
Benchmark / intervallo realistico: questo è un controllo binario, non un intervallo — il tuo contenuto chiave (titolo, corpo del testo, link interni) dovrebbe essere presente nell’HTML grezzo, senza eccezioni. Qualsiasi lacuna su una pagina che vuoi indicizzare o citare è una regressione da correggere, non un numero da tollerare.
Cadenza: dopo ogni distribuzione che modifica routeRules, layout o la configurazione ssr;
altrimenti, controlla ogni mese un campione dei modelli principali.
Copertura dell’indicizzazione (rapporto Page Indexing)
Cosa ti dice: quanti degli URL inviati Google ha effettivamente indicizzato, e perché le altre sono state escluse (duplicati, scansionate ma non indicizzate, bloccate e così via): è il segnale finale attraverso cui si manifestano i problemi di rendering.
Come ottenerlo: Search Console → rapporto Page Indexing, filtrato sui pattern URL del tuo sito Nuxt.
Benchmark / intervallo realistico: non esiste una percentuale sana universale — dipende da quante URL quasi duplicate o sottili genera la tua struttura di rotte. Osserva la tendenza e le ragioni di esclusione, non un valore obiettivo arbitrario.
Cadenza: settimanale durante e dopo una migrazione della modalità di rendering; mensile altrimenti.
Accesso dei crawler AI
Cosa ti dice: se GPTBot, ClaudeBot, PerplexityBot e simili crawler AI
possono effettivamente recuperare le tue pagine — separato da Google, poiché questi bot
generalmente non eseguono JavaScript e leggono solo l’HTML grezzo che il tuo robots.txt
consente loro di raggiungere.
Come ottenerlo: /tools/ai-crawler-checker/ per confermare che nessun user-agent AI sia disabilitato; i log del server per confermare che i bot stiano effettivamente richiedendo pagine, non solo che siano autorizzati a farlo.
Benchmark / intervallo realistico: non c’è un benchmark di tasso di citazione che possa darti in modo credibile: la frequenza con cui un motore di risposta AI ti cita dipende dall’insieme delle query e dalla competizione, non da qualcosa che la configurazione Nuxt controlla direttamente. Monitora l’accesso (consentito vs. bloccato), non una percentuale di citazione inventata.
Cadenza: dopo ogni modifica a robots.txt o alla configurazione @nuxtjs/robots; altrimenti,
controllo a campione dei log mensile.
Mettiti alla prova: SEO Nuxt
Cinque domande rapide sull’ottimizzazione di un sito Nuxt per la ricerca. Scegli una risposta per ciascuna, poi controlla.
Risorse che meritano il tuo tempo
I miei scritti correlati
- JavaScript SEO: A Definitive Guide — la mia guida completa su rendering, parità DOM, la regola della direttiva più restrittiva e perché SSR/statico/prerender (incluso Nuxt) sono tutti validi per la ricerca.
- The Beginner’s Guide to Technical SEO — dove rendering e crawling si inseriscono nel quadro più ampio.
I miei interventi
- JavaScript SEO — Ungagged 2019 (SlideShare) — il Chromium evergreen di Googlebot, il costo di rendering ~20× del crawl, History API rispetto al routing con hash, e come Google gestisce i canonical iniettati via JS. (Disclaimer permanente: il consiglio sul dynamic rendering in quella presentazione è ora superato — Google lo ha deprecato.)
Dal settore
- Nuxt — Concetti di rendering (ufficiale) — rendering universale vs. lato client e perché i crawler preferiscono la SSR.
- Nuxt — SEO e Meta (ufficiale) —
useSeoMeta()euseHead(), il riferimento per iniziare. - Impara la SEO con Nuxt (Harlan Wilton / nuxtseo.com) — la guida SEO per Nuxt più completa e orientata agli sviluppatori, sempre aggiornata.
- harlan-zw/nuxt-seo (GitHub) — la fonte per il bundle del modulo
@nuxtjs/seo. - Nuxt Image (ufficiale) —
<NuxtImg>e ottimizzazione dei Core Web Vitals. - Ottimizza le prestazioni di Nuxt (DebugBear) — una guida pratica per correggere i Core Web Vitals in Nuxt.
- Modalità di rendering di Nuxt 3 (RisingStack) — un confronto tecnico tra SSR, SSG e rendering ibrido.
- r/TechSEO — la community per il debug di rendering e indicizzazione.
Video
- Google Search Central (YouTube) — la serie JavaScript SEO di Martin Splitt è la migliore guida ufficiale su come Google esegue la scansione, il rendering e l’indicizzazione delle app JS; è indipendente dal framework ma si applica direttamente a Nuxt. Canale
Cronologia modifiche
Aggiornato il 13 ago 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.
Aggiornato il 13 ago 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.
Aggiornato il 3 ago 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.
Aggiornato il 27 lug 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.
Aggiornato il 18 lug 2026.
Riepilogo editoriale e dettagli registrati delle modifiche.Dettagli delle modifiche
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
-
Le note dettagliate sulle modifiche sono attualmente disponibili in inglese.
Confronto completo non disponibile — non è stata archiviata alcuna istantanea precedente per questa revisione.