redirect multilingua

Capita molto spesso di trovarsi a realizzare pagine in più lingue ma la domanda ci poniamo subito dopo è cosa deve visualizzare il nostro utente appena atterra sul sito? la pagina scritta in inglese o italiano? o magari una intro dove si invita alla scelta?
La risposta pare ovvia: rendere l’esperienza di navigazione il più semplice possibile, quindi non sarebbe male inserire un automatismo che rileva il tipo di utenza in base al browser utilizzato, o magari captando la provienienza dell’indirizzo IP.

Ma avete pensato ai problemi che potrebbe comportare questa scelta per il motore di ricerca?

Navigando sul web mi sono ritrovato su svariati forum con dibatitti fra utenti: alcuni di questi hanno effettuato delle prove per vedere i comportamenti dei search engine ed il risultato non è certo da sottovalutare.

Vediamo anzitutto le possibilità che la programmazione ci offre.

  1. Redirect pagina web in base alla lingua in Javascript
    Il metodo più semplice è includere il codice qui sotto nella index.htm e lasciare al javascript il redirect automatico senza salvare cookie sul pc.

    <script language=”JavaScript” type=”text/javascript”><!–
    if (navigator.userLanguage) {theAgent = navigator.userLanguage;}
    else {theAgent = navigator.language;}
    if (theAgent.indexOf(‘en’) != -1) {location.href = “http://www.google.com”;}
    if (theAgent.indexOf(‘fr’) != -1) {location.href = “http://www.google.fr”;}
    if (theAgent.indexOf(‘es’) != -1) {location.href = “http://www.google.es”;}
    if (theAgent.indexOf(‘de’) != -1) {location.href = “http://www.google.de”;}
    if (theAgent.indexOf(‘it’) != -1) {location.href = “http://www.google.it”;}
    //–>
    </script>

    PRO: Semplicità di utilizzo
    CONTRO:Agisce sul computer dell’utente, può non funzionare su alcuni browser

  2. Redirect in base alla lingua in PHP
    Altro metodo, in linguaggio PHP, è far visualizzare la pagina desiderata in base alla richiesta del browser; poiché PHP è un linguaggio lato server, l’utente scriverà il sito con il proprio browser e lo script invierà la pagina in base alla lingua predefinita.<?php

    if (!isset($Language)) { // verifica se la variabile è vuota
    $Language = explode(‘,’,$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]); //recupera le lingue supportate dal browser
    $Language = strtolower(substr(chop($Language[0]),0,2)); //seleziona il codice relativo alla lingua di default
    }

    if ($Language == it){
    // se lingua di default è italiana non fa nulla, rimanendo all’indirizzo digitato
    }

    else {
    header(“Location: http://en.benweb.it”);
    // se invece la lingua di default è diversa dall’italiano rimanda automaticamente all’indirizzo della versione inglese
    }
    ?>


    PRO: Lavora sul server, compatibile con tutti i browser

    PRO: Non di facile comprensione, richiede hosting con supporto PHP

  3. Redirect della pagina in base all’indirizzo IP del visitatore
    Lo cito solo per correttezza ma vi sconsiglio di utilizzarlo poiché non possiamo sapere da dove arrivano le richieste degli spider dei motori di ricerca. Per maggiorni informazioni vi rimando al sito di Skipstorm che spiega molto dettagliatamente tutti i pro ed i contro di questa tecnica.
    Qui il sito delle GeoIP Apache API

Ora che abbiamo detto alcuni dei metodi più comuni per fare il redirect in base alla lingua del browser, vediamo di analizzare le problematiche per quanto riguarda l’indicizzazione.

Partiamo da un dato di fatto: Il redirect ai motori di ricerca non piace!
Dobbiamo considerare sempre che l’uso di questo metodo, anche se in buona fede, viene visto dagli spider come un possibile tentativo di doorway/cloacking, cioè una pagina dove sono contenute parti testuali atte al miglioramento dell’indicizzazione, seguite dallo script per fare il redirect sulla pagina “vera” per l’utente.

Altro fattore è la duplicazione dei contenuti all’interno dello stesso sito. Va considerato che il motore di ricerca ci fornisce risultati in base ai contenuti che trova nelle pagine web, quindi penalizzerà i siti che contengono lo stesso codice sotto lo stesso dominio.

Da qui si evince che una prima soluzione potrebbe essere quella di registrare più domini (it, com, es) rispettivamente per le lingue interessate; così il motore di ricerca indicizzerà i domini separatamente; non so se vi è mai capitato di trovare dei siti web francesci (fr) nelle vostre ricerche su Google….bhè, io no, perché infatti l’estensione viene presa molto in considerazione.

E per chi invece ha la sfortuna (come Benweb) di avere il dominio . com occupato? la soluzione migliore è creare una pagina introduttiva dove si invita l’utente a scegliere la lingua desiderata e magari salvare un piccolo cookie nel pc con la preferenza così da non porre più la domanda. Vi invito a dare un’occhiara su questo forum dove troverete un esauriente esempio di scelta lingua con settaggio del cookie.

Non dimenticatevi di inserire in ogni pagina la scelta della lingua con le famose bandierine (o icone, fate voi).

<?php

$default = 'eng/index.htm';

$redirect = array('fr' => 'fra/index.htm',

                        'it' => 'ita/index.htm',

                        'es' => 'esp/index.htm',

                        'pt' => 'por/index.htm', );

## / config ##

// get the language string proposed by the browser if there is one

function lang_from_browser() {

    // it;q=1.0,fr;q=0.9,en;q=0.8 OR fr-ch

    $lang_list = $_SERVER['HTTP_ACCEPT_LANGUAGE'];

    //echo $lang_list ;exit(); 

    $lang_block = explode(',', $lang_list);

    $lang_ar = array();

    foreach ($lang_block as $t) {

        array_push($lang_ar, strtolower(substr(trim($t), 0,2)));

    }

        return $lang_ar;

}

// redirect to the browser language if there is one

function redirect($lang){

    global $redirect;

    if(count($lang) > 0){

      foreach($lang as $l){

          if(array_key_exists($l,$redirect)){

              header('Location: '.$redirect[$l]);

              die();

          }

      }

    }

    return true;

}

## redirect ##

if(redirect(lang_from_browser())){

    header('Location: '.$default);

    die();

}

?>
Condividi la pagina!