Perché i motori non indicizzano le pagine dinamiche
Un problema che spesso tocca da vicino chi sviluppa siti web complessi è l'indicizzazione delle pagine dinamiche sui motori di ricerca. Per pagina dinamica qui si intende una pagina web che viene generata dinamicamente, ossia dietro passaggio di alcuni parametri attraverso l'URL, dal server Web in collaborazione con un database.
Per saltare subito alla soluzione proposta andate alla terza pagina di questo articolo. Se volete approfondire il problema continuate la lettura.
La difficoltà di indicizzazione deriva non dal contenuto delle pagine Web - una pagina dinamica fornisce al browser e dunque allo spider una normalissima pagina HTML o equivalente - ma dalla stuttura dei link. Consideriamo questo indirizzo dinamico:
http://pro.html.it/view_articolo.asp?id=217&idcat=36
Un motore di ricerca incontrerà difficoltà a seguire questo tipo di link e la pagina corrispondente a quel collegamento verrà ignorata. Alla base di questo impedimento non c'è un motivo tecnologico, quanto un motivo di opportunità del motore.
Le pagine che generano contenuti in base a parametri dinamici possono anche indurre il motore ad entrare in un circolo vizioso, in un loop continuo. Consideriamo quest'altro indirizzo:
http://forum.html.it/forum/forumdisplay.php?s=9a4737&forumid=27
Il parametro s= (session) indica in questo caso il valore della sessione di collegamento e viene utilizzato dal sito per tenere traccia del passaggio di un singolo utente. Cambiando il numero di sessione, e dunque l'URL, la pagina non cambia. Un motore non potrebbe tenere traccia del cambiamento di questa variabile e dunque si troverebbe ad indicizzare centinaia di pagine identiche con URL differenti, oppure, peggio, continuerebbe ad indicizzare il sito all'infinito.
Come si comportano i motori
Per risolvere questo problema i motori di ricerca o ignorano le pagine dinamiche oppure impongono dei limiti ben precisi nella loro indicizzazione. Altavista, ad esempio, accetta pagine dinamiche solamente se inserite manualmente oppure se inserite dopo aver preso parte al suo programma a pagamento. Alltheweb (FAST) e Google indicizzano solamente le pagine dinamiche linkate da pagine statiche.
Google, tuttavia, applica questa seconda tecnica in modo meno efficace di Alltheweb. Una prova con l'ottimo tool offerto da Marketleap ci permette di verificare la penetrazione di alcuni motori di ricerca su due siti dinamici di HTML.it: FreePHP e FreeASP, online da più di un anno. Su questi due siti non è stata ancora utilizzata alcuna tecnica di ottimizzazione delle pagine dinamiche.
Come vedete i risultati, soprattutto su Google (42 FreeASP, 23 FreePHP), sono piuttosto bassi, considerando che entrambi i siti posseggono almeno 400/500 pagine più di quelle conteggiate da Fast (1317 FreeASP, 1333 FreePHP).
Ma c'è di più. All'aumentare dei parametri utilizzati negli URL aumenta la difficoltà di indicizzazione dei motori. Un URL del seguente tipo (in cui i valori variabili sono concatenati da una &):
http://pro.html.it/view_articolo.asp?id=217&idcat=36
sarà più difficilmente indicizzabile di un URL come quest'altro
http://pro.html.it/view_articolo.asp?id=217
PRO.HTML.it, che utilizza variabili del primo tipo, prima dell'operazione di riscrittura degli URL che descriveremo avanti aveva indicizzate su Google solamente 48 pagine. Ora (aggiornamento di agosto 2002) siamo a quota 1200!
Come risolvere il problema: riscrivere l'URL
Insomma i problemi sono tanti e vari. Come risolverli? Esistono molte tecniche per sopperire a questo problema, tuttavia la migliore soluzione è quella di procedere alla riscrittura degli URL.
Il concetto è semplice: utilizzare nel vostro sito URL il più possibile vicini agli standard. Sostituire insomma a
http://pro.html.it/view_articolo.asp?id=217&idcat=36
Una cosa del genere:
http://pro.html.it/articoli/id_217/idcat_36/pro.html
Esistono due soluzioni gratuite e automatizzate sia per siti costruiti in ASP sia per siti costruiti in PHP. Il loro utilizzo è vincolato ad alcuni passaggi:
- Bisogna avere accesso al pannello di controllo di IIS per ASP oppure al file httpd.conf (o anche .htaccess) per Apache
- Bisogna modificare tutti gli indirizzi all'interno del sito web per farli puntare al nuovo tipo di indirizzo
Per chi non avesse accesso alla configurazione del server proponiamo alla fine un metodo alternativo.
ASP (Active Server Pages) e IIS
Su pro.html.it, un sito costruito con ASP, viene utilizzata la URL Replacer: indicizzare siti dinamici in ASP messa a disposizione gratuitamente da Antonin Foller, uno sviluppatore cecoslovacco.
Tecnicamente si tratta di un filtro ISAPI che intercetta le chiamate ad un dato url e in base ad alcuni parametri le reindirizza all'indirizzo reale. In superficie, sia gli utenti sia lo spider del motore di ricerca vedranno gli URL riscritti in formato standard (http://pro.html.it/articoli/id_217/idcat_36/pro.html), al web server invece arriverà la richiesta della pagina originale (http://pro.html.it/view_articolo.asp?id=217&idcat=36).
Le istruzioni di installazione fornite con il piccolo software sono chiarissime. Qui ci limitiamo a dire che tutte le riscritture degli URL sono gestite da una comoda interfaccia Web che agisce su un file di configurazione del Web Server. È utile anche sapere che modifiche errate della riscrittura non comporteranno alcuna perdita di dati: l'indirizzo originale sarà sempre raggiungibile.
Su PRO.HTML.it si è proceduto a queste modifiche:
Dopo il simbolo '?' sono stati sostituiti '&' con '/' e '=' con '_'. Dunque l'URL http://pro.html.it/view_articolo.asp?id=217&idcat=36 sarà raggiungibile anche con la scrittura http://pro.html.it/view_articolo.asp?id_217/idcat_36/.
In più sono state aggiunte anche queste condizioni:
- view_articolo.asp? è stato sotituito con articoli/
- .asp? è stato sotituito con .asp/
Ogni link presente nelle pagine è stato modificato per puntare al nuovo formato e il sito è stato indicizzato completamente (da Google). Per verificarlo basta fare una ricerca con chiave PRO restringendo i siti al solo pro.html.it e prendere nota delle pagine indicizzate.
PHP (Hypertext Preprocessor) e Apache
In questo caso il discorso si complica. La riscrittura dell'URL viene attivata per mezzo di un'estensione aggiuntiva di Apache chiamata mod_rewrite (URL Rewriting Engine). La difficoltà nell'utilizzo di questa tecnologia non è tanto nella sua installazione (viene fornito con Apache), quanto nella sintassi da utilizzare per la riscrittura. Il mod_rewrite infatti fa uso delle Regular Expression (o Regex), ossia alcune regole di linguaggio utilizzate nella gestione del testo in molti linguaggi di programmazione.
In sintesi si tratta di scegliere alcune regole precise per la riscrittura dell'indirizzo Web. Qui di seguito forniamo un esempio utilizzato il libri.html.it, per chi invece volesse approfondire l'utilizzo delle Regular Expression rimandiamo ad un articolo su Evolt.org e alle pagine delle Regular Expression Library di ASPSmith che contengono anche un motore per la verifica dell'esattezza delle espressioni.
Dunque, su libri.html.it, basato su PHP, Apache e MySQL, gli indirizzi di ogni singolo libro erano di questo tipo
http://libri.html.it/recensioni/viewbook.php?id=66
Dopo la riscrittura i link sono diventati invece:
http://libri.html.it/recensioni/libro/66.html
Per raggiungere questo obiettivo si è utilizzato la seguente Regular Expression:
RewriteRule ^libro/([^/]+).html viewbook.php?id=$1 [L]
Traducendolo in parole umane: qualsiasi cosa che sia simile a libro/(qualsiasi carattere tranne lo slash).html verrà sostituito per il web server con viewbook.php?id=(caratteri precedenti). Importante è notare come l'espressione inclusa tra parentesi tonde viene richiamata nella seconda parte della Regular Expressione dal carattere $1. $ seguito da un numero progressivo richiama infatti tutto ciò che viene incluso in parentesi tonde nella prima parte. Se avessimo avuto un'altra espressione inclusa tra parentesi tonde nella prima parte essa sarebbe stata richiamata da $2 e così via.
Per attivare la riscrittura dell'URL bisogna inserire la seguente sintassi in un file nominato .htaccess da posizionare nella stessa directory (originale) in cui si vorrà attivare la riscrittura. Nel nostro caso il file .htaccess è stato creato con il seguente contenuto
RewriteEngine on RewriteRule ^libro/([^/]+).html viewbook.php?id=$1 [L]
e posizionato nella directory http://libri.html.it/recensioni/
Il Rewrite può essere anche attivato utilizzando la sintassi di cui sopra all'interno del file httpd.conf (il file di configurazione generale di Apache). Questa seconda soluzione è preferibile alla prima perché, oltre a centralizzare tutte le riscritture, rende l'operazione più veloce.
Naturalmente, dopo l'attivazione della riscrittura, andranno modificati tutti i link all'interno del sito per farli puntare alle nuove location.
Un altro metodo per la riscrittura degli URL in PHP è proposto nell'articolo URL dinamici graditi ai motori. L'articolo fa uso della variabile d'ambiente PATH_INFO.
Risolvere il problema senza toccare la configurazione del Server
Per chi utilizza pagine dinamiche e non può intervenire direttamente nella configurazione del web server non resta che affidarsi ad un trucchetto. Come abbiamo detto Google, il motore che ci interessa di più per il posizionamento, indicizza le pagine dinamiche solamente se linkate da pagine statiche. Non ci resta dunque che preparare all'interno del nostro sito alcune pagine statiche con link verso le pagine dinamiche che ci interessa indicizzare. Queste pagine dovranno a loro volta essere linkate da più punti del vostro sito web (magari da tutte le pagine) in modo da essere sempre reperibili dal motore di ricerca.
Seguendo questi consigli, dopo 30/40 giorni dalla loro applicazione vedrete le vostre pagine dinamiche perfettamente indicizzate e gli accessi al vosto sito web accresciuti.