Können fehlende Anker protokolliert werden?


8

Wenn ich einen defekten Link habe, wird dieser mit einem 404 protokolliert. Wenn ich einen Link zu einem Anker habe und der Anker fehlt, erhalte ich keinen Eintrag im Protokoll. Wie kann ich diese defekten Ankerverbindungen finden, insbesondere wenn der Datenverkehr von einem Referrer stammt? Gibt es eine Möglichkeit, die Protokollierung so zu konfigurieren, dass diese Informationen erfasst werden?

HTTP-Server: Apache 2


+1, ich habe mich oft gefragt, ob es einen praktischen (automagischen) Weg gibt, dies zu tun.
Tim Post

Antworten:


11

Es ist nicht möglich, die Protokollierung des Teils #fragment der URL zu konfigurieren, da Ihr Webserver sie nie sieht. Von RFC3986

Die Fragmentkennung wird vor einer Dereferenzierung vom Rest der URI getrennt, und daher werden die identifizierenden Informationen innerhalb des Fragments selbst unabhängig vom URI-Schema ausschließlich vom Benutzeragenten dereferenziert. Obwohl diese getrennte Behandlung häufig als Informationsverlust angesehen wird, insbesondere für eine genaue Umleitung von Referenzen, wenn sich Ressourcen im Laufe der Zeit bewegen, dient sie auch dazu, zu verhindern, dass Informationsanbieter Referenzautoren das Recht verweigern, selektiv auf Informationen innerhalb einer Ressource zu verweisen. Indirekte Referenzierung bietet auch zusätzliche Flexibilität und Erweiterbarkeit für Systeme, die URIs verwenden, da neue Medientypen einfacher zu definieren und bereitzustellen sind als neue Identifikationsschemata.

Dies bedeutet, dass der Webbrowser den Ankerteil des URI grundsätzlich entfernt, bevor er an den Webserver gesendet wird. Das HTTP-Protokoll behandelt aus diesem Grund nicht einmal Fragmente. Sie werden nie über den Draht geschickt.

Fragmente stehen JavaScript (da es clientseitig ist) als Teil der Eigenschaft location.href zur Verfügung. Sobald Sie den Fragmentnamen erhalten haben, können Sie seine Gültigkeit bestätigen, indem Sie die Namenseigenschaft der Array-Elemente document.anchors [] nach diesem Wert durchsuchen.

Sobald Sie dies getan haben, kann es mit AJAX protokolliert oder als Pelms Notes an Google Analytics oder ähnliche Dienste übergeben werden.


Wenn der Anker nur ist, können <a name="blah"></a>Sie mit getElementByID die Existenz nicht bestimmen. Es könnte im IE funktionieren (ich bin nicht sicher, ob es in 8 noch der Fall ist), aber wenn Sie dies tun möchten, würde ich vorschlagen, auch die ID hinzuzufügen.
Cebjyre

Hmm. Eine Lücke da :) Ja, das Hinzufügen der ID ist am effizientesten, oder Sie können das DOM nach Name oder Tagname durchsuchen. Ich werde das beheben.
JasonBirch

Ich frage mich, ob HTML5-Anker-Ping für diesen Zweck verwendet werden könnte.
Kzqai

3

Wie andere bereits gesagt haben, sind Seitenanker etwas, auf dem der Browser und nicht der Webserver arbeitet.

Sie können Code verwenden, um die Ankerinformationen an Ihr Analytics-Programm weiterzuleiten. Sie können den location.hashWert beispielsweise extrahieren und als benutzerdefinierte Variable an Google Analytics übergeben .

Nützlicher ist, dass Sie Code ausführen können, der die HTML-Seite auf einen Anker überprüft, der dem Wert von entspricht, location.hashund wenn er fehlt, ein GA-Ereignis auslöst . Das würde Ihnen dann einen GA-Bericht über fehlerhafte Seitenanker-Links geben, wenn Benutzer darauf klicken.


Großartige Idee. Es gibt so viel, was ich mit GA machen könnte, aber ich bin es nicht, wahrscheinlich
lasse

1

Ich denke nicht, dass es möglich ist, dies in Apaches Protokollen zu sehen. Wenn eine Datei angefordert und bereitgestellt wird, endet damit die Beteiligung von Apache (oder eines anderen Servers). Das Finden und Positionieren des Ankers ist etwas, was der Browser tut. Zu dem Zeitpunkt, an dem Ihr Browser den Anker findet, ist die Verbindung zum Server bereits geschlossen.

Ein guter Linkprüfer sollte das aufgreifen, aber das ist ein manueller Vorgang.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.