Frage

Ich erstelle eine Website, auf der ich von der Homepage aus einen anderen URI auf der Website in einen Leuchtkasten (AJAX) öffne. Ich möchte HTML5-Push-Status und Hash-Bangs als Fallback verwenden, um Statusänderungen zu verwalten.

Jetzt möchte ich, dass die URLs crawlbar und Facebook gemeinsam nutzbar / sympathisch sind.

Wenn der Benutzerbrowser problemlos den HTML5-Push-Status unterstützt, kann er die URL (z. B. http://myserver/example) freigeben, und Facebook findet die entsprechenden OG-Metas im statischen Inhalt.

Wenn der Benutzer jedoch einen HTML4-Browser verwendet, hat er eine URL wie http://myserver/#!/example. und ich möchte, dass er es trotzdem über Facebook teilen kann ...

Nun sieht es so aus, als ob Facebook die Ersetzungsmethode _escaped_fragment_ unterstützt. Ich würde also einfach Anfragen von http://myserver/?_escaped_fragment_=/example umleiten zu http://myserver/example und jeder sollte glücklich sein ...

Also habe ich meinem htaccess eine Umschreibbedingung hinzugefügt:

RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]*)
RewriteRule .* http://%{HTTP_HOST}/%1? [R=301,L,NE]

Mein Problem ist, dass ich es nicht mit Facebook zum Laufen bringen kann. Mit Facebook Linter scheint es die ganze Zeit über dem Teil der URL nach dem Hashbang zu entkommen, was zu URLs wie führt http://myserver/%2Fexample, der auf einem 404 landet :-(

Weiß jemand, wie man Facebook dazu bringt, diesem Teil der URL nicht zu entkommen? Kann ich etwas auf der apache mod_rewrite Seite tun?

Ich bin auch offen für jede andere gültige Strategie für crawlbare / sympathische Ajax-URLs;)

War es hilfreich?

Lösung 2

Ich beendete die Verwendung einer PHP-Header () -Umleitung, die perfekt funktioniert:

if(isset($_GET['_escaped_fragment_'])) {
    Header( "HTTP/1.1 301 Moved Permanently" );
    header('Location: http://'.$_SERVER['HTTP_HOST'].$_GET['_escaped_fragment_']);
    die();
}

Ich weiß nicht, warum ich bei der Umschreibbedingung htaccess entkommene Zeichen erhalten habe.

Andere Tipps

Ich denke, die Antwort unter http://facebook.stackoverflow.com/questions/ 8896773 / opengraph-on-ajax-based-website bietet einige wirklich gute Ratschläge, wie dies geschehen kann.

Hier ist der Inhalt:


Nein. Open Graph-Markup muss auf HTML-Seiten vorhanden sein, die mit reinem HTTP abrufbar sind.

Dies liegt daran, dass Facebook bei der Interaktion eines Benutzers mit einem OG-Objekt (z. B. Ausführen einer Aktion usw.) ein HTTP-GET für die OG-URL ausführt und erwartet, dass OG-Tags im Markup zurückgegeben werden.

Die Lösung besteht darin, kanonische URLs für jedes Ihrer Objekte zu erstellen. Diese URLs enthalten grundlegende HTML-Markups einschließlich OG-Tags.

Wenn Sie bei Anforderungen an diese URLs die eingehende Useragent-Zeichenfolge sehen, die 'facebookexternalhit' enthält, rendern Sie den HTML-Code. Wenn Sie dies nicht tun, stellen Sie eine 302 bereit, die zu Ihrer Ajax-URL umleitet. Auf den Ajax-URLs sollten Ihre Like-Buttons und alle von Ihnen veröffentlichten OG-Aktionen auf das kanonische URL-Objekt verweisen

Beispiel:

Als Benutzer bin ich auf http://yoursite.com/#!/artists/ monet . Ich klicke auf eine Schaltfläche "Gefällt mir" oder veröffentliche eine Aktion, aber der href-Parameter der Schaltfläche "Gefällt mir" oder die URL des Objekts beim Posten der Aktion sollte eine webfähige kanonische URL für das Objekt sein - in diesem Fall möglicherweise http://yoursite.com/artists/monet

Wenn ein Benutzer, der einen Browser verwendet, auf http://yoursite.com/artists/monet klickt, sollten Sie dies tun leiten Sie sie an http://yoursite.com/#!/artists/monet weiter, aber wenn Der eingehende Useragent sagt, es sei der Scraper von Facebook. Sie geben nur das Markup zurück, das den Künstler Monet darstellt.

Beispiele aus der Praxis finden Sie unter Deezer, Rdio und Mog, die alle dieses Entwurfsmuster verwenden.

Wenn Sie die folgende Syntax verwenden, können Sie Hashbang-URLs auf Facebook freigeben: https://stackoverflow.com/a/6138879/372838

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top