Crawler tester

crawler.realtysev.ru

Тестовый стенд аудита сайта

AbsentLinksAnchorsInternal: все пустые внутренние ссылки на одной странице

Ожидается: предупреждение «Внутренние ссылки без анкора» — 30 пустых ссылок, 25 разных адресов, в отчёте первые 20.

В каждом кейсе ниже — одна или несколько пустых внутренних ссылок, которые аудит должен найти: описание, сами ссылки и их исходный код. Адреса у кейсов разные, чтобы в отчёте было видно, какие из них проверка нашла.

1. Ссылка без содержимого

Ссылка ведёт на главную, но внутри неё ничего нет: ни текста, ни картинки. Посетитель такую ссылку не увидит и не сможет нажать, а поисковик не поймёт, о чём страница, на которую она ведёт. Обычно так выглядит иконка, которую забыли подключить в шаблоне.

Ссылка:

<a href="/#empty"></a>

2. Внутри только пробелы и перевод строки

Внутри ссылки только пробелы и перевод строки. На экране её не видно, а текст для поисковика пустой. Такое получается, когда шаблонизатор подставляет в ссылку переменную, а значение оказалось пустым, но отступы в разметке остались.

Ссылка:

<a href="/#whitespace">
        </a>

3. Внутри только HTML-комментарий

Внутри ссылки остался только HTML-комментарий. Комментарий не виден посетителю и не считается текстом, поэтому для поисковика ссылка пустая. Так бывает, когда содержимое ссылки закомментировали при правке шаблона и забыли убрать саму ссылку.

Ссылка:

<a href="/#comment"><!-- иконка удалена --></a>

4. Пустая ссылка с адресом решётка

Адрес ссылки — решётка, то есть та же страница. Для аудита это внутренняя ссылка, и раз в ней ничего нет, она должна попасть в предупреждение. Такие ссылки оставляют под выпадающие меню и кнопки на JavaScript, а содержимое потом теряется.

Ссылка:

<a href="#"></a>

5. Пустая ссылка с пустым адресом

Атрибут адреса есть, но он пустой. Браузер считает такую ссылку ссылкой на текущую страницу, значит, она внутренняя. Внутри ссылки тоже ничего нет, поэтому аудит должен её найти и показать в списке пустых внутренних ссылок.

Ссылка:

<a href=""></a>

6. Пустой тег ссылки без атрибута адреса

У ссылки нет ни адреса, ни содержимого. Разбор считает такую ссылку ведущей на текущую страницу, поэтому она внутренняя и пустая одновременно. Попутно она должна попасть и в проверку ссылок без адреса — это два разных замечания к одному тегу.

Ссылка:

<a></a>

7. Пустая ссылка с полным адресом сайта

Адрес записан полностью, с протоколом и доменом, но домен тот же, что у страницы. Аудит должен понять, что ссылка внутренняя, и найти, что она пустая. Здесь проверяем, что полная форма адреса не превращает ссылку во внешнюю.

Ссылка:

<a href="https://crawler.realtysev.ru/#absolute"></a>

8. Пустая ссылка только с атрибутом aria-label

У ссылки есть подпись для экранных читалок в атрибуте aria-label, но видимого содержимого нет. Аудит смотрит на содержимое ссылки, а не на атрибуты, поэтому ссылка считается пустой. Поисковики тоже используют текст ссылки, а не aria-label.

Ссылка:

<a href="/#aria-label" aria-label="На главную"></a>

9. Баннер: картинка задана фоном через CSS, повторяется три раза

Типичный случай из тикета: баннер, у которого картинка подставлена фоном в стилях, а адрес пустой. Внутри ссылки нет ни текста, ни картинки. Одинаковая разметка повторяется трижды — в отчёте это должна быть одна строка с числом повторов. Адрес у них такой же пустой, как в кейсе 5, поэтому по значению href они сольются с ним.

Ссылка:

<a href="" class="promo-banner__link" style="display:inline-block;width:120px;height:24px;background:url(/images/favicons/favicon-16x16.png) no-repeat"></a>
<a href="" class="promo-banner__link" style="display:inline-block;width:120px;height:24px;background:url(/images/favicons/favicon-16x16.png) no-repeat"></a>
<a href="" class="promo-banner__link" style="display:inline-block;width:120px;height:24px;background:url(/images/favicons/favicon-16x16.png) no-repeat"></a>

