Валидация HTML: как и зачем проверять код валидатором W3C

Браузер отобразит страницу, даже если в HTML есть ошибки - незакрытые теги, дублирующиеся id, забытые атрибуты. Он просто молча "чинит" код по стандартному алгоритму разбора HTML5. Но не все ошибки безопасны: некоторые ломают доступность и работу JavaScript, оставаясь незаметными на глаз. Валидатор W3C находит такие проблемы - хотя на позицию в поиске, по прямому подтверждению Google, они не влияют.

Сверху - реальная сериализация того, что получилось в браузере (незакрытый <p> из кода слева окажется закрытым сам собой). Снизу - список проблем, которые браузер прощает, а валидатор - нет. Попробуй исправить второй id на другой и добавить alt картинке - список обновится.

Как браузер исправляет ошибки в HTML и почему страница всё равно отображается

У HTML, в отличие от JSON из прошлого урока, нет "падения с ошибкой". Браузеры обязаны следовать алгоритму разбора HTML5 - он точно описывает, что делать даже со сломанной разметкой: например, автоматически закрыть тег <p>, если следом идёт другой блочный элемент. До того как этот алгоритм закрепили в спецификации (HTML5 стала Рекомендацией W3C 28 октября 2014 года), у каждого браузера была своя, не всегда документированная логика "починки" - одна и та же кривая страница могла выглядеть по-разному в разных браузерах.

<p>Текст абзаца.</p> - тег закрыт явно, структура однозначна для любого браузера.

<p>Текст абзаца. (без закрывающего тега) - браузер поймёт, где заканчивается абзац, только когда встретит следующий блочный тег, и не всегда так, как задумал автор.

Валидатор HTML: как проверить код и найти типичные ошибки

Валидатор W3C (validator.w3.org) проверяет код по спецификации и построчно перечисляет всё, что ей не соответствует: дублирующиеся id, отсутствующие обязательные атрибуты, неправильную вложенность тегов. Дублирующийся id - не просто формальность: document.getElementById() и CSS-селекторы по id находят только ПЕРВЫЙ подходящий элемент, а второй становится недоступен и для скриптов, и для стилей, оставаясь при этом видимым на странице.

<img src="cover.jpg" alt="Обложка книги"> - валидатор не найдёт проблем, скринридер прочитает описание.

<div id="card">...</div> ... <div id="card">...</div> - валидатор укажет на повторяющийся id, а код, обращающийся к нему по имени, найдёт только первый из двух блоков.

Из истории Первый онлайн-валидатор HTML появился 13 июля 1994 года (Дэн Коннолли и Марк Гейтер). Его более дружелюбную версию сделал Джеральд Оскобойны, и 18 декабря 1997 года W3C официально принял её как свой собственный валидатор. Но HTML5 отказалась от DTD (описания типа документа) в пользу "живого стандарта" - старый валидатор просто не мог его проверять. Решение нашли не с нуля: в ноябре 2008 года W3C встроил в свой сервис отдельно разработанный движок Nu Html Checker (validator.nu) Хенри Сивонена - именно он умеет проверять современный HTML5. Источник.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Дублирующийся id у двух элементов getElementById() и CSS-селекторы по id находят только первый элемент - второй становится недоступен из кода Делать id уникальными в пределах всей страницы
Забытый alt у img Картинка остаётся без текстового описания для скринридера, хотя визуально всё в порядке Всегда указывать alt (для декоративных картинок - пустой alt="")
Незакрытый тег, "починенный" браузером по-своему Итоговая структура страницы не всегда совпадает с тем, что задумал автор кода Закрывать теги самому, не полагаться на автопочинку браузера
Считать, что валидный HTML напрямую поднимает позицию в поиске Ожидание не подтверждается - это прямо опровергнуто представителем Google Использовать валидатор ради доступности и предсказуемости кода, а не ради ранжирования

Шпаргалка

ТерминЧто это
Валидатор W3Cvalidator.w3.org - проверяет код по спецификации, показывает построчные ошибки
Дублирующийся idНарушение спецификации - ломает getElementById() и CSS-выборку по id
alt у imgОбязателен для доступности, не влияет на отображение самой картинки
Автопочинка браузераАлгоритм разбора HTML5 (спецификация W3C с 2014 года) точно определяет, как обрабатывать даже сломанный код
Влияние на SEOВалидность НЕ является фактором ранжирования - подтверждено представителем Google

Коротко: отвечаем на вопросы

Влияет ли валидность HTML на позицию сайта в поиске Google?

Нет. Представитель Google Джон Мюллер на вебмастер-хэнгауте 14 марта 2020 года прямо сказал: валидация W3C - это то, что Google не использует при поиске. Ошибки в HTML не влияют ни на скорость загрузки, ни на ранжирование страницы.

Почему страница нормально работает, даже если в коде есть ошибки?

Потому что браузеры обязаны следовать алгоритму разбора HTML5 - части спецификации, ставшей Рекомендацией W3C 28 октября 2014 года. Он точно описывает, как обрабатывать даже сильно сломанную разметку, включая автоматическое закрытие незакрытых тегов.

Чем отличается классический валидатор W3C от проверки HTML5?

Классический валидатор сверял код с DTD - формальным описанием типа документа. HTML5 отказалась от DTD в пользу живого стандарта, и в ноябре 2008 года W3C добавил в свой сервис отдельно разработанный движок Nu Html Checker Хенри Сивонена, который умеет проверять именно HTML5.

Может ли дублирующийся id реально что-то сломать, если страница выглядит нормально?

Да. document.getElementById() и CSS-селекторы по id находят только первый элемент с таким id - второй элемент с тем же значением остаётся видимым на странице, но недоступным для скриптов и стилей, которые к нему обращаются.

Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×