SEO JavaScript: far indicizzare le tue web app

Le nostre guide
Reputazione online
SEO per PrestaShop
SEO per Shopify
SEO per WooCommerce
Agenti IA autonomi per sviluppare la tua visibilità nelle IA e nei motori di ricerca
URL del tuo sito
Analizza con i nostri Agenti

Un'applicazione JavaScript può funzionare alla perfezione per chi la usa e restare invisibile per Google. Il paradosso è tutto qui: il browser di un visitatore esegue il codice, ricostruisce l'interfaccia e mostra il contenuto, mentre un crawler si ferma spesso al codice sorgente iniziale, che in molte single page application è poco più di un contenitore vuoto. La pagina esiste, funziona, converte, e non compare in nessun risultato di ricerca.

Questa guida raccoglie quello che serve per far indicizzare davvero una web app: come Googlebot elabora il JavaScript, quali errori tecnici bloccano l'indicizzazione, come scegliere fra rendering lato server, generazione statica e prerendering, come proteggere i Core Web Vitals e come verificare con i tuoi strumenti che il contenuto arrivi davvero al motore di ricerca. Niente teoria astratta: controlli riproducibili, criteri di scelta espliciti e le pratiche specifiche dei framework più diffusi.

Punti chiave

  1. Il rendering viene prima di tutto: Google deve poter vedere il tuo contenuto. Il server-side rendering (SSR) resta la soluzione più affidabile per le pagine che pesano sul posizionamento.
  2. Le prestazioni contano davvero: i Core Web Vitals (LCP, INP, CLS) dipendono direttamente dal JavaScript. Alleggerire gli script significa lavorare sul posizionamento, non solo sul comfort del visitatore.
  3. Le basi del SEO restano valide: URL leggibili, link in HTML standard e metadati presenti nel codice sorgente originale sono prerequisiti non negoziabili.
  4. Controlla con metodo: usa la Google Search Console e un crawler come Screaming Frog per simulare il rendering di una pagina e scoprire i problemi che a occhio nudo non si vedono.

Come Google tratta il JavaScript

Per ottimizzare un sito web costruito in JavaScript devi prima capire come i motori di ricerca interpretano questo linguaggio. A differenza dell'HTML classico, leggibile all'istante, il contenuto generato dinamicamente richiede un processo di esplorazione e rendering in più passaggi, che può rallentare l'indicizzazione o impedirla del tutto.

Il processo di esplorazione del JavaScript

Google analizza le tue pagine JavaScript in tre fasi distinte, e ognuna può fallire in modo indipendente dalle altre:

  1. Esplorazione iniziale: il robot Googlebot scarica il codice HTML grezzo della pagina, esattamente quello che vedi con la voce «Visualizza sorgente pagina» (Ctrl+U). Se il contenuto principale non è lì, in questa fase Google non lo conosce.
  2. Coda di rendering: per il contenuto dinamico, tipico delle applicazioni CSR, la pagina viene messa in attesa. Il Web Rendering Service, che si basa su Chrome, esegue il JavaScript e ricostruisce la pagina completa.
  3. Indicizzazione finale: solo a rendering concluso Google può analizzare il contenuto definitivo, valutarlo e inserirlo nei risultati di ricerca.
Illustrazione: due pagine schematiche affiancate, una quasi vuota e una piena di blocchi di contenuto, su fondo chiaro.

Il nodo critico è la seconda fase. Il rendering consuma molte risorse e può richiedere ore, a volte giorni. In quell'intervallo un concorrente che pubblica HTML statico è già indicizzato, sta accumulando dati di posizionamento e occupa la posizione che avresti dovuto occupare tu. Su un sito editoriale che pubblica ogni giorno, il ritardo si trasforma in un divario strutturale.

Il problema si aggrava sui siti di grandi dimensioni. Il budget di scansione non è infinito: ogni pagina che obbliga Google a eseguire un bundle pesante costa più di una pagina servita in HTML, e le pagine profonde finiscono per essere visitate sempre più di rado. Il risultato tipico è un sito con migliaia di URL nella sitemap e poche centinaia effettivamente indicizzate.

