Trasformare le URL rendendole SEO friendly per i Motori di Ricerca.

Iniziamo questa nuova settimana parlando di un’argomento che la gran parte degli sviluppatori web conoscono bene il mod_rewrite di Apache un modulo in grado di creare URL chiare e gradite ai motori di ricerca, invece degli url criptici che generalmente vengono creati dinamicamente.

L’intento di questo articolo oltre a chiarire alcuni aspetti un pò complessi, vuole aiutare chi si avvicina per la prima volta a queste problematiche a capirne i fondamenti con vari esempi chiarificatori che possono supportarvi in tal senso.

Cercheremo di analizzarne il funzionamento base, anche se è uno strumento davvero complesso e potente che permette praticamente di fare qualsiasi cosa con le URL dallo sniffing della lingua allo smistamento di traffico e cosi via.

Noi vedremo, per adesso, come è possibile trasformare i poco chiari URL dinamici in semplici URL statici per essere più appetibili dai motori di ricerca ed avere dei link più chiari e brevi.

La prima cosa da fare, logicamente è attivare questo modulo, il mod_rewrite in genere è attivo su ogni server Apache, ma potrebbe per vari motivi essere stato disabilitato in fase di installazione e quindi non funzionare correttamente.

Quindi, in tal caso, per ovviare a tale problema portatevi nella directory di installazione di Apache, qui è presente una directory di configurazione del server denominata conf al suo interno aprite il file httpd.conf che il file in cui vengono richiamati i moduli del web server e verificate che sia presente la chiamata al mod_rewrite e che non sia commentata con il simbolo #, nel caso eliminatelo e salvate il file, ricordate di arrestare apache e riavviarlo per rendere effettiva tale direttiva, a dimenticavo verificate anche che effettivamente sia presente il modulo che dovrebbe essere situato sempre nella root del web server nella directory modules.

Verificato che il modulo rewrite di apache è correttamente configurato, la prima cosa da fare è creare il vostro htaccess nella root del vostro sito e inserire la direttiva che lo attiva che è a seguente:

RewriteEngine On

Il funzionamento di questo modulo è semplice per lo scopo che ci siamo prefissi, in quanto basterà scrivere una serie di direttive RewriteRule consecutive con la seguente sintassi:

RewriteRule URL_CON_ESPRESSIONE_REGOLARE Nuovofile [FLAG,FLAG]

Il modulo leggerà tali direttive consequenzialmente e nè testa le espressioni eseguendone le trasformazioni indicate, i FLAG servono per modificare i comportamenti ma vedremo dopo in che modo.

Le Espressioni Regolari valide per il mod_rewrite sono quelle standard valide per molti altri linguaggi di programmazione.

Innanzitutto, per inizializzare il file indichiamo la root del sito, quindi inserite dopo l’istruzione di inizializzazione del modulo rewrite, la seguente direttiva:

RewriteBase /

che sta ad indicare al modulo rewrite di trasformare le URL dal nome dominio in avanti.

Poi si indicano in sequenza una serie di regole tramite la direttiva RewriteRule, servendosi della sintassi Regular Expression, per chi non conoscesse in maniera approfondità, queste potenti espressioni di manipolazione delle Stringhe, vi indico alcune delle principali regole sintattiche, iniziamo con i caratteri jolly che vi serviranno per modificare le vostre URL:

  • ^ indica l’inizio dell’URL
  • $ indica la fine dell’URL
  • . indica un qualsiasi carattere
  • | indica una scelta tra il carattere (o gruppo di caratteri) presente a sinistra e quello a destra (esempio it|en indica il carattere “it” o il carattere “en”)

Vi faccio un esempio pratico in modo che possiate meglio comprendere quanto precedentemente descritto:

RewiteRule    ^(inizio URL)http://vostrosito/(it|en)/(qualsiasi nome pagina).html$(fine URL)

