• User Newbie

    Redirect in base alla lingua del browser client

    Dunque... in realtà non so se è giusto inserire qui questo post, ma ecco spiegato il mio dubbio.
    Diciamo che la parte di pura programmazione PHP è facilmente risolvibile con uno switch() la cui condizione può essere risolta con la variabile $_SERVER['ACCEPT_LANGUAGE'] mi rimane un dubbio.
    Cioè, come si comporta Google di fronte ad un redirect sulla index page nella root del sito?

    Directory del sito:
    ROOT
    |
    + IT
    |
    + EN
    |
    -- eccetera --


  • User

    Di solito Google non la prende bene.
    Tuttavia se hai messo i link (non nascosti) alle altre lingue (per esempio le bandierine) e hai configurato tutto il resto correttamente, farai contento sia il crawler di Google sia gli utenti che hanno installato il browser in un'altra lingua (che sono tanti, fidati, lo dico per esperienza) e che potranno quindi scegliere liberamente la lingua preferita.
    Ma aspettiamo cosa dice qualcuno più esperto.


  • Moderatore

    Ciao GAMERAMA,

    @GAMERAMA said:

    Dunque... in realtà non so se è giusto inserire qui questo post, ma ecco spiegato il mio dubbio.
    Diciamo che la parte di pura programmazione PHP è facilmente risolvibile con uno switch() la cui condizione può essere risolta con la variabile $_SERVER['ACCEPT_LANGUAGE'] mi rimane un dubbio.
    Cioè, come si comporta Google di fronte ad un redirect sulla index page nella root del sito?

    Directory del sito:
    ROOT
    |

    • IT
      |
    • EN
      |
      -- eccetera --

    Lo scenario è abbastanza comune e Google è in grado di gestirlo, l'importante è avere alcune attenzioni:

    Prima di tutto, Google - normalmente - non decora le proprie chiamate con Accept-Language. Pertanto è importante che il codice di backend ne preveda la mancanza (sarà banale, ma ho visto più e più volte indirizzi di root non indicizzati solo perché restituivano HTTP 500 a googlebot proprio perché il programmatore non aveva pensato a questo caso.
    Simularlo è facile, in particolare da FireFox, basta togliere temporaneamente le lingue preferite nelle opzioni avanzate.

    Ti consiglio nel caso user-agent che non esibisce Accept-Language di redirezionare verso la pagina/lingua che ritieni "primaria"; per esempio se il 90% dei tuoi utenti sono italiani, di fare il redirect verso la versione italiana; in tale modo Google mostrerà tale pagina nell'indirizzo di root / indicizzato.

    È poi importante che il redirect - anche qui, sarà banale, ma meglio sempre precisarlo - sia un redirect temporaneo. Quindi HTTP 302, 303, o 307.

    Personalmente non amo molto i redirect basati su Accept-Language. Come giustamente ha fatto notare 2018, sono tanti gli utenti il cui browser dichiara in Accept-Language una lingua che non corrisponde in effetti alla lingua dell'utente.
    Per alcune nazioni il fenomeno è particolarmente marcato - per esempio in Cina ci sono un sacco di installazioni Windows di licenza dubbia installate con default americani; in India molti dichiarano "en", e in percentuale ben pochi lo parlano, etc...
    Anche in Italia sono una buona percentuale, specie in reti aziendali.

    Altre accortezze ti consiglio:

    Permettere sia all'utente di cambiare la lingua dopo il primo redirect (se proprio lo vuoi fare), sia di ricordare la preferenza linguistica dell'utente, così che non subisca nuovamente il redirect ogni volta visita il tuo sito.

    Nel caso particolare in cui lasciassi la lingua "principale" nell'indirizzo di root, e le altre in sottocartelle (o sottodomini), abbi l'accortezza di non ripetere il redirect se la navigazione alla Home Page di root avviene tramite un link di navigazione interno (puoi facilmente capirlo paragonando l'attributo HTTP "Referer" (sic).

    Spero di esserti stato utile.


  • Moderatore

    Ciao Federico,
    ottimi spunti per la Gestione delle Lingue.

    Grazie


  • User Newbie

    @Federico Sasso said:

    Ciao GAMERAMA,
    Lo scenario è abbastanza comune e Google è in grado di gestirlo, l'importante è avere alcune attenzioni:

    Ottimo, ovviamente immagino che per Google non sia la prima volta che debba affrontare un sito organizzato in questo modo.

    Prima di tutto, Google - normalmente - non decora le proprie chiamate con Accept-Language. Pertanto è importante che il codice di backend ne preveda la mancanza (sarà banale, ma ho visto più e più volte indirizzi di root non indicizzati solo perché restituivano HTTP 500 a googlebot proprio perché il programmatore non aveva pensato a questo caso.
    Simularlo è facile, in particolare da FireFox, basta togliere temporaneamente le lingue preferite nelle opzioni avanzate.

    Vero, e ci avevo pensato, in effetti il codice che intercetta la chiamata al server da parte del browser ha come opzione di default l'italiano.
    In questo modo, realizzando il trucco da te proposto il sistema funziona correttamente, ovvero riporta l'italiano entrando dalla root e non da una delle directory di lingua.

    Ti consiglio nel caso user-agent che non esibisce Accept-Language di redirezionare verso la pagina/lingua che ritieni "primaria"; per esempio se il 90% dei tuoi utenti sono italiani, di fare il redirect verso la versione italiana; in tale modo Google mostrerà tale pagina nell'indirizzo di root / indicizzato.

    Come spiegato sopra, è già così e pare funzionare bene.

    È poi importante che il redirect - anche qui, sarà banale, ma meglio sempre precisarlo - sia un redirect temporaneo. Quindi HTTP 302, 303, o 307.

    Ecco, in un certo senso è proprio questo che mi ha spinto a scrivere questo post; immaginavo uno scenario del genere ma non sapevo cosa scrivere, ovvero che tipo di richiesta dovevo inviare per evitare che Google capisse "fischi per fiaschi".
    A questo punto? 302 Trovato (ovvero mosso temporaneamente), 303 Vedere altro o 307 Ridirezione temporanea?

    Personalmente non amo molto i redirect basati su Accept-Language. Come giustamente ha fatto notare 2018, sono tanti gli utenti il cui browser dichiara in Accept-Language una lingua che non corrisponde in effetti alla lingua dell'utente.
    Per alcune nazioni il fenomeno è particolarmente marcato - per esempio in Cina ci sono un sacco di installazioni Windows di licenza dubbia installate con default americani; in India molti dichiarano "en", e in percentuale ben pochi lo parlano, etc...
    Anche in Italia sono una buona percentuale, specie in reti aziendali.

    Perfettamente d'accordo, e infatti è previsto nella barra del menù, il link alla lingua dell'utente, per ora comunque solo italiano e inglese. Ah! Non ci sono bandierine 😄 ma solo testo.
    In proposito mi chiedo se nel link è consigliabile inserire anche un hreflang, dato il cambio di lingua.

    Altre accortezze ti consiglio:

    Permettere sia all'utente di cambiare la lingua dopo il primo redirect (se proprio lo vuoi fare), sia di ricordare la preferenza linguistica dell'utente, così che non subisca nuovamente il redirect ogni volta visita il tuo sito.

    Sì, fatto, come descritto sopra, sul cookie non sono del tutto d'accordo, vedremo, anche se è una cortesia indubbia non vorrei che venga considerata una invadenza della privacy.

    Nel caso particolare in cui lasciassi la lingua "principale" nell'indirizzo di root, e le altre in sottocartelle (o sottodomini), abbi l'accortezza di non ripetere il redirect se la navigazione alla Home Page di root avviene tramite un link di navigazione interno (puoi facilmente capirlo paragonando l'attributo HTTP "Referer" (sic).

    No, non avviene. Nella barra del menù il link alla homepage, punta sempre a quella presente nella cartella della lingua scelta o proposta.
    Comunque, a questo punto mi viene anche da pensare che tra il link rel alternate messa nell'header delle pagine, quello x-default è comunque meglio che punti alla homepage della cartella o che non ci debba essere.

    Spero di esserti stato utile.Assolutamente sì.


  • Moderatore

    @GAMERAMA said:

    A questo punto? 302 Trovato (ovvero mosso temporaneamente), 303 Vedere altro o 307 Ridirezione temporanea?
    In realtà cambia ben poco.
    Tecnicamente nel tuo caso 303 sarebbe più corretto, perché presuppone l'effettuare la nuova chiamata con un metodo GET.
    302 sarebbe sorpassato da 303 e 307, ma di fatto è trattato come un 303, quindi va bene lo stesso.
    307 implica di non cambiare metodo HTTP, ossia se per esempio si usa il POST, lo si deve usare anche verso il nuovo URL.
    Morale: fa un po' te 🙂

    @GAMERAMA said:

    Perfettamente d'accordo, e infatti è previsto nella barra del menù, il link alla lingua dell'utente, per ora comunque solo italiano e inglese. Ah! Non ci sono bandierine 😄 ma solo testo.
    In proposito mi chiedo se nel link è consigliabile inserire anche un hreflang, dato il cambio di lingua.

    [...]

    Comunque, a questo punto mi viene anche da pensare che tra il link rel alternate messa nell'header delle pagine, quello x-default è comunque meglio che punti alla homepage della cartella o che non ci debba essere.

    alternate/hreflang è opzionale; se ne consiglia l'uso se e quando gli url alternativi sono effettivamente riferiti allo stesso contenuto logico disponibile in lingue diverse.
    Nel tuo caso è probabilmente vero per le varie home page in lingua; non mi è chiare se lo sia anche per il resto dei contenuti.

    Non sono sicuro di aver capito se nel tuo caso specifico l'indirizzo di root risponde a una lingua, o se fa sempre e comunque un redirect.
    x-default si può usare in due situazioni possibili:

    • nel caso di pagine di "scelta" di lingua, o di URL che fa un redirect in base all'accept-language (in questo secondo caso essendoci un redirect, alternate/hreflang non si può ovviamente mettere in un meta tag, ma lo si può mettere in una sitemap XML oppure nell'header HTTP "Link:")
    • in qualsiasi pagina ove sono presenti altre direttive alternate/hreflang specifiche di lingua, in questo caso per specificare un "fallback" suggerito per gli accept-language diversi da quelli gestiti.
      Per esempio se vi sono versioni "en" e "it", a un browser con accept-language "es" (o qualsiasi altra lingua non italiana, inglese o varianti delle stesse) che pagine desideriamo che Google mostri in SERP?
      Se non glielo diciamo, Google farà da sé, altrimenti possiamo esplicitarlo (per quanto sia sempre un suggerimento, non un ordine imperativo) per avere maggiore controllo sulla situazione.

    Ciao


  • User Newbie

    Punto uno, ok avevo già inserito 303.
    Punto due:

    • L'homepage di root non ha testo visibile, cioè lì avviene il redirect in una delle di lingua, non c'è altro e in effetti mi stavo chiedendo se non fosse invece il caso di inserire del testo (pagina html).
    • hreflang nei link, ovviamente il contenuto è lo stesso, non necessariamente identico, ma è la stessa pagina del sito in un'altra lingua.
    • x-default: lasciamo stare la root del sito, quella per intenderci identificata nello schemino del primo post, lì c'è una index.php dove c'è solo PHP, come detto poco sopra e che fa il redirect. Quando associo le parole x-default e ROOT intendo sempre la root della directory di lingua, dove di fatto ci sono tutte le pagine del sito.