web-dev-qa-db-fra.com

Autoriser les robots à lire le contenu injecté dynamiquement

J'ai un assez grand Angular SPA, et j'utilise actuellement ? _ Escaped_fragment _ pour servir des versions statiques de toutes nos pages. Cependant, j'ai découvert que cela posait souvent des problèmes avec les pages nouvellement déployées/mises à jour (les pages prérendues ont toujours des références en cache à l'ancien css qui, puisque nous appelons notre css en fonction de la version de déploiement, n'existe plus ... Google examine ensuite les pages sans style, ce qui les fait ressembler à des déchets très chargés).

Nous pourrions mettre en place des solutions de contournement pour que les règles soient fonctionnelles, mais j'aimerais bien voir si Google peut simplement explorer notre code ajax.

Voici mon problème ...

Nous "refusons actuellement:/api /" dans notre fichier robots.txt parce que nous ne voulons pas que notre API soit publique. Mais notre injection dynamique dépend des informations de notre API. Ainsi, dans notre "Fetch and Render", le GoogleBot obtient un 404, car chaque fois qu'il tente d'extraire des informations de l'API, elles sont bloquées. enter image description here

L'agent utilisateur du navigateur (le volet de droite sur Fetch and Render) le rend bien, mais l'agent utilisateur Google affiche simplement un 404.

Des idées sur la façon de contourner cela? Ai-je un malentendu fondamental sur les robots d'exploration? Je suis vraiment perplexe ici ...

1
gidgicken

Vous devez savoir que même si Google est capable d’analyser et de rendre le contenu injecté AJAX, il doit accéder à toutes les feuilles de style et à tous les fichiers javascript utilisés lors du processus afin de traiter correctement la page. Tant qu'il n'y a pas de liens hypertextes en provenance de votre site ou d'autres sites dans le répertoire de l'API et que cela ne se fait que par AJAX importation de contenu, Google n'affiche pas le répertoire de l'API dans les résultats de recherche.

En ce qui concerne le problème manquant CSS, la meilleure pratique consiste à conserver la version précédente de tous les fichiers de contenu statique jusqu'à ce que tous les caches aient expiré et que les nouveaux fichiers soient utilisés. Pour tous mes sites, je conserve les 3 dernières versions de tous les fichiers statiques sur le serveur, au cas où quelqu'un accèderait à un ancien fichier afin qu'il soit toujours accessible, et en particulier lorsqu'il existe un risque que certains aspects du site Web aient encore une référence à l'ancien fichier statique.

Toutefois, l’essentiel de votre question est que vous devez autoriser Googlebot à accéder au répertoire /api/ afin qu’il puisse accéder au contenu pertinent demandé par AJAX, à l’exploration et à l’indexation appropriée.

1
Chris Rutherfurd

Peut-être devriez-vous envisager quelque chose comme ce code (pour Apache) du Boilerplate HTML5 :

# ----------------------------------------------------------------------
# | Filename-based cache busting                                       |
# ----------------------------------------------------------------------

# If you're not using a build process to manage your filename version
# revving, you might want to consider enabling the following directives
# to route all requests such as `/style.12345.css` to `/style.css`.
#
# To understand why this is important and even a better solution than
# using something like `*.css?v231`, please see:
# http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

# <IfModule mod_rewrite.c>
#     RewriteEngine On
#     RewriteCond %{REQUEST_FILENAME} !-f
#     RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
# </IfModule>

Ce code garantit que la demande est dirigée vers le fichier approprié sans que les développeurs doivent le renommer manuellement et s'inquiéter des fichiers 404.

De cette façon, Google verrait HTML, CSS et JS.

1
adam-asdf