0

Essayer d'obtenir que mes pages Angular application générées soient explorées parfaitement par Google sans utiliser HashBangs #!. Donc, je produis des URL pushState avec:Google crawler ne pas voir la page générée Angular prerendered

$locationProvider.html5Mode(true); 
$locationProvider.hashPrefix('!'); 

ajouté à la configuration de l'application, et

<base href="/hockey-att/"> 
<meta name="fragment" content="!"> 

à l'en-tête html.

Et je cela dans le .htaccess:

RewriteEngine on 

RewriteBase /1/ 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ #/$1 [L] 

<IfModule mod_headers.c> 
    RequestHeader set X-Prerender-Token "prerendertoken" 
</IfModule> 

<IfModule mod_rewrite.c> 
    <IfModule mod_proxy_http.c> 
     RewriteEngine On RewriteCond %{HTTP_USER_AGENT} baiduspider|googlebot|googlebot-mobile|bingbot|facebookexternalhit|twitterbot|rogerbot|linkedinbot|embedly|quora\ link\ preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator [NC,OR] 
     RewriteCond %{QUERY_STRING} _escaped_fragment_=(\%2F|/)_(._) 

     # Only proxy the request to Prerender if it's a request for HTML 
     RewriteRule ^(?!.*?(\.js|\.css|\.xml|\.less|\.png|\.jpg|\.jpeg|\.gif|\.pdf|\.doc|\.txt|\.ico|\.rss|\.zip|\.mp3|\.rar|\.exe|\.wmv|\.doc|\.avi|\.ppt|\.mpg|\.mpeg|\.tif|\.wav|\.mov|\.psd|\.ai|\.xls|\.mp4|\.m4a|\.swf|\.dat|\.dmg|\.iso|\.flv|\.m4v|\.torrent|\.ttf|\.woff))(.*) http://service.prerender.io/http://%{HTTP_HOST}/$2 [P,L] 
    </IfModule> 
</IfModule> 

J'ai l'application dans le sous-dossier 1 et la section RequestHeader set X-Prerender-Token en .htaccess réglé sur prerender.io jeton.

L'application avec les nouvelles URL fonctionne parfaitement, et en utilisant prerender.io pour rendre les pages. Les pages sont prérendues et sont accessibles sans problème via http://service.prerender.io/ {{http://myurl.com/page}}

Mon problème est que le robot d'exploration de google n'accède pas aux pages préchargées. Je l'ai essayé via la fonctionnalité Récupérer en tant que Google de la Search Console avec et sans ?_escaped_fragment_= ajouté à l'URL récupérée. Mais il obtient toujours la page brute avec des directives angulaires dans sa source.

Je pense que je manque quelque chose dans le .htaccess, mais je ne sais pas quoi.

Utilisation de l'ui-routeur pour les états angulaires.

Répondre

0

On dirait que vous redirigez toutes les requêtes vers une URL #:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ #/$1 [L] 

Est-ce exact? Si tel est le cas, ce code empêche la configuration de Prerender d'être exécutée sur chaque requête.

Si vous utilisez l'état push html5, pouvez-vous supprimer cette section, car vous n'avez pas besoin d'une redirection vers une URL #.

+0

Si je supprime le '#', l'accès direct à une page, comme l'ouverture d'une url 'http: // myurl.com/1/state' dans le navigateur, ne fonctionne plus, donnant 404 erreur. Le Fetch comme Google me donne Erreur non trouvée dans ce cas. – neptune

+0

D'où vient votre index.html? Il semble que c'est pourquoi c'est 404ing. Vous avez besoin de code après la config Prerender pour servir votre index.html pour toutes les demandes. –

+0

J'ai mon index.html à http://myurl.com/1/index.html et avant d'implémenter les urls pushstate j'avais http://myurl.com/1/#/home comme urls. [Ceci est] (http://sigmagfx.com/1) le site sur lequel je travaille. Je pense que ça vaut la peine de mentionner qu'à myroot url j'ai un site Pico cms avec son propre .htaccess. – neptune