2017-05-13 1 views
2

Info über Setup:Prerender + AngularJS - Crawlers Auszeit

Ich habe installiert Prerender (https://github.com/prerender/prerender) erfolgreich auf meinem eigenen Server, Ubuntu 16.

Das ist mein .htaccess ist, es umschreibt die URL zum Prerender, wenn ein Crawler erkannt wird. Beispiel: http://www.example.nl/63/Merry wird http://example.nl:3000/http://www.example.nl/63/Merry

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 

RewriteCond %{HTTP_USER_AGENT} baiduspider|facebookexternalhit|twitterbot|redditbot|slackbot|msnbot|googlebot|duckduckbot|bingbot|rogerbot|linkedinbot|embedly|flipboard|tumblr|bitlybot|SkypeUriPreview|nuzzel|Discordbot|quora\ link\ preview|showyoubot|outbrain|pinterest [NC,OR] 
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=$ 
RewriteRule ^(.*)$ http://example.nl:3000/http://www.example.nl/$1? [R=301,L] 
#RewriteRule ^(.*)$ http://art.example.net/$1? [R=301,L] 

RewriteRule ^(.*)/(.*)$ /#$1/$2 [NC,L] 

Das Problem:

Meta-Daten werden nicht auf Skype geladen, Reddit, Twitter, wenn Prerender verwenden. Das Umschreiben der URL auf die alte PHP-Website: http://art.example.net (derzeit im htaccess kommentiert) funktioniert. Da alle Meta-Tags auf der PHP- und der Angular-Website identisch sind, ist wahrscheinlich der Voraber die Ursache des Problems.

Fehler Beispiel von Twitter (https://cards-dev.twitter.com/validator URL: http://example.nl/63/Merry) mit Prerender:

ERROR: Failed to fetch page due to: HttpConnectionTimeout 
WARN: this card is redirected to http://example.nl:3000/http://www.example.nl/63/Merry 

Twitter, wenn zu art.example.net Umleitung (auch die Haupt-URL: http://example.nl/63/Merry)

INFO: Page fetched successfully 
INFO: 19 metatags were found 
INFO: twitter:card = summary_large_image tag found 
INFO: Card loaded successfully 
WARN: this card is redirected to http://art.example.net/63/Merry 

Die Verwendung der PHP-Version funktioniert und alle Metadaten werden geladen.

In der Zukunft möchte ich die PHP-Website komplett entfernen, also würde ich wirklich gerne mit Prerender arbeiten. Prerender funktioniert in Discord und Postman (mit geändertem User Agent-Header). Ich weiß einfach nicht, warum es für einige andere Agenten nicht funktioniert.

Antwort

1

Ihre Rewrite-Regel sollte ein Proxy sein, keine Weiterleitung. Die Weiterleitung an Ihren Prerender-Server führt zu allen möglichen Problemen, einschließlich der Anweisung, dass Google Nutzer direkt von den Suchergebnissen an Ihren Prerender-Server weiterleitet (was wirklich schlimm ist!).

Die Rewrite-Regel Teil sollte sein:

RewriteRule ^(.*)$ http://example.nl:3000/http://www.example.nl/$1? [P,L] 
0

Die Lösung:

Twitter und andere Crawler können keine Punkte behandeln und ':' in der URL. So sind reine IP-Adressen und Portnummern nicht erlaubt.

Um das Problem zu beheben, können Sie eine Sub-Domain erstellen, die auf die Node.js Anwendung umleitet

Meine Sub-Domain Apache Virtual Host:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName prerender.example.net 
    ServerAlias prerender.example.net 
    ProxyPass/http://localhost:3000/ connectiontimeout=5 timeout=30 
</VirtualHost> 

https://serverfault.com/questions/497856/using-an-apache-virtualhost-to-access-a-node-js-instance-on-the-same-server

Zusammen mit der Antwort aus prerender.io selbst, ich habe es geschafft, es zum Laufen zu bringen.

Obwohl Proxy und Weiterleitung für Social Media Crawler nicht wirklich wichtig sind, da die URL dort bereits eingefügt wird. Es empfiehlt sich, das Proxy-Tag zu verwenden.