È possibile indicare insiemi di caratteri cercati inserendoli all’interno di parentesi quadre:

  • [abc] indica la presenza di un carattere a scelta tra “a”, “b” e “c”
  • [^abc] indica la presenza di un qualsiasi carattere tranne “a”, “b” o “c” (tra parentesi quadre il carattere di accento circonflesso “^” non assume più il significato di inizio dell’URL ma di negazione dell’intera classe)
  • [a-d] indica la presenza di un carattere da “a” fino a “d”, quindi “a” o “b” o “c” o “d”. Questa notazione ci tornerà comoda per indicare un qualsiasi numero.

Ovviamente è possibile combinare gli insiemi con gli indicatori di quantità come ad esempio [0-9]+ per indicare uno o più cifre.

Detto ciò, cerchiamo di focalizzare l’attenzione, sul punto fondamentale di questo modulo che sta nel travasare parte di una Stringa nel nostro caso l’URL fittizio all’URL reale che viene eseguito dal web server.

Il risultato finale si ottiene indicando nell’indirizzo fittizio tra parentesi tonde ( ) l’espressione regolare che poi sarà recuperata nella composizione dell’indirizzo reale.

Vediamo un semplice esempio di quanto descritto:

URL da trasformare: http://giovannimasucci.it/en/index.html

URL reale:  http://giovannimasucci.it/index.php?lang=en

RewriteRule ^(it|en|fr|de|ru)/index.html$ index.php?lang=$1 [L]

Quindi viene indicata la URL reale e al suo interno dinamicamente il valore la parte intercettata dell’espressione regolare con il simbolo didollaro “$” seguito da una cifra numerica che indica la sua posizione.

Infine come precedentemente accennato con l’ultimo parametro il FLAG possiamo modificare il funzionamento del mod_rewrite. Vanno indicate tra parentesi quadre e separati da virgole, come possiamo osservare nell’esempio precedente. Ecco le principali:

[L]:  Si usa nel caso in cui l’URL trasformato non deve subire ulteriori trasformazioni per evitare che Apache consumi risorse di sistema inutilmente.

[QSA]: Si usa per aggiunge all’URL reale la query string presente al livello della finta URL. Molto utile per portarsi dietro contenuti appesi in query string o anche variabili di cui non avevamo tenuto conto.

[NC]: valuta l’espressione regolare senza tenere conto di maiuscole o minuscole.

[C]: lega la corrente direttiva alla successiva facendole terminare correttamente entrambe o non applicandone nessuna.

URL da trasformare: http://www.giovannimasucci.it/it/blog/social_marketing/e-commerce/magento.html

approfondimento.php?lang=$1&idcontenuto=$2 [L]

URL reale:http://www.giovannimasucci.it/blog/index.php?lang=it&cont=social_marketing/e-commerce/magento.html

RewriteRule ^(it|en|fr|de|ru)/([^/]+)\.html$ /blog/index.php?lang=$1&cont=$2 [L, QSA, NC]

Un’altro esempio per recuperare un file ordinato numericamente:

URL da trasformare: http://dominio/docs/52-Nome-del-documento.pdf
URL reale: /docs/52.pdf

RewriteRule ^/docs/([0-9]+)(\.[a-z]{3,4}) /docs/$1$2 [L,QSA,NC]

Oppure se si vuole mascherare per ragione di sicurezza il linguaggio di programmazione utilizzato:

URL da trasformare: http://dominio/script.py?id=12
URL reale: /script.php?id=12

RewriteRule ^/(.+)\.py(.+)? /$1.php$2 [L,QSA,NC]

Questa regola ci permette di mascherare l’uso di PHP facendolo sembrare un altro linguaggio di programmazione lato server, Python in questo esempio.

Spero che in seguito a questo articolo, siete riusciti ad avere maggiore confidenza sia con le funzionalità base di questo importante modulo di Apache che con la fondamentale potenza delle regular expression, presente in vari linguaggi di programmazione.

Nel caso vorreste approfondire ulteriormente l’argomento contattatemi pure al mio indirizzo di posta info@giovannimasucci.it, sarò lieto di aiutarvi.

Intanto vi saluto e vi dò appuntamento al prossimo articolo.

Un saluto

Giovanni Masucci

Be Sociable, Share!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *