Faire du cloaking avec X-Robots-Tag pour un Sitemap XML est autorisé par Google
Faire du cloaking est généralement synonyme de sanction auprès des moteurs de recherche, et notamment de Google. Si l'on en croît les dires de John Mueller, il est pourtant autorisé de rediriger les robots à sa guise (cloaking pur) quand cela concerne un fichier Sitemap XML afin d'éviter que les utilisateurs ou les robots spammeurs profitent de ce fichier.
Le porte-parole de Google a indiqué ceci dans son hangout hebdomadaire sur Google+ du 19 décembre 2015 (à 19'30 dans la vidéo en bas de l'article). Voici la question qui lui était posée initialement :
Pour faire face aux scrapers, j'aimerais ajouter un entête X-Robots-Tag pour le fichier Sitemap XML, et permettre uniquement le crawl à GoogleBot et quelques autres crawlers crédibles, mais pas aux bots escrocs ou aux utilisateurs. Est-ce que ça peut être considéré comme du cloaking ?
La question étant très pertinente, John Mueller y a répondu sans vergogne :
Non. Je ne pense pas que ce serait une solution problématique. Avec un fichier Sitemap vous pouvez même le masquer directement pour les moteurs de recherche. C'est quelque chose que nous autorisons clairement. Ou si vous testez des adresses IP et que vous voyez que ce n'est pas Googlebot, Bing, Yandex, Yahoo ou n'importe quel autre robot via leur adresse IP, vous pouvez proposer une page comme non autorisée si vous le souhaitez.
En d'autres termes, il est possible de faire du cloaking avec les robots à partir du moment où l'objectif est de protéger le fichier Sitemap XML du spam éventuel, que ce soit via l'entête X-Robots-Tag ou même par une gestion des adresses IP des user-agent. L'objectif est surtout de ne faire afficher les fichiers Sitemap XML (voire les robots.txt) qu'aux robots qui le méritent...
Si vous ne savez pas comment procéder, sachez que la documentation de Google donne déjà de bonnes informations à ce sujet. Il est possible de régler les entêtes X-Robots-Tag avec une fonction PHP, comme ci :
header("X-Robots-Tag: noindex", true);
Idéalement, il faut placer ces lignes de code dans un fichier .htaccess pour les serveurs Apache :
<FilesMatch "^sitemap\.xml$"> Header set X-Robots-Tag: "noindex" </FilesMatch>
Ou sa variante pour des ressources XML (et autres) :
<FilesMatch "\.(txt|log|xml|css|js)$"> Header set X-Robots-Tag "noindex" </FilesMatch>
Pour les serveurs Nginx, il faut écrire ces lignes, équivalentes aux précédentes :
location ~* \.(txt|log|xml|css|js)$ { add_header X-Robots-Tag noindex; }
Sachez qu'il est possible de préciser uniquement Googlebot si vous le désirez, il suffit d'ajouter le nom du robot après la directive, comme ceci en PHP (dans ce cas, le mot clé "otherbot" dirige les autres robots non nommés, et permet de faire du cloaking ciblé) :
header("X-Robots-Tag: googlebot: noindex", true);
La valeur "noindex" sert à ne pas indexer le document mais seulement à le faire consulter par les robots. La valeur "noarchive", non présentée dans les exemples ici, permet de ne pas mettre de version du fichier Sitemap XML (ou autres fichiers) en cache dans le moteur de recherche. En revanche, la valeur "nofollow" est assez peu utile pour ces fichiers, voire contre-productive. D'autres valeurs existent, comme "noimageindex" pour ne pas indexer les images d'une page, "nosnippet" pour ne pas afficher d'extrait dans les SERP, etc.
Quoi qu'il en soit, retenez qu'il est possible de freiner le crawl des mauvais robots et des utilisateurs pour les fichiers Sitemap XML et même robots.txt. Cela évite du scraping en masse, du spam, voire pire... C'est pour une fois du "bon cloaking", et John Mueller ne fait que confirmer que cela est possible sans risque de pénalité.