+ Rispondi alla Discussione
Risultati da 1 a 10 di 10

Posizionamento sito multilingua e sitemap

Ultimo Messaggio di zseven il:
  1. #1
    User
    Data Registrazione
    Dec 2006
    Messaggi
    232

    Posizionamento sito multilingua e sitemap

    Ciao ragazzi,
    un sito, o meglio, un insieme di siti sviluppati con una nostra piattaforma, stanno incontrando
    difficoltà a posizionarsi, anzi ad essere proprio indicizzati per l'inglese.
    In particolare vi riporto questo sito
    vacanze.net

    Questo sito è posizionato in italiano, ma l'inglese non viene proprio indicizzato da google.

    Sapete dirmi da cosa può dipendere?

    Ho letto un pò in giro che poteva essere conveniente inviare più sitemap per ogni lingua.
    E' corretto procedere così secondo voi?

    Grazie mille!
    Guido

  2. #2
    Moderatore L'avatar di Federico Sasso
    Data Registrazione
    Dec 2012
    Località
    Genova
    Messaggi
    1,826
    Segui Federico Sasso su Twitter Aggiungi Federico Sasso su Google+ Aggiungi Federico Sasso su Linkedin
    Ciao zseven,

    Citazione Originariamente Scritto da zseven Visualizza Messaggio
    un sito, o meglio, un insieme di siti sviluppati con una nostra piattaforma, stanno incontrando
    difficoltà a posizionarsi, anzi ad essere proprio indicizzati per l'inglese.
    In particolare vi riporto questo sito
    vacanze.net

    Questo sito è posizionato in italiano, ma l'inglese non viene proprio indicizzato da google.
    Prima di tutto, invocando l'indirizzo vacanze.net/ il sito effettua un redirect 302 verso vacanze.net/it-IT (e poi un 301 verso /it-IT/); non ho modo di sapere se discriminate in base all'IP dell'utente, di sicuro il primo redirect non è influenzato dalla lingua impostata sul browser (header HTTP "accept-language"): con qualunque valore, o senza alcun valore di accept-language sono stato invariabilmente buttato sulla versione Italiana.
    Googlebot non esibisce l'header accept-language e a meno che non lo gestiate diversamente in base a user-agent (non ho controllato) o IP (non posso controllare), vedrebbe anch'esso la versione Italiana.

    Visitando il sito con uno spider le prime migliaia di pagine questi non ha trovato alcun link verso la versione Inglese. Stessa cosa capiterebbe a googlebot.
    La scelta di selezione della lingua è effettuabile dall'utente non con un normale link all'URL Inglese, ma con uno script di postback di ASP.NET, non seguibile dallo spider di Google.

    Anche esplorando con lo spider esplicitamente /vacanze.net/en-US/, lo spider della versione in Inglese non può vedere che la pagina principale, e tutti i link interni puntano alla versione Italiana degli URL.
    Perché? Ho indagato la stranezza e ho l'impressione gli URL interni siano generati nella versione Iglese solo in presenza di un cookie di nome "Lingua" valorizzato a "languagePref=en-US", altrimenti sono generati nella versione Italiana.
    Googlebot - e quasi tutti gli altri spider - non usa cookies e vede solo gli URL in Italiano.

    Puoi confermare tutte questi punti usano lo strumento "Visualizza come Google" dal tuo account di Google Webmaster Tools.
    Temo dovrete apportare qualche correzione alla vostra piattaforma.

    Spero d'esserti stato utile
    MODPosizionamento nei motori di ricercaFederico Sasso, autore di Visual SEO Studio - Il tool SEO Italiano, disponibile anche in Inglese, Francese, Polacco, Russo, Spagnolo e Tedesco.

  3. #3
    User
    Data Registrazione
    Dec 2006
    Messaggi
    232
    Ciao e grazie mille per la precisissima risposta!

    Come hai detto giustamente tu il reindirizzamento lo faceva, erroneamente, basandosi sul cookie creato in base alla cultura impostata e la session Lingua valorizzata (solo dopo il postback).

    Adesso abbiamo impostato che al caricamento iniziale il valore della Session dipende dalla Culture direttamente.
    Quindi così dovrebbe essere corretto.

    Abbiamo infatti provato a mettere a mano il valore per la culture come "en-US" e siamo stati portati correttamente nella sezione inglese.

    Puoi verificare anche tu se trovi errori adesso?

    Grazie mille!
    Guido

  4. #4
    User
    Data Registrazione
    Dec 2006
    Messaggi
    232
    Cavolo però se provo a generare la sitemap partendo da vacanze.net/en-US/ ed escludendo il pattern *it-IT* non mi trova nulla uffa...

  5. #5
    Moderatore L'avatar di Federico Sasso
    Data Registrazione
    Dec 2012
    Località
    Genova
    Messaggi
    1,826
    Segui Federico Sasso su Twitter Aggiungi Federico Sasso su Google+ Aggiungi Federico Sasso su Linkedin
    Citazione Originariamente Scritto da zseven Visualizza Messaggio
    Adesso abbiamo impostato che al caricamento iniziale il valore della Session dipende dalla Culture direttamente.
    Quindi così dovrebbe essere corretto.
    googlebot non usa cookies, quindi non puoi fare affidamento su variabili di Session (non avresti a disposizione il cookie di sessione per ricostruire la Session associata al visitatore e ogni nuova richiesta dello spider risulterebbe una nuova sessione).

    Se accetti il mio modesto consiglio, la lingua corrente non dovresti salvarla in una variabile di Session, ma ricostruirla ogni volta dal formato dell'URL: se inizia con /it-IT/, sia "it-IT"; se inizia con "en-US" sia "en-US".
    In ASP.NET si tratta di parsare il valore della proprietà Request.RawUrl

    Citazione Originariamente Scritto da zseven Visualizza Messaggio
    Puoi verificare anche tu se trovi errori adesso?
    L'ho esaminato velocemente con Visual SEO Studio (con e senza supporto ai cookies). Ci sono ancora problemi, alcuni nuovi.
    Adesso gli URL nella versione inglese comportano dei 404, perché hanno il prefisso /en-US/ ma il path è costruito con la versione Italiana.

    Dopo aver messo a posto le logiche di lingua corrente e generazione, ti consiglio di modificare anche lo switch di lingua perché usi dei link "veri", non i javascript di callback. Così forniresti allo spider del motore di ricerca un percorso per trovare anche i contenuti nell'altra lingua.

    Altro consiglio: cerca di testare il comportamento agli spider localmente prima di mandare in produzione, testando iterativamente le modifiche con lo strumento di SEO auditing di tua scelta.

    Spero d'esserti stato utile
    MODPosizionamento nei motori di ricercaFederico Sasso, autore di Visual SEO Studio - Il tool SEO Italiano, disponibile anche in Inglese, Francese, Polacco, Russo, Spagnolo e Tedesco.

  6. #6
    User
    Data Registrazione
    Dec 2006
    Messaggi
    232
    se ho capito bene tu hai anche ottime conosce di .net, quindi magari puoi aiutarmi nel sistemare questa situazione.

    Mi riallaccio al punto in cui mi parli dei link veri per lo switch della lingua.
    Ora sono dei LinkButton, in quanto al click è collegata la seguente Sub

    *************************
    Sub CambiaCultura(ByVal sender As Object, ByVal e As EventArgs)

    Dim Pulsante As LinkButton
    Pulsante = CType(sender, LinkButton)

    Session("Lingua") = Pulsante.CommandArgument
    Dim aCookie As New HttpCookie("Lingua")
    aCookie.Values("languagePref") = Session("Lingua")
    aCookie.Expires = System.DateTime.Now.AddDays(21)
    Response.Cookies.Add(aCookie)

    Response.Redirect("/" & Pulsante.CommandName)

    End Sub
    *************************

    Se ho ben capito mi suggerisci di renderli dei semplici "a href" e poi una volta nella directory "/en-US/" impostare qui il codice di assegnazione per la cultura?

    Io adesso uso i cookie e le session solo per mantenere lo stato impostato o riconosciuto dalla Culture di .NET.

    Nel Global.asax infatti ho questo codice iniziale per la determinazione ed il mantenimento della Culture

    *************************
    Sub Session_Start(ByVal Sender As Object, ByVal E As EventArgs)
    If Not Request.Cookies("Lingua") Is Nothing Then
    Session("Lingua") = Server.HtmlEncode(Request.Cookies("Lingua")("langu agePref"))
    'Response.Write(Request.Cookies("Lingua")("languag ePref"))

    Else

    Session("Lingua") = Thread.CurrentThread.CurrentCulture.ToString
    Dim aCookie As New HttpCookie("Lingua")
    aCookie.Values("languagePref") = Session("Lingua")
    aCookie.Expires = System.DateTime.Now.AddDays(21)
    Response.Cookies.Add(aCookie)

    End If
    End Sub
    ************************

    Ritieni che sia sbagliato?

    Ti ringrazio moltissimo per l'aiuto, spero di riuscire a risolvere con i tuoi aiuti!

  7. #7
    Moderatore L'avatar di Federico Sasso
    Data Registrazione
    Dec 2012
    Località
    Genova
    Messaggi
    1,826
    Segui Federico Sasso su Twitter Aggiungi Federico Sasso su Google+ Aggiungi Federico Sasso su Linkedin
    Citazione Originariamente Scritto da zseven Visualizza Messaggio
    Se ho ben capito mi suggerisci di renderli dei semplici "a href" e poi una volta nella directory "/en-US/" impostare qui il codice di assegnazione per la cultura?
    Esatto.
    Puoi usare il controllo Hyperlink, ma probabilmente troverai più conveniente produrre te gli "A href", perché il controllo ASP.NET non ha conoscenza di come hai implementato l'URL rewriting.

    La tua soluzione attuale ha lacune non solo per gli spider, ma anche per utenti bipedi:
    Poni i casi in cui l'utente richieda un URL della versione Inglese arrivando da un link da motore di ricerca, o da bookmark, da link in e-mail. Non avrebbe né cookie di lingua né cookie di sessione, scatterebbe una nuova session e se il default è sull'Italiano non sarebbe servito correttamente. La sessione server potrebbe scadere tra una richiesta e l'altra...

    Un po' di codice nella Application.BeginRequest per gestire la culture corretta in base a Request.RawUrl ti permetterebbe di avere una soluzione più robusta.

    Inoltre miglioreresti l'esperienza utente allo switch di lingua:
    oggi hai un primo postback per processare il codice hai mostrato, e poi una seconda richiesta HTTP per via del redirect.

    Ciao
    MODPosizionamento nei motori di ricercaFederico Sasso, autore di Visual SEO Studio - Il tool SEO Italiano, disponibile anche in Inglese, Francese, Polacco, Russo, Spagnolo e Tedesco.

  8. #8
    User
    Data Registrazione
    Dec 2006
    Messaggi
    232
    Allora dovrei esserci riuscito, utilizzando i tuoi preziosissimi suggerimenti ma senza abbandonare la session in quanto mi costringeva a modificare tutte le piattaforma.

    Penso che questo ragionamento che ho impostato possa funzionare, te lo riporto di seguito così se mi dai un parere mi fa piacere.

    Dim LinguaDaURL As String

    Sub Application_BeginRequest(sender As Object, e As EventArgs)

    LinguaDaURL = Request.RawUrl.Substring(1, 5)

    End Sub

    Sub Application_AcquireRequestState(sender As Object, e As EventArgs)

    If HttpContext.Current.Session("Lingua") Is Nothing Then
    HttpContext.Current.Session("Lingua") = Thread.CurrentThread.CurrentCulture.ToString
    End If

    If HttpContext.Current.Session("Lingua") <> LinguaDaURL Then
    HttpContext.Current.Session("Lingua") = LinguaDaURL
    End If

    End Sub


    Come puoi vedere prima mi vado a verificare come mi hai suggerito l'URL.
    Poi vado a gestire il caso successivamente assegnando la cultura del visitatore alla sezione, nel caso sia vuota, e verificando se corrisponde alla lingua dell'url.

    Così facendo restituisco sempre le url corrette in qualsiasi parte del sito si arrivi, e sono anche riuscito a recuperare l'intero sito per la sitemap, inglese compreso!

    Grazie mille!

  9. #9
    Moderatore L'avatar di Federico Sasso
    Data Registrazione
    Dec 2012
    Località
    Genova
    Messaggi
    1,826
    Segui Federico Sasso su Twitter Aggiungi Federico Sasso su Google+ Aggiungi Federico Sasso su Linkedin
    Stiamo andando un po' OT ;-)

    OK, capisco tu abbia voluto tenere la lingua in Session per minimizzare le modifiche, e ti limiti a impostarla a ogni inizio richiesta.
    A colpo d'occhio direi:
    • occhio che a seconda di come hai impostato IIS e la sua versione, gli eventi BeginRequest e AcquireRequestState potrebbero scattare anche per risorse non .aspx (css, script, immagini, etc..)
    • robustezza: l'utente potrebbe chiedere un URL con RawUrl.Length minore di 6 (root, immagini, url scritto male, etc..) e il Substring causerebbe un'eccezione
    • robustezza: i caratteri da 1 a 5 potrebbero non rappresentare una Culture valida (immagini, url scritto male, etc..)


    Ciao
    MODPosizionamento nei motori di ricercaFederico Sasso, autore di Visual SEO Studio - Il tool SEO Italiano, disponibile anche in Inglese, Francese, Polacco, Russo, Spagnolo e Tedesco.

  10. #10
    User
    Data Registrazione
    Dec 2006
    Messaggi
    232
    hai ragione, ormai ti ho scritto proprio codice .net

    Per quanto riguarda i possibile errori su immagini o altro ho verificato e sembra andare bene
    vacanze.net/images/logo.png
    Ci sono alcuni casi in cui generava errore, non li ho inclusi nel codice che ti ho scritto per non appensatire il post con altro codice inutile

    Grazie mille, il tuo aiuto è stato preziozo, inoltre ho scaricato il tuo programma visual seo studio che approfondirò sicuramente!!

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.