Consiglio pratico: per sapere esattamente cosa vede Google dopo il rendering, apri lo strumento Controllo URL nella Google Search Console. Lancia un «Test dell'URL pubblicato» e guarda con attenzione lo screenshot e l'HTML generato. Se il contenuto principale non compare, hai un problema di indicizzazione da risolvere prima di qualsiasi altra ottimizzazione.
Illustrazione: una lente sospesa sopra una pila di pagine sovrapposte, con lo strato superiore a fuoco su fondo neutro.

Vale la pena ripetere il test su almeno un URL per tipo di pagina: home, categoria, scheda prodotto, articolo, pagina di ricerca interna. Le web app raramente si comportano allo stesso modo su tutti i modelli, e il problema si nasconde quasi sempre nel modello che nessuno controlla mai.

Perché il rendering lato server cambia le regole

Il server-side rendering (SSR) ribalta la situazione: consegna a Googlebot una pagina HTML già costruita, prima ancora che il browser entri in gioco. Titoli, testi, link e metadati sono immediatamente presenti nella risposta del server, senza dipendere dall'esecuzione del JavaScript lato client. Il motore di ricerca non deve più aspettare la coda di rendering per capire di cosa parli.

  1. Client-Side Rendering (CSR): il server invia una struttura minima (<div id="app"></div>) e lascia al browser il compito di eseguire il JavaScript per generare il contenuto. Ogni fragilità della rete, del dispositivo o del crawler si traduce in contenuto mancante.
  2. Server-Side Rendering: il rendering avviene lato server e il client riceve una pagina completa. Migliora insieme l'indicizzazione e la percezione di velocità del sito.

Il guadagno sui Core Web Vitals è misurabile. Il SSR fa scendere il Largest Contentful Paint (LCP) perché l'elemento principale della pagina è già nel documento, senza attendere il download, il parsing e l'esecuzione degli script. Sui dispositivi mobili di fascia media, dove la CPU è il vero collo di bottiglia, la differenza si conta spesso in secondi interi.

Attenzione però a non trattare il SSR come una bacchetta magica. Un server lento a rispondere sposta semplicemente il problema: il tempo perso nell'esecuzione del JavaScript sul client ricompare come tempo di attesa sul primo byte. Il SSR va accompagnato da una politica di cache seria, altrimenti paghi il costo dell'architettura senza incassarne il beneficio.

Errori tecnici che bloccano l'indicizzazione

