Sie befinden sich hier:
» 
» 
15.09.2011

Facebook „like“-Button: Page could not be reached error

Kategorie(n): Facebook Tipps

Beim Klick auf den like-Button erschien in unregelmäßigen Abständen auf meinen Seiten die Fehlermeldung:

„Page on the requested URL http://... could not be reached”

und der Klick wurde nicht gezählt. Leider trat der Fehler nur sporadisch auf. Somit begab ich mich auf die Fehlersuche und stellte fest, dass ich nicht der Einzige war, der mit diesem Effekt kämpfte. Laut Facebook soll der Bug mittlerweile behoben worden sein, was aber durch die letzten Thread-Einträge nicht unbedingt bestätigt wird.

Wie wird der like-Button beim Aufruf in die Webseite integriert?

Beim Aufruf der Webseite wird das Facebook Javascript SDK (Software Develover Kit) asynchron geladen. Darin enthalten ist ein Aufruf, der per cURL die aktuelle Seite im Hintergrund nochmalig aufruft, um z.B. die Open Graph Meta-Tags der Webseite zu parsen. Dies ist notwendig, um bei einem Klick auf den like-Button die notwendigen Informationen zur Verfügung zu haben, die in den Newsfeed des jeweiligen Users gepostet werden (Bild, Beschreibung etc.). Dieser zusätzliche Callback-Aufruf ist auch sehr gut in den Logfiles des Webservers ersichtlich.

Für den Aufruf des Scriptes und des darauf folgenden Callbacks steht aber nur ein bestimmtes Zeitfenster zur Verfügung. Das heißt: Wenn dies zu lange dauert, läuft der Callbackaufruf in einen Timeout und es kommt zu oben beschriebenem Fehler. Der Timeout liegt bei 5 Sekunden.

Analyse des Ladevorgangs der Webseite

Wenn man den Seitenaufbau genau analysiert, wird deutlich, dass der like-Button erst 1-2 Sekunden nach Beendigung des primären Seitenaufbaus eingeblendet wird (durch das asynchrone Laden). Dann bleibt nicht mehr viel Zeit übrig, um die Seite per cURL zu parsen. Falls noch diverse Adsense oder andere Gimmicks eingeblendet werden, könnte das Zeitfenster noch kleiner werden. Doch auch ohne diese zusätzlichen Effekte kann man in den Timeout laufen.

Beschleunigung des Ladevorgangs

In meinem konkreten Fall hatte ich mir als Ziel gesetzt, den like-Button valide nach W3C einzubauen. Hierzu habe ich den Button per Javascript eingefügt, in dem ich in den DOM-Baum einen weiteren Node eingefügt hatte. Da ich auf der Webseite sowieso schon das jquery-Framework eingebunden hatte, nutzte ich hierzu jquery-Funktionen. Dies hatte aber zur Folge, dass a) das jquery-Framework erst einmal geladen und b) danach die Manipulation am DOM-Baum mit jquery-Funktionen durchgeführt werden mussten. Manipulationen am DOM-Baum bedeuten aber für viele Browser, dass der DOM-Baum noch einmal komplett gerendert (neu aufgebaut) werden muss. Und dies alles benötigt Zeit – viel Zeit – zu viel Zeit für den nachfolgenden Seitenaufruf per cURL.
Somit habe ich versucht, diese Ladezeit zu minimieren. Ich verwendete einen ganz normalen Javascript-Aufruf und füge den Button mit innerHtml in die Webseite ein, ohne Verwendung eines zusätzlichen Frameworks wie z.B. jQuery. Hierdurch wurde das Laden signifikant beschleunigt und der Effekt trat danach nie wieder auf.

Schlußfolgerung

Der Fehler ist meiner Meinung nach nicht unbedingt ein Bug im eigentlichen Sinne. Hier war das Problem durch die langen Ladezeiten eher hausgemacht.

Autor: Mein Name ist Harry Kämpf und ich bin seit vielen Jahren als Projekt Manager im Webumfeld tätig. Auf diesen Erfahrungen basieren die Tipps zur Webseitengestaltung. Ich schreibe gern über Webthemen, nehme aktuelle Trends auf und gebe bei Bedarf kompetente Beratung. Mehr Infos können Sie auf ueber-mich.html nachlesen.

25