Due siti, una sola applicazione, e finalmente visibili ai motori di ricerca.
Il sito di prodotto di una società di consulenza sull'AI risultava con zero pagine indicizzate: le pagine si costruivano solo nel browser e i crawler le vedevano vuote. Lo abbiamo riportato, insieme al sito istituzionale, in un'unica applicazione che genera HTML completo sul server.
Due siti, uno istituzionale e uno di prodotto, erano pagine singole costruite in JavaScript nel browser, affiancate da un WordPress per la rassegna stampa e i form. Li abbiamo sostituiti con un'unica applicazione Laravel 13 e Filament 5 che sceglie il sito dall'indirizzo richiesto, genera ogni pagina sul server con meta e JSON-LD e ha un solo pannello per pagine, articoli, SEO e richieste. Abbiamo eliminato WordPress e consegnato un server che il cliente può gestire senza di noi.
Contesto
Il cliente è una società di consulenza sull'intelligenza artificiale con un prodotto per gli uffici legali, compliance e acquisti. I due siti erano esportati da uno strumento di design come pagine singole: belle, ma con tutto il testo costruito da JavaScript al caricamento. La rassegna stampa e i form stavano su un WordPress separato, raggiunto con proxy dal server web.
Il problema
Un crawler che non esegue JavaScript trova una pagina vuota: Search Console riportava zero pagine indicizzate per il sito di prodotto. In più le notifiche dei form del vecchio WordPress non partivano: una richiesta commerciale reale arrivata il 10 ottobre era rimasta ferma senza che nessuno la vedesse.
Cosa abbiamo fatto
- 01
Un'applicazione, due siti
Laravel 13 e Filament 5 servono entrambi i domini dallo stesso codice e dallo stesso database, scegliendo il sito dall'host della richiesta. Un host non previsto risponde 404, quelli di anteprima mandano noindex.
- 02
HTML completo lato server
Ogni pagina è generata sul server con titolo, meta, JSON-LD e sitemap per sito. Le due pagine singole sono diventate più pagine, con i redirect dai vecchi indirizzi. Gli identificativi del grafo JSON-LD sono rimasti identici, perché un grafo esterno li richiama: un carattere diverso avrebbe rotto il collegamento.
- 03
Via WordPress
I 32 articoli della rassegna e lo storico dei form sono stati importati nel nuovo database. Gli articoli che riproducevano per intero testi di terzi sono diventati un riassunto originale con il link alla fonte. I form inviano notifiche e conferme con Amazon SES, e la richiesta rimasta ferma è stata recuperata e girata al cliente.
- 04
Un pannello per la redazione
Pagine a blocchi, articoli, SEO, richieste dai form e utenti in un solo pannello, con ruoli Admin, Editor e Commerciale e autenticazione a due fattori. Il consenso ai cookie passa da CF-Consent con Consent Mode v2.
- 05
Un server che si può consegnare
Niente pannelli di gestione esterni: il server EC2 sta nell'account AWS del cliente, è costruito da uno script nel repository, si aggiorna con GitHub Actions e Deployer, ha snapshot dei dischi e un dump notturno del database. Il vecchio server è rimasto acceso 14 giorni dopo il go-live per poter tornare indietro.
Com'è andata
Il 15 ottobre 2026 i due domini sono passati sul nuovo server insieme, con il cambio di due record DNS e il vecchio server pronto per il rollback. Le sitemap sono state inviate a Search Console e le pagine principali sottoposte all'indicizzazione; la redazione lavora dal pannello, e le richieste dai form arrivano a chi deve leggerle.
Strumenti
Domande frequenti
Perché un sito costruito in JavaScript non viene indicizzato?
Molti crawler, e quasi tutti gli agenti AI, leggono l'HTML che arriva dal server senza eseguire gli script. Se il testo compare solo dopo, per loro la pagina è vuota.
Conviene servire due siti dalla stessa applicazione?
Quando condividono redazione, tipo di contenuti e infrastruttura sì: un pannello, un database e un server da mantenere al posto di due. Ogni sito resta separato per dominio, SEO e grafica.
Cosa vuol dire un server consegnabile?
Che il cliente può prenderne il controllo senza dipendere da noi: sta nel suo account, si ricostruisce da uno script documentato e non richiede abbonamenti a strumenti di terzi.