• Moderatore

    Htaccess Rewrite url: quando inserire Redirect 301 e Rel Canonical

    Ho la seguente situazione per un dominio che indicherò con dominio.com:

    • i file del sito si trovano nella sottocartella dominio.com/dir ma non voglio mostrare nell'url dir
    • voglio riscrivere gli url in modo che le pagine non abbiano estensione .html o .php
    • voglio definire come dominio principale http : // dominio.com (senza il www)
    • voglio usare url relativi
    • dubbi su slash finale
    • come trattare la index
    1. Per risolvere il primo problema ho inserito nel htaccess:
    
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/dir/
    RewriteRule ^(.*)$  /dir/$1
    
    

    In questo modo navigo il sito dominio.com e quindi visualizzo dominio.com/pagina, ma se inserisco l'url esatto (e quindi se lo linkano) visualizzo anche dominio.com/dir/pagina.

    D. 1.1: devo inserire anche l'istruzione di redirect 301 da dominio.com/dir/pagina a *dominio.com/pagina *?
    D. 1.2: è corretto impostare il rel=canonical con href per dominio.com/pagina (e quindi non href dominio.com/dir/pagina) ?

    1. Per risolvere il secondo problema ho inserito nel htaccess:
    
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.html -f
    RewriteRule ^(.*)$ $1.html 
    
    

    In questo modo visualizzo sì dominio.com/pagina ma anche dominio.com/pagina.html .
    D. 2.1: devo inserire anche un'istruzione di redirect 301 da dominio.com/pagina.html a dominio.com/pagina ?
    D. 2.2: è corretto impostare il rel=canonical con href per dominio.com/pagina (e quindi non href dominio.com/pagina.html) ?

    1. Per risolvere il terzo problema ho inserito nel htaccess:
    
    RewriteCond %{HTTP_HOST} !^dominio.com$ 
    RewriteRule ^(.*)$ http://dominio.com/$1 [L,R=301]
    
    

    In questo modo visualizzo gli url del dominio con e senza www.
    D. 3.1: ho fatto bene a inserire il redirect 301 dagli url con www a quelli senza?
    D. 3.2: avendo io preferito l'url senza www ho fatto bene a impostare tutti i rel=canonical agli url senza www ?

    1. Visti anche i punti sopra, la mia scelta comporta che la voce di menu "Contatti" sia linkata semplicemente come href = "contatti" e porti alla pagina dominio.com/contatti.
      Per fare questo ho inserito nell'head della pagina:
    
    <base href="http://dominio.com/">
    
    

    D. 4.1: volendo usare url relativi la scelta è tecnicamente corretta o comporta problemi?

    Altre questioni inerenti htaccess, redirect 301 e rel=canonical:
    D. 5: devo affrontare via *htaccess *la questione dello slash finale e se sì come mi comporto con il rel=canonical ?
    D. 6.1: per la index del sito come mi comporto, metto redirect 301 da dominio.com/index a dominio.com?
    D. 6.2: il rel=canonical deve avere l'href a dominio.com/index oppure a dominio.com ?
    D. 6.3: sulle altre pagine, usando i link relativi, come devo linkare la index, cioè con quale valore di *href *?

    Ho inserito nello stesso topic il *rel=canonical *perché le questioni sono attinenti ed ho pensato che così avremmo disegnato un quadro complessivo.
    Grazie a chi parteciperà. 🙂

    Francesco


  • Admin

    Ciao FDA,

    quello che hai fatto è tutto corretto, ma andiamo nell'ordine.

    Il canonical va sempre usato per puntare l'URL che decidi essere quella reale quindi puoi già risponderti a tutte le domande.

    Sarebbe auspicabile da parte tua che le pagine riscritte che sono in /dir/ facciamo redirect su quella finale.

    Stesso discorso vale per /index e stesso discorso vale per lo / finale.

    In sostanza decide quale deve essere la struttura canonica e sulla base della tua scelta costruisci le URL e fai si che ne esista UNA ed UNA sola.

    Ipotizziamo che la tua url debba essere /ciao-come-stai

    la situazione ideale dovrà essere

    1. /dir/ciao-come-stai --> Redirect 301 verso /ciao-come-stai
    2. /dir/ciao-come-stai/ --> Redirect 301 verso /ciao-come-stai
    3. /dir/ciao-come-stai/index --> Redirect 301 verso /ciao-come-stai
    4. /ciao-come-stai/index --> Redirect 301 verso /ciao-come-stai
    5. /ciao-come-stai/ --> Redirect 301 verso /ciao-come-stai

    Canonical sarà sempre ht tp://tuodominio/ciao-come-stai

    Ovviamente se hai già tutti i redirect verso la canonica in linea di massima non avrai nemmeno il problema dei canonical perché esisterà sempre e solo una versione della risorsa.

    Poi aggiungere il canonical autoreferenziale potrà però esserti utile per una serie di altri motivi quindi lo aggiungerei comunque soprattutto perché stai usando URL relativi.

    Usare il base è corretto, ma per il motore di ricerca non conta praticamente nulla.

    Su www e non-www va bene quello che hai fatto basta che poi userai sempre la versione non-www.

    Come linkaggio interno devi sempre linkare l'URL canonica.


  • Moderatore

    Ciao Juanin,
    grazie per la risposta puntuale ed esaustiva, in una sintesi hai fugato tutti i dubbi. 🙂

    Francesco