Alcuni problemi restano invisibili agli utenti e rendono comunque il sito inutilizzabile per i robot. Sono quasi sempre gli stessi, e un consulente SEO con esperienza li riconosce nei primi minuti di analisi.

  1. Bloccare le risorse .js e .css nel robots.txt
  2. Conseguenza: Google non riesce a ricostruire la pagina e ne vede una versione mutilata, senza stili né funzionalità. Una riga come Disallow: /assets/ diventa catastrofica se quella cartella contiene i file CSS e JavaScript essenziali.
  3. Navigazione basata su frammenti (#)
  4. Conseguenza: Google ignora in genere tutto ciò che segue il # in un URL. Per sezioni come /servizi#seo preferisci percorsi reali (/servizi/seo) gestiti con la History API, che restituiscono un URL indicizzabile.
  5. Contenuto mostrato solo dopo un'interazione
  6. Conseguenza: Googlebot non clicca, non passa il mouse e non scorre come farebbe una persona. Tutto ciò che compare solo dopo un clic su una scheda o su un pulsante «Leggi tutto» rischia di non entrare mai nell'indice.
  7. Modificare i tag SEO critici lato client
  8. Conseguenza: cambiare canonical o title via JavaScript crea incoerenze. Google può indicizzare la versione iniziale, prima che gli script vengano eseguiti, e ritrovarsi con due segnali contraddittori sulla stessa pagina.
  9. Redirect gestiti solo lato client
  10. Conseguenza: un redirect JavaScript spreca budget di scansione. Il motore deve attendere il rendering completo per scoprire la destinazione, mentre un redirect HTTP 301 comunica la stessa informazione in una singola risposta del server.

A questi cinque classici se ne aggiungono altri due che vedo spesso: la paginazione infinita senza URL corrispondenti, che rende irraggiungibili i contenuti oltre il primo blocco, e i contenuti caricati da un dominio esterno bloccato o troppo lento, che semplicemente non arrivano in tempo per il rendering.

Se stai muovendo i primi passi e vuoi inquadrare il posizionamento organico nel suo insieme prima di scendere nel dettaglio tecnico, la guida introduttiva copre il metodo completo: come i robot analizzano e indicizzano il contenuto generato in JavaScript, come impostare sitemap e robots.txt, la differenza fra rendering lato client e lato server, l'uso dei dati strutturati e l'ottimizzazione delle prestazioni. Trovi anche la ricerca di parole chiave, la struttura HTML, i link interni, i backlink e gli strumenti di misura indispensabili. Consulta la guida SEO per principianti.

Ottimizzare il JavaScript per i Core Web Vitals

Un JavaScript pesante e mal organizzato è la prima causa di Core Web Vitals scadenti, e questi indicatori entrano direttamente nella valutazione di Google. Su una web app il lavoro di ottimizzazione tecnica non è un dettaglio di rifinitura: è ciò che separa una pagina che si posiziona da una pagina che resta ferma.

Migliorare rapidamente LCP e INP

  1. Suddivisione intelligente del codice: non costringere il visitatore a scaricare tutto il JavaScript dell'applicazione in un colpo solo. Dividi il bundle in moduli leggeri, caricati solo quando servono davvero.
  2. Buona pratica: usa gli import dinamici import() per caricare un componente soltanto sulle pagine che lo utilizzano.
Un'immagine per capire: il code splitting è una biblioteca che ti passa i libri uno alla volta, invece di rovesciarti addosso l'intero scaffale appena entri dalla porta.
  1. Caricamento controllato (async e defer): per gli script non critici usa sistematicamente questi attributi:
  2. <script src="analytics.js" async></script>: download in parallelo ed esecuzione appena il file è pronto, anche a costo di interrompere il parsing.
  3. <script src="chat-widget.js" defer></script>: download in parallelo ed esecuzione dopo il parsing dell'HTML. Nella maggior parte dei casi è la scelta giusta.
  4. Evitare gli spostamenti di contenuto (CLS): riserva lo spazio degli elementi caricati in un secondo momento. Dichiara le dimensioni (width e height) oppure usa la proprietà CSS aspect-ratio per mantenere stabile il layout.

L'INP merita un'attenzione particolare sulle applicazioni ricche di interazioni. Una funzione che blocca il thread principale per centinaia di millisecondi peggiora l'indicatore anche se la pagina si carica in fretta. Spezza i compiti lunghi, sposta i calcoli pesanti in un Web Worker e rimanda tutto ciò che non serve alla prima interazione dell'utente.

Gestire gli script di terze parti

Gli script esterni, cioè analytics, pubblicità, chat e widget vari, sono spesso i peggiori nemici delle prestazioni, e nessuno li rivede mai dopo l'installazione.

Metodo consigliato: rimanda il loro caricamento alla prima interazione reale del visitatore, cioè un clic, uno scorrimento o un passaggio del mouse. Proteggi i Core Web Vitals senza rinunciare a una sola funzionalità.

Bastano poche righe con un gestore di eventi che si esegue una volta sola:

// Caricamento differito degli script di terze parti ['scroll', 'click', 'mouseover', 'touchstart'].forEach(evento => { document.addEventListener(evento, caricaScriptTerzeParti, {once: true}); });

Fai anche un inventario periodico. Su un sito con qualche anno di vita è normale trovare due strumenti di analytics che misurano la stessa cosa, un pixel pubblicitario di una campagna chiusa da mesi e una libreria caricata per una funzione rimossa. Ogni script eliminato è un guadagno immediato, senza righe di codice da scrivere.

Strategie di rendering: scegliere l'approccio giusto

La strategia di rendering determina il risultato SEO della tua applicazione JavaScript più di qualunque altra scelta tecnica. Ogni approccio ha un terreno in cui rende al meglio e un limite che devi conoscere prima di impegnarti.

StrategiaCaso d'uso idealeVantaggi SEOLimiti
SSR (Server-Side Rendering)E-commerce, contenuti aggiornati di frequenteIndicizzazione immediata, contenuto sempre aggiornatoCarico sul server più alto, sviluppo più complesso
SSG (Static Site Generation)Siti vetrina, blog, documentazionePrestazioni massime grazie alla CDN, compatibilità eccellenteRichiede una nuova build a ogni modifica
Prerendering dinamicoMigrazione progressiva di applicazioni esistentiSoluzione di compromesso, implementazione rapidaCosti variabili, rischio di incoerenza fra le versioni

Nella pratica, la scelta si fa quasi sempre per tipo di pagina e non per l'intero sito. Le schede prodotto e gli articoli passano in SSR o SSG, mentre l'area riservata, il carrello e la dashboard restano tranquillamente in CSR: sono pagine che nessuno vuole indicizzare. Questo approccio misto riduce il costo dell'infrastruttura e concentra lo sforzo dove porta traffico.

Capire l'idratazione

In un'architettura ibrida il server invia prima l'HTML statico, che accelera la lettura per Google e per il visitatore, poi il JavaScript lato client «idrata» la pagina e la rende interattiva. È il modello adottato dalla maggior parte dei framework moderni.

Un'analogia utile: ricevi una casa già costruita (l'HTML statico) e poi ci porti dentro l'impianto elettrico e quello idraulico (il JavaScript) perché diventi abitabile.

