web-dev-qa-db-fra.com

Les URL des plans de site Google doivent-elles être codées en double?

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.

1
Hoytman

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.

0
Hoytman

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
1
zigojacko