В редакторе description выглядит как «Доставка & оплата», а в DOM показывается амперсанд. Это может быть правильным HTML-кодированием. Ошибка появляется при повторном экранировании или попадании в описание служебного текста. Проверяйте исходный атрибут, его разобранное значение и редакционный смысл отдельно.
Исходный HTML и DOM показывают разные представления
HTML-сущность в исходнике сама по себе не дефект. Требуется понять, какое значение получает браузер после разбора. Двойное экранирование и текст интерфейса вроде «Добавить описание» исправляйте в источнике, а не заменой всех амперсандов.
HTML character references представляют символы специальной записью, которую HTML-парсер разбирает в соответствующее значение. Официальная документация.
В HTML запись & может быть корректным представлением одного амперсанда. После разбора атрибута браузер получает соответствующий символ. Поэтому наличие сущности в исходнике не следует автоматически отмечать как дефект. Сравните два уровня: текст ответа и разобранное значение meta content. Если исходник содержит &, результат может сохранить буквальное &. Это уже другая ситуация. Описание необходимо оценивать также по смыслу: правильно закодированная фраза «Заполните это поле» всё равно является служебным текстом, а не полезным представлением страницы.
Разведите однократное и двойное экранирование
Учебные сценарии в таблице задают ожидаемое поведение; фактические ответы своего сайта заносите отдельно.
| Сценарий | Отличие | Решение | Проверка |
|---|---|---|---|
| & в исходнике | Одно экранирование | Проверить DOM | Ожидаемый амперсанд |
| & в исходнике | Двойное экранирование | Проверить генератор | Нет буквального & |
| Добавить описание | Служебный placeholder | Убрать из данных | Редакционный текст |
| Кавычки в описании | Спецсимволы | Проверить атрибут | HTML не повреждён |
В таблицу включите нормальную сущность, двойное экранирование, HTML-тег как текст и placeholder. У каждого примера своё ожидаемое DOM-значение. Добавьте кавычки и символ < в обычном описании, чтобы проверять корректность вывода атрибута. Сравнение только визуального редактора недостаточно: интерфейс CMS сам может показывать преобразованную форму. Сохраните также исходное значение поля до шаблона. Эти три представления помогают установить, где появляется лишнее кодирование: при импорте, сохранении, рендере или отображении административного интерфейса.
Получите content, а не скриншот редактора
Сравните сырой meta content, getAttribute("content") в DOM и значение поля CMS. Для подозрительных записей проверьте цепочку импорта и экранирования. Убедитесь, что HTML-разметка не попала в description как буквальный текст.
Найдите все meta[name="description"] в исходном ответе и DOM. Получите getAttribute("content") и сравните с ожидаемым обычным текстом. Если несколько элементов выдают разные описания, сначала устраните конкурирующий источник. Не судите по тому, что видно в сниппете: поисковик мог выбрать текст страницы или старую обработку. В диагностике сохраняйте конкретный URL и значения трёх уровней. Для страниц с разным языком проверьте, не приходит ли description из другой локали. Проблема шаблона может сочетаться с ошибкой данных, поэтому причины нужно разделить.
Учебный пример с амперсандом и кавычками
В учебном описании используются амперсанд и кавычки. Первый вариант кодируется один раз, второй — дважды. Сравнение DOM показывает разницу; визуальное наличие & в исходном коде не позволяет принять решение без разбора.
Подготовьте на тестовой записи описание «Доставка & оплата: условия для модели A». Сохраните его обычным текстом, затем посмотрите исходный HTML и DOM. Повторите с намеренно уже закодированным входным значением, если проверяется импорт. Ожидаемый результат должен оставаться читаемым, но HTML — безопасно сформированным. Не запускайте этот опыт глобальным декодированием опубликованных страниц. Достаточно одной тестовой записи и контроля цепочки преобразования. Если используются кавычки, убедитесь, что они не закрывают атрибут раньше времени и не создают новый случайный HTML-элемент.
Найдите слой повторного кодирования
Сохраняйте обычный текст в поле описания и экранируйте его один раз при формировании HTML. Уберите служебные заполнители из генератора, согласуйте запасное описание для отсутствующих данных.
Определите владельца экранирования. Часто импорт заранее записывает сущности, а шаблонизатор затем корректно экранирует весь текст ещё раз. Исправьте договорённость между этими слоями: в данных хранится обычная строка, на выходе применяется предусмотренное HTML-кодирование. Конкретный механизм зависит от используемой CMS. Не отключайте безопасное экранирование во всём шаблоне ради одного description. Если нужно восстановить ранее импортированные значения, составьте ограниченный список и проверьте, что реальные символы сохраняются. Для пользовательского ввода также остаются требования безопасного вывода, независимые от SEO.
Служебный текст требует редакционного решения
Глобальное декодирование всей HTML-страницы может повредить безопасный вывод. Менять нужно конкретный источник атрибута, учитывая правила используемого шаблонизатора.
Служебные фразы вроде «Описание товара», «Добавить текст» или имя внутреннего поля нужно исправлять по редакционному назначению. Декодирование не превратит их в содержательный description. Выделите записи без полезных данных и согласуйте запасное правило: краткая характеристика товара, раздела или услуги, основанная на известных фактах. Не создавайте одинаковую рекламную фразу для всех карточек. Если информации не хватает, отметьте это как задачу контента. Техническая приёмка кодирования и редакционная приёмка смысла должны иметь отдельные критерии, чтобы исправление одной ошибки не скрывало другую.
Приёмка читаемого значения и безопасного HTML
После правки проверьте обычное описание, специальные символы, пустое поле и импортированную запись. В DOM должна быть ожидаемая читаемая строка; в исходном HTML — корректный атрибут без двойного преобразования и непреднамеренных элементов. Повторите штатный импорт или сохранение CMS, чтобы исключить возврат сущностей. Сниппет поисковой системы проверяйте отдельно и с датой: он не обязан дословно использовать description. В отчёте подтвердите публичное значение, источник исправления и список записей, на который распространилась восстановительная обработка.
Критерии завершения проверки
DOM содержит читаемое описание без буквальных служебных маркеров. Исходный HTML остаётся корректно экранированным, специальные символы и кавычки не ломают атрибут.
- & в исходнике: Ожидаемый амперсанд. Зафиксируйте фактический результат и адрес проверенного сценария.
- & в исходнике: Нет буквального &. Зафиксируйте фактический результат и адрес проверенного сценария.
- Добавить описание: Редакционный текст. Зафиксируйте фактический результат и адрес проверенного сценария.
- Кавычки в описании: HTML не повреждён. Зафиксируйте фактический результат и адрес проверенного сценария.
Для смежных вопросов: Meta Description: как написать описание, увеличивающее CTR и HTML валидация: зачем проверять код и как исправить ошибки. Отдельные проверки сайта собраны на странице технического аудита reChecker.