0

Der Versuch, meine Angular app generierte Seiten perfekt von Google gecrawlt zu bekommen, ohne HashBangs zu verwenden #!. So erzeuge ich pushstate URLs mit:Google Crawler nicht vorgerenderte Angular generiert Seite

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

hinzugefügt app config und

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

in den HTML-Header.

Und ich habe dies in den .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> 

Ich habe die App in dem Unterordner 1 und den RequestHeader set X-Prerender-Token Abschnitt in .htaccess gesetzt Token prerender.io.

Die App mit den neuen URLs funktioniert einwandfrei und prerrender.io wird zum Rendern der Seiten verwendet. Die Seiten sind vorgerendert und sind ohne Probleme über http://service.prerender.io/ {http://myurl.com/page}}

Mein Problem ist, dass der Google-Crawler nicht auf die vorgerenderten Seiten zugreifen. Versucht es über Fetch als Google-Funktionalität der Search Console mit und ohne ?_escaped_fragment_=, die der abgerufenen URL hinzugefügt wurde. Aber es erhält immer noch die rohe Seite mit eckigen Anweisungen in der Quelle.

Ich glaube, ich vermisse etwas in der. Htaccess, aber ich weiß nicht was.

Verwenden von Ui-Router für Winkelzustände.

Antwort

0

Es sieht aus wie Sie alle Anfragen an einen # URL umleiten:

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

Ist das richtig? Wenn dies der Fall ist, verhindert dieser Code, dass die Prerender-Konfiguration bei jeder Anforderung ausgeführt wird.

Wenn Sie html5 Push-Status verwenden, können Sie diesen Abschnitt entfernen, da Sie keine Weiterleitung zu einer # URL benötigen.

+0

Wenn ich die '#' entferne, funktioniert der direkte Zugriff auf eine Seite, wie das Öffnen einer URL 'http: // myurl.com/1/state' im Browser, nicht mehr, was einen 404 Fehler ergibt. Der Abruf wie Google gibt mir in diesem Fall keinen gefundenen Fehler. – neptune

+0

Woher kommt Ihre index.html? Es scheint so, als ob es 404 ist. Sie benötigen Code nach der Prerender-Konfiguration, um Ihre index.html für alle Anfragen bereitzustellen. –

+0

Ich habe meine index.html bei http://myurl.com/1/index.html und vor der Implementierung der Pushstate URLs hatte ich http://myurl.com/1/#/home wie URLs. [Dies ist] (http://sigmagfx.com/1) die Seite, an der ich arbeite. Ich denke, es ist erwähnenswert, dass ich bei myroot url eine Pico cms Seite mit eigener .htaccess habe. – neptune

Verwandte Themen