10. Иконка соцсети через CSS-класс и подсказку title

Значок соцсети рисуется классом из иконочного шрифта, а подпись есть только во всплывающей подсказке title. Поисковик title у ссылки за текст не считает, поэтому ссылка пустая.

Ссылка:

<a href="/#social" class="icon icon-vk" title="ВКонтакте"></a>

11. Кнопка меню с id и data-атрибутами

Ссылку используют как кнопку открытия меню: у неё есть id и data-атрибуты для скрипта, но нет текста. По id такую ссылку легко найти в вёрстке.

Ссылка:

<a href="/#menu-toggle" id="menu-toggle" class="header__burger" data-action="open-menu"></a>

12. Ссылка с target и rel

Атрибуты target и rel не влияют на проверку: ссылка всё равно пустая. Проверяем, что лишние атрибуты не мешают найти её по адресу.

Ссылка:

<a href="/#target" target="_blank" rel="nofollow noopener"></a>

13. Один адрес в шапке и в подвале

Логотип-ссылка без текста стоит и в шапке, и в подвале с разными классами. Адрес одинаковый, поэтому в отчёте это одна строка с числом 2, а найти по селектору можно обе.

Ссылка:

<a href="/#repeated" class="header__logo"></a>
<a href="/#repeated" class="footer__logo"></a>

14. Пробелы вокруг адреса

В коде адрес записан с пробелами по краям. Браузер их отбрасывает, но в отчёте должно быть значение как в коде — иначе селектор его не найдёт.

Ссылка:

<a href=" /#spaces "></a>

15. Кавычки в адресе

Адрес содержит двойные кавычки, поэтому атрибут записан в одинарных. Проверяем, что селектор правильно экранирует кавычки.

Ссылка:

<a href='/?q="x"#quotes'></a>

16. Относительный адрес без слэша

Адрес записан относительно текущей папки. Развёрнутый адрес будет полным путём, а в коде — только имя файла; в отчёте должно быть то, что написано в коде.

Ссылка:

<a href="absent-links-anchors-internal-text.html"></a>

17. Кириллица в адресе

Адрес написан кириллицей, без кодирования. Развёрнутый адрес закодирован процентами и по коду страницы не ищется, а исходное значение — ищется.

Ссылка:

<a href="/каталог/#cyrillic"></a>

18. Якорь на этой же странице

Ссылка «наверх» ведёт к якорю на этой же странице. Поисковики отбрасывают часть адреса после решётки, поэтому для них это ссылка на эту же страницу. Аудит на неё предупреждает — текста нет, — а в отчёте она в группе «Ведут на эту же страницу» с пометкой «якорь».

Ссылка:

<a href="#top" class="scroll-up"></a>

19. Ссылка-кнопка без href с обработчиком

Ссылка без адреса открывает окно скриптом: у неё есть класс, role и onclick. По значению href она сольётся с кейсом 6, а найти её поможет класс.

Ссылка:

<a class="js-open-modal" role="button" onclick="return false"></a>

20. Глубоко вложенная ссылка

Пустая ссылка спрятана внутри нескольких блоков с классами, как в реальной вёрстке карточки товара. Селектор по адресу находит её независимо от вложенности.

Ссылка:

<div class="catalog"><div class="product-card"><div class="product-card__image"><a href="/#nested" class="product-card__link"></a></div></div></div>

21. Больше 20 разных адресов на странице

Семь пустых ссылок с разными адресами. Вместе с кейсами выше на странице становится 25 уникальных адресов, а аудит хранит только первые 20. В отчёт попадут /#extra-1 и /#extra-2, а про остальные пять он скажет строкой «Ещё 5 ссылок с другими адресами не показаны».

Ссылки:

<a href="/#extra-1"></a>
<a href="/#extra-2"></a>
<a href="/#extra-3"></a>
<a href="/#extra-4"></a>
<a href="/#extra-5"></a>
<a href="/#extra-6"></a>
<a href="/#extra-7"></a>