Можно ли регистрировать недостающие якоря?

8

Если у меня есть неработающая ссылка, она регистрируется с 404. Если у меня есть ссылка на якорь, а якорь отсутствует, я не получаю запись в журнале. Как я могу найти эти неработающие якорные ссылки, особенно если трафик идет от реферера? Есть ли способ настроить ведение журнала для сбора этой информации?

HTTP-сервер: Apache 2

Приостановлено до дальнейшего уведомления.
источник
+1, я часто задавался вопросом, был ли практичный (автоматический) способ сделать это.
Тим Пост

Ответы:

11

Невозможно настроить ведение журнала части #fragment в URL, потому что ваш веб-сервер его никогда не видит. От RFC3986

идентификатор фрагмента отделяется от остальной части URI до разыменования, и, таким образом, идентифицирующая информация в самом фрагменте разыменовывается исключительно пользовательским агентом, независимо от схемы URI. Хотя эта отдельная обработка часто воспринимается как потеря информации, особенно для точного перенаправления ссылок, когда ресурсы перемещаются с течением времени, она также служит для того, чтобы поставщики информации не могли отказывать авторам ссылок в избирательном доступе к информации внутри ресурса. Косвенные ссылки также обеспечивают дополнительную гибкость и расширяемость для систем, которые используют URI, поскольку новые типы носителей легче определить и развернуть, чем новые схемы идентификации.

Это означает, что веб-браузер в основном удаляет якорную часть URI перед отправкой на веб-сервер. Протокол HTTP даже не работает с фрагментами из-за этого; они никогда не отправляются по проводам.

Фрагменты доступны для JavaScript (потому что это на стороне клиента) как часть свойства location.href. Получив имя фрагмента, вы можете подтвердить его действительность, выполнив поиск значения в свойстве name элементов массива document.anchors [].

Как только вы это сделаете, его можно будет зарегистрировать с помощью AJAX или, как заметки , передать в Google Analytics или аналогичные сервисы.

JasonBirch
источник
Если привязка просто, <a name="blah"></a>вы не сможете определить существование с getElementByID; он может работать в IE (я не уверен, так ли это в 8), но если вы хотите сделать это, я бы посоветовал также добавить идентификатор.
Cebjyre
Хм. Немного огрызнулся там :) Да, добавление идентификатора является наиболее эффективным, или вы можете пройтись по DOM по имени или тэгу. Я исправлю это.
JasonBirch
Интересно, можно ли использовать для этой цели якорный пинг html5?
Kzqai
3

Как уже говорили другие, якоря страниц - это то, над чем работает браузер, а не веб-сервер.

Вы можете использовать некоторый код для передачи информации о привязке в вашу программу Google Analytics. Например, вы можете извлечь location.hashзначение и передать его в Google Analytics в качестве пользовательской переменной .

Полезнее было бы запустить код, который проверяет html страницы на предмет привязки, соответствующей значению location.hashи, если она отсутствует, запускает событие GA . Это даст вам отчет GA о неработающих ссылках на якорные страницы, когда пользователи нажимают на них.

pelms
источник
Отличная идея. Я так много могу сделать с Г.А., но нет, вероятно, оставив деньги на столе ...
JasonBirch
1

Я не думаю, что это возможно увидеть в логах Apache. Если файл запрашивается и обслуживается, это в значительной степени прекращает участие Apache (или любого другого сервера). Поиск и позиционирование привязки - это то, что делает браузер. К тому времени, когда ваш браузер найдет якорь, соединение с сервером уже закрыто.

Хорошая программа проверки ссылок должна это понять, но это ручной процесс.

Тим Пост
источник