Drupal 7 ha introdotto il canonical di default insieme allo shortlink e questa mi sembra una buona cosa.
Ciò che mi lascia perplesso è come il canonical viene gestito:
- manca il canonical nella home
- non è scritto in modo standard
Per quanto riguarda il secondo punto, se guardiamo le linee guida di Google http://www.google.com/support/webmasters/bin/answer.py?answer=139394 o l'accordo preso nel 2009 da Google, Yahoo e Microsoft http://blog.html.it/16/02/2009/google-yahoo-e-microsoft-si-accordano-sul... si può notare che il canonical va scritto in questo modo:
<link rel="canonical" href="http://sito.com/titolo-pagina" />
oppure
<link rel="canonical" href="http://www.sito.com/titolo-pagina" />
Allora mi domando, perché è stato scelto di scriverlo cosi?:
<link rel="canonical" href="/titolo-pagina" />
Questo sistema, oltre a non essere standard, non elimina il rischio di essere penalizzati per pagine duplicate.
Ad esempio nei casi in cui:
- se il sito è raggiungibile sia con www che senza e ci si dimentica (non non si sa che andrebbe fatto) di impostare correttamente l'.htaccess
- nel caso in cui si presenti una situazione come sopra e lavori su un server windows che non legge l'.htaccess
Il secondo caso mi è realmente accaduto con un sito statico. Lo spazio era già stato preso dal cliente e non aveva intenzione di cambiarlo. Dopo aver combattuto con l'assistenza e cercato inutilmente una soluzione in internet ho risolto grazie al canonical impostato secondo lo standard descritto nei due link sopra. Nel giro di alcuni giorni le pagine duplicate erano scomparse da Goole e si trovava solo il sito con www e non entrambi come prima.
Facendo una ricerca per una soluzione, l'unica cosa che ho trovato sono diverse persone che hanno chiesto di rimuovere il canonical e si trova anche uno script da aggiungere al template.php che lo elimina insieme allo shortlink ed al meta generator:
function NOMETEMA_html_head_alter(&$head_elements) {
unset($head_elements['system_meta_generator']);
foreach ($head_elements as $key => $element) {
if (isset($element['#attributes']['rel']) && $element['#attributes']['rel'] == 'canonical') {
unset($head_elements[$key]);
}
if (isset($element['#attributes']['rel']) && $element['#attributes']['rel'] == 'shortlink') {
unset($head_elements[$key]);
}
}
}
Questa però non mi sembra la soluzione, l'ideale sarebbe scriverlo correttamente.
Qualche idea?
Il modulo meta tags per drupal 7 è stato rilasciato da poco (l'ho appena scoperto), da un'occhiata rapida dal codice sembra che abbia i canonical, prova a vedere se li ha realmente anche se penso di si.
http://www.chromeos.eu
Lo ho provato ieri ed il funzionamento è simile a metatags quick con alcune funzionalità in più ed altre in meno. In questo momento preferisco metatags quick che permette di impostare i meta non solo nei nodi ma anche in base alla path.
Ad ogni modo non risolve il problema, al momento funziona solo per i nodi, va impostato manualmente pagina per pagina (non ha una UI) e non fa un override del canonical di Drupal me ne aggiunge uno nuovo (stesso problema che si ha con global redirect).
Vediamo se riesco a trovare qualcosa, intanto se qualcuno ha un'idea...
@Krima
non sono una di quelle, ma ritengo che una impostazione standard del canonical sia corretta solo per le pagine statiche.
Anche se io lo ho usato in un caso specifico per un sito statico, il canonical è nato per risolvere il problema delle pagine duplicate nei siti dinamici. Con Drupal è possibile risolvere gran parte del problema con global redirect, ma non completamente.
@krima
Vero, ma è anche vero che le pagine dinamiche con il canonical url non vengono indicizzate, o meglio, è indicizzata solo la prima (penserò questo almeno fino a quando non vedrò una pagina 2 con canonical url indicizzata).