Загрузка...
Загрузка...
Топ ошибок HTML: незакрытые теги, дубли id, отсутствие alt, неверная вложенность. Примеры и готовые решения.
Руководство по HTML валидации: зачем нужна проверка, инструменты W3C, типы ошибок и предупреждений, влияние на SEO и доступность.
SEOПошаговое руководство по поиску и исправлению ошибок 404. Инструменты диагностики, настройка редиректов, кастомные страницы 404. Влияние на SEO и пользователей.
SEOСвязь между качеством HTML-разметки и SEO: парсинг, доступность, Core Web Vitals. Какие ошибки критичны, какие — нет.
SEOСправочник HTTP статус-кодов для SEO и веб-разработки. Значение кодов 2xx, 3xx, 4xx, 5xx. Влияние на индексацию и рекомендации по настройке.
Поделитесь с коллегами или изучите другие материалы блога
Большинство ошибок HTML на сайтах повторяются. В этой статье — самые частые проблемы, которые находит валидатор, и как их исправить.
Ошибка: элемент img должен иметь атрибут alt.
<!-- Неправильно -->
<img src="product.jpg">
<!-- Правильно: информативное изображение -->
<img src="product.jpg" alt="Смартфон Samsung Galaxy S24 в синем цвете">
<!-- Правильно: декоративное изображение -->
<img src="decoration.svg" alt="">
Почему важно: alt нужен для доступности (скринридеры) и SEO. Пустой alt — для декоративных картинок. Подробнее — в руководстве по alt-тегам.
Ошибка: значение атрибута id не должно повторяться в документе.
<!-- Неправильно -->
<div id="content">...</div>
<div id="content">...</div>
<!-- Правильно -->
<div id="main-content">...</div>
<div id="sidebar-content">...</div>
Почему важно: id должен быть уникальным. Дубли ломают якорные ссылки, JavaScript и доступность.
Ошибка: элемент div не может находиться внутри элемента p.
<!-- Неправильно -->
<p>Текст <div>блок</div> продолжение</p>
<!-- Правильно -->
<p>Текст</p>
<div>блок</div>
<p>продолжение</p>
<!-- Или, если нужен inline -->
<p>Текст <span>часть</span> продолжение</p>
Почему важно: по спецификации HTML <p> может содержать только фразовый контент. Браузер автоматически закрывает <p> перед <div>, что может сломать вёрстку.
Ошибка: конец файла достигнут при открытом элементе.
<!-- Неправильно -->
<div class="container">
<p>Текст
<ul>
<li>Пункт 1
<li>Пункт 2
</ul>
</div>
<!-- Правильно -->
<div class="container">
<p>Текст</p>
<ul>
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>
</div>
Почему важно: незакрытые теги приводят к некорректному дереву DOM. Браузер «додумывает» структуру, результат может отличаться между браузерами.
Ошибка: вложенная ссылка недопустима.
<!-- Неправильно -->
<a href="/page1">
<a href="/page2">Ссылка</a>
</a>
<!-- Правильно -->
<a href="/page1">Текст</a>
<a href="/page2">Ссылка</a>
Почему важно: вложенные ссылки запрещены спецификацией. Поведение при клике непредсказуемо.
Ошибка: для input type="text" атрибут type может быть опущен, но для других типов обязателен.
<!-- Неправильно: input без type -->
<input name="email">
<!-- Правильно -->
<input type="email" name="email">
В HTML5 для type="text" атрибут можно опускать, но явное указание улучшает читаемость и валидацию.
Ошибка: атрибут href у элемента a не должен быть пустым.
<!-- Неправильно -->
<a href="">Ссылка</a>
<!-- Правильно: якорь на текущую страницу -->
<a href="#">Ссылка</a>
<!-- Правильно: кнопка вместо ссылки -->
<button type="button">Действие</button>
Если элемент не ведёт на другую страницу, рассмотрите использование <button> вместо <a>.
Предупреждение: атрибут устарел, используйте CSS.
<!-- Устарело -->
<table border="1" cellpadding="10" cellspacing="0">
<font size="3" color="red">Текст</font>
<center>Контент</center>
<!-- Современно -->
<table style="border: 1px solid; border-collapse: collapse;">
<span style="font-size: 1rem; color: red;">Текст</span>
<div style="text-align: center;">Контент</div>
Лучше выносить стили в CSS-файл.
Предупреждение: пропуск уровней заголовков (h1 → h3 без h2).
<!-- Неправильно -->
<h1>Заголовок</h1>
<h3>Подзаголовок</h3>
<!-- Правильно -->
<h1>Заголовок</h1>
<h2>Подзаголовок</h2>
Иерархия заголовков важна для SEO и доступности.
Ошибка: недопустимый символ в атрибуте.
<!-- Неправильно -->
<input placeholder="Введите "имя"">
<!-- Правильно -->
<input placeholder="Введите "имя"">
<!-- Или -->
<input placeholder='Введите "имя"'>
Кавычки внутри значения атрибута нужно экранировать или использовать другой тип кавычек.
| Ошибка | Действие |
|---|---|
| Нет alt | Добавить осмысленный alt или alt="" |
| Дубли id | Переименовать, сделать уникальными |
| div в p | Заменить на span или вынести div |
| Незакрытые теги | Добавить закрывающие теги |
| a в a | Разделить на отдельные ссылки |
| input без type | Указать type |
| href="" | Использовать # или button |
| Deprecated | Заменить на CSS |
| Заголовки | Соблюдать иерархию h1–h6 |
| Кавычки | Экранировать или менять тип |
После правок проверьте страницу:
Подробнее о валидации и её влиянии — в руководстве по HTML валидации.
<!-- Неполно -->
<form>...</form>
<!-- Правильно -->
<form action="/submit" method="post">...</form>
<!-- Неоднозначно -->
<button>Отправить</button>
<!-- Явно -->
<button type="submit">Отправить</button>
Без type кнопка может вести себя как submit по умолчанию, но явное указание улучшает предсказуемость.
<!-- Правильно -->
<label for="email">Email</label>
<input id="email" type="email" name="email">
<!-- Или обёртка -->
<label>
<input type="checkbox" name="agree"> Согласен с условиями
</label>
<!-- Ошибка -->
<img src="" alt="Фото">
<!-- Исправление: либо валидный src, либо не показывать -->
<img src="photo.jpg" alt="Описание">
Некоторые инструменты (HTML Tidy, Prettier с плагинами) могут автоматически исправлять часть ошибок: закрывать теги, исправлять вложенность. Используйте с осторожностью — автоматика может изменить логику вёрстки.
Большинство ошибок HTML исправляются за минуты: добавить alt, закрыть теги, убрать дубли id, исправить вложенность. Регулярная проверка через HTML валидацию reChecker помогает поддерживать код в порядке.