Les URL de sitemap Google doivent-elles être doublées urlencoded
?
Je soumets mes sitemaps à Google, qui a des difficultés à naviguer vers les URL contenant des caractères urlencoded
. Un exemple d'URL problématique est celui qui contient here&there
(qui a été urlencoded
à here%26there
). Dans mon sitemap, cette URL ressemble à ceci:
example.com/here%26there
Cependant, Google a mal interprété mon sitemap et a recherché:
example.com/here&there
qui retourne une erreur 404. Dois-je double encoder l'URL dans mon sitemap pour qu'il ressemble à ceci:
example.com/here%2526there
(notez que %
devient %25
)
Bien que cette question concerne Google et la façon dont elle lit les sitemaps ((les URL de sitemap Google doivent-elles être doublées urlencoded
)), je vais maintenant vous montrer le code que j'utilise pour coder deux fois mes URL pour mes sitemaps:
for($j = 1; $j <= $page_count; $j += 1){
$data .= '<url><loc>'.str_replace('%', '%25',
BASE_URL.'products/'.
urlencode(str_replace('/', '~1', $list['manufacturer']))).
($j == 1?'':'/'.$j).'</loc></url>'.PHP_EOL;
}
Notez que les non-URL '/' sont complètement supprimés et que tous les autres caractères spéciaux sont codés en double.
Lorsque j'étais en avance, je soumettais mes cartes de sites à Google avec un double codage d'url. En d'autres termes, si une URL contenait un caractère codé par une URL, tel que% 26, il deviendrait% 2526.
Mes erreurs 404 sont maintenant passées de 14 000 à 10 000 et continuent à chuter.
Ou vous pouvez simplement utiliser preg_replace
avec urldecode
dans la construction de l'URL pour conserver les caractères spéciaux dans l'URL, tels que ceux figurant actuellement dans votre sitemap.
preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($[attach_necessary_object_here]));
De cette façon, l'URL serait: -
example.com/here/there