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