Punto delicato: l'HTML generato lato server deve corrispondere esattamente al risultato dopo l'idratazione. Ogni divergenza produce un errore di idratazione, spesso visibile solo in console, che può far sparire o duplicare blocchi di contenuto e danneggiare il tuo SEO tecnico senza che nessuno se ne accorga.

Il SXO (Search Experience Optimization) parte dall'idea che il posizionamento moderno dipenda tanto dall'esperienza offerta quanto dalle tecniche classiche. Per il SEO JavaScript significa ridurre l'impatto degli script sul rendering minificando i file, rimandando il codice non critico e liberando il thread principale, privilegiare il rendering lato server o il prerendering per il contenuto dinamico, adottare il lazy loading e i formati immagine moderni per tenere l'LCP sotto i 2,5 secondi con un CLS minimo, curare la struttura semantica e i dati strutturati, e misurare l'effetto reale su traffico e conversioni. Scopri come unire SEO ed esperienza utente con il SXO.

Governare gli script con Google Tag Manager

Aggiungere ogni tracciante a mano dentro il codice sorgente è il modo più sicuro per perderne il controllo. Google Tag Manager (GTM) ti permette di pilotare i tag di marketing e di analisi senza toccare il sito e senza sacrificare il SEO.

  1. Centralizzazione: sposta tutti i tuoi tracciatori (GA4, Meta Pixel, LinkedIn Insight Tag) dentro GTM. Il codice sorgente si alleggerisce e ogni modifica smette di richiedere un rilascio.
  2. Caricamento asincrono: il contenitore GTM esegue gli script in modo asincrono per costruzione, il che limita l'impatto sui Core Web Vitals decisivi per il posizionamento.
  3. DataLayer strutturato: implementa un dataLayer solido per trasmettere i dati dal backend a GTM in modo affidabile, invece di leggere il DOM con selettori che si rompono al primo restyling.
  4. Conformità al GDPR: GTM semplifica il Consent Mode v2, che adatta il comportamento dei tag alle preferenze di consenso raccolte dal visitatore.

Un dataLayer ben scritto è anche la base di qualsiasi misurazione seria delle conversioni. Ecco la struttura tipica di un evento e-commerce:

// Esempio di dataLayer per e-commerce

dataLayer.push({

'event': 'purchase',

'ecommerce': {

'transaction_id': '12345',

'value': 99.99,

'currency': 'EUR'

}

});

Se vuoi approfondire la configurazione del contenitore, i trigger e la gestione delle variabili, la guida completa a Google Tag Manager copre il percorso dall'installazione alla messa in produzione.

Garantire l'indicizzabilità delle tue pagine

Anche con un rendering impeccabile, alcuni errori di base bastano a compromettere il SEO di una web app. Sono regole elementari, ed è esattamente per questo che vengono dimenticate.

La regola non ammette eccezioni: i tuoi link devono usare il tag HTML standard. Scrivi sempre <a href="/la-mia-pagina"> per la navigazione. I robot leggono l'attributo href e nient'altro: un gestore onClick su un div non è un link, è un pulsante invisibile ai motori di ricerca.

Ecco come implementare correttamente la navigazione in una single page application, mantenendo l'URL leggibile per i crawler:

<a href="/prodotti/scarpe-running" onclick="navigateSPA('/prodotti/scarpe-running')">Scarpe da running</a>

Vale anche per la struttura complessiva del sito. Ogni pagina importante deve essere raggiungibile da un percorso di link in HTML, con un numero ragionevole di clic dalla home. Se l'unica strada per arrivarci passa da un filtro applicato via JavaScript o da una ricerca interna, per Google quella pagina resta orfana. Il capitolo sui tag HTML essenziali riprende in dettaglio queste convenzioni.

Metadati stabili e affidabili

I tag title, meta description, canonical e i dati strutturati sono decisivi per il SEO e devono comparire nel codice HTML sorgente restituito dal server. Generarli soltanto con il JavaScript lato client significa affidarne il destino alla coda di rendering, con il rischio che Google indicizzi valori generici o duplicati su tutto il sito.

Ecco come si presenta una testata correttamente costruita:

<head><title>Scarpe da running premium | Il nostro negozio</title><meta name="description" content="Scopri la selezione di scarpe da running premium per ogni terreno."><link rel="canonical" href="https://example.com/prodotti/scarpe-running" /><script type="application/ld+json">{"@context": "https://schema.org","@type": "Product","name": "Scarpe da running premium"}</script></head>

Un controllo veloce e affidabile consiste nel confrontare il title visibile nella scheda del browser con quello presente nel sorgente. Se differiscono, sai che qualcosa viene riscritto dal client, e sai anche dove andare a cercare. Per il quadro completo sui segnali che portano una pagina nell'indice, vedi la guida sull'indicizzazione su Google.

Audit SEO JavaScript: la metodologia completa

Per tenere sotto controllo il posizionamento di un'applicazione JavaScript serve un audit tecnico ricorrente. Il percorso qui sotto è quello che uso davvero, nell'ordine in cui va eseguito.

  1. Verifica di esplorazione e rendering, con il controllo di robots.txt, della sitemap e dello stato di indicizzazione
  2. Individuazione degli script che pesano di più sul caricamento
  3. Valutazione dell'esperienza reale misurata sugli utenti, non in laboratorio
  4. Applicazione delle correzioni mirate, cioè rinvio degli script non critici, caricamento asincrono, lazy loading e gestione della cache

Il tutto misurando l'effetto sui Core Web Vitals con Google Search Console, PageSpeed Insights e Screaming Frog. Restano poi due questioni che decidono l'esito del lavoro: come stabilire la priorità delle correzioni e come mantenere il monitoraggio dopo la messa online, perché una regressione introdotta da un rilascio successivo annulla in una settimana mesi di guadagni.

Consulta la guida all'audit SEO tecnico, ottimizzazione JavaScript compresa

  1. Test senza JavaScript: disattiva temporaneamente JavaScript con un'estensione del browser e verifica che contenuto principale, navigazione e link restino accessibili. È il modo più diretto per misurare quanto dipendi dal rendering lato client.
  2. Confronto fra sorgente e DOM: metti a fianco il codice sorgente iniziale (Ctrl+U) e il DOM finale negli strumenti per sviluppatori. Il contenuto che conta ha bisogno del rendering dinamico per esistere?
  3. Scansione con simulazione JavaScript: in Screaming Frog attiva la modalità di rendering (Configuration > Spider > Rendering > JavaScript) e confronta i risultati con e senza esecuzione degli script. La differenza è esattamente ciò che rischia di sfuggire a Googlebot.
  4. Convalida con gli strumenti Google: incrocia il Controllo URL della Search Console con il Test dei risultati avanzati, perché entrambi usano lo stesso motore di rendering del robot di Google.
  5. Controllo delle risorse bloccate: assicurati che il robots.txt non impedisca l'accesso ai file .js e .css necessari, senza i quali Googlebot non può completare l'indicizzazione.

Ripeti questi cinque controlli a ogni rilascio importante e dopo ogni aggiornamento del framework. Su una web app la salute tecnica non è uno stato acquisito una volta per tutte, è una misura che cambia a ogni deploy.

Fai analizzare il tuo sito da Nox

Buone pratiche avanzate per framework

I principali framework JavaScript offrono strumenti nativi per il posizionamento organico. Ecco come sfruttarli in ciascun ecosistema.

Next.js (React): SSR ottimizzato

  1. getServerSideProps: adatto ai contenuti dinamici come cataloghi e profili utente
  2. getStaticProps con getStaticPaths: genera le pagine statiche e ottiene le migliori prestazioni SEO
  3. next/head: gestione dinamica dei tag meta pagina per pagina
// Configurazione SEO tipica con Next.js export async function getServerSideProps(context) { const datiProdotto = await recuperaProdotto(context.params.id); return { props: { prodotto: datiProdotto } }; }

Angular Universal: rendering universale

  1. Server-side rendering nativo tramite Angular Universal
  2. Gestione dei tag con i servizi Meta e Title, aggiornati sul server e non solo nel browser
  3. Controllo fine del processo di idratazione, utile per limitare gli errori di corrispondenza

Vue.js e Nuxt.js: prestazioni e SEO

  1. Architettura universale pensata per il rendering e il posizionamento fin dal primo giorno
  2. Gestione integrata del file robots.txt tramite i moduli ufficiali
  3. Generazione automatica della sitemap XML, con la possibilità di escludere le rotte private

Qualunque sia il framework, la prova finale è sempre la stessa: apri il sorgente di una pagina e cerca il tuo contenuto. Se lo trovi lì, sei a posto. Se lo trovi solo nel DOM, hai ancora lavoro da fare, e la cura dell'esperienza utente non basterà a compensarlo.

In sintesi

Il SEO JavaScript non è una disciplina separata, è il SEO classico applicato a pagine che si costruiscono in un secondo momento. Le regole restano quelle di sempre: contenuto accessibile senza interazione, link in HTML standard, metadati nel sorgente, pagine leggere. Cambia solo il modo di verificarle, perché quello che vedi nel browser non è quello che vede il crawler.

Parti dal controllo più semplice, cioè il confronto fra sorgente e pagina renderizzata su un URL per ogni modello del tuo sito. Se il contenuto manca, il rendering lato server o il prerendering diventano la priorità assoluta, prima di qualsiasi lavoro sulle parole chiave. Se il contenuto c'è, sposta l'attenzione sulle prestazioni e sull'ordine di caricamento degli script, dove i margini di guadagno sono quasi sempre notevoli.

Crea il tuo account e collega il sito

Domande frequenti

Come indicizza Google una pagina JavaScript?

Google procede in due tempi. Prima analizza l'HTML grezzo restituito dal server, poi mette la pagina in una coda di rendering dove un Chrome senza interfaccia esegue il JavaScript e ricostruisce il contenuto finale. Questa seconda fase può richiedere da poche ore a diversi giorni, ed è la ragione per cui il server-side rendering resta la strada più sicura quando l'indicizzazione rapida conta, per esempio su un sito di notizie o su un catalogo che cambia spesso.

SSR o CSR: quale impatto sul posizionamento?

Il SSR consegna un HTML subito utilizzabile dai robot, mentre il CSR richiede l'esecuzione del JavaScript prima che il contenuto esista. Per le pagine che devono portare traffico organico scegli sempre il rendering lato server o la generazione statica. Il CSR resta perfettamente adatto alle aree autenticate, ai carrelli e alle dashboard, cioè a tutto ciò che non ha alcun motivo di comparire nei risultati di ricerca.

Quali buone pratiche per ottimizzare il SEO JavaScript?

Struttura HTML semantica, URL puliti senza frammenti, metadati presenti nel codice sorgente iniziale, risorse .js e .css accessibili ai crawler, code splitting, uso di SSR o SSG sulle pagine strategiche e verifiche regolari con la Google Search Console. La velocità di esecuzione degli script pesa sui Core Web Vitals, quindi si riflette sul posizionamento anche quando il contenuto viene indicizzato correttamente.

Il mio sito è in React, devo per forza passare a Next.js?

Non necessariamente. Se soltanto una parte del sito deve posizionarsi, per esempio il blog e le schede prodotto, puoi generare quelle pagine in statico o passare da un servizio di prerendering, lasciando il resto dell'applicazione in React puro. La migrazione completa a Next.js si giustifica quando il contenuto indicizzabile costituisce il cuore del progetto e quando il costo del prerendering, in denaro e in incoerenze da gestire, supera quello della riscrittura.

Come verifico che Googlebot veda il mio contenuto?

Il controllo più rapido è il «Test dell'URL pubblicato» dello strumento Controllo URL nella Google Search Console: lo screenshot e l'HTML generato ti dicono esattamente cosa è arrivato al motore di ricerca. Affianca una scansione con Screaming Frog in modalità rendering per confrontare, su tutto il sito, la versione con e senza JavaScript. Ripeti entrambi i controlli su un URL per ogni modello di pagina, perché il problema si nasconde quasi sempre nel modello che nessuno esamina.