Da qualche giorno i principali motori di ricerca hanno siglato un accordo introducendo il canonical link tag nel tentativo di trovare una possibile soluzione al fenomeno delle pagine con multiple URL.
Una delle situazioni più comuni che rientrano in questo caso è rappresentata dalle pagine oggetto di campagne online. Il canonical link è un compromesso molto recente e supportato solo da un ristretto numero di motori di ricerca. Nell'incertezza, qualcuno preferisce ancora ricorrere al buon vecchio metodo dell'URL rewrite e del redirect.
Questa mattina mi ha citofonato Francesco, intento a risolvere proprio questa situazione. Tutto nasce dal problema che non è possibile utilizzare mod_alias
per impostare un redirect basato su un parametro in querystring. Per approfondimenti vi rimando all'articolo Apache .htaccess query string redirects.
Per la gioia di chi non ama gli indovinelli, ecco la soluzione al problema.
Il codice seguente è una regola di riscrittura di Apache. Può essere inserita direttamente nel file di configurazione del virtual host o all'interno dell'.htaccess
. Nel caso la querystring contenga un parametro di Google Analytics per il tracciamento di una campagna, esegue il reindirizzamento alla pagina a se stessa rimuovendo la querystring.
RewriteEngine On RewriteCond %{QUERY_STRING} utm_source=(.*?) [OR] RewriteCond %{QUERY_STRING} utm_medium=(.*?) [OR] RewriteCond %{QUERY_STRING} utm_content=(.*?) [OR] RewriteCond %{QUERY_STRING} utm_campaign=(.*?) RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1? [R=301,L]
Se desiderate eseguire la riscrittura forzata per una pagina specifica o un gruppo di pagine, è sufficiente aggiungere una condizione sulla pagina richiesta. L'esempio seguente applica il redirect solo nel caso in cui i parametri si trovino sulla query string della homepage.
RewriteEngine On RewriteCond %{REQUEST_URI} ^/$ RewriteCond %{QUERY_STRING} utm_source=(.*?) [OR] RewriteCond %{QUERY_STRING} utm_medium=(.*?) [OR] RewriteCond %{QUERY_STRING} utm_content=(.*?) [OR] RewriteCond %{QUERY_STRING} utm_campaign=(.*?) RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1? [R=301,L]
Altre soluzioni o suggerimenti sono ben accetti. Segretamente, Francesco mi ha confessato che alla soluzione migliore regalerà un viaggio premio in Brasile per assistere al Carnevale di Rio.