Логотип seo-prodvizhenie-biznesa.ru
+7 (921) 333-77-45

Оптимизация html кода: инструкция

Оптимизация html кода: инструкция
Анатолий Кузнецов
Анатолий Кузнецов
SEO-оптимизатор с 20-летним стажем. Автор блога seo-prodvizhenie-biznesa.ru о продвижении и доработке сайтов.

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

В SEO с 2005 года, и за это время требования к разметке сменились дважды. Сначала имело значение всё подряд — от порядка тегов до расстояния ключевого слова от начала документа. Потом маятник качнулся в другую сторону, и появилось убеждение, что поиску вообще безразлично, как страница устроена внутри. Правда посередине и вполне конкретна: часть разметки читается роботом буквально и влияет на то, как страница попадёт в выдачу, часть влияет на отрисовку, а всё остальное — вопрос гигиены проекта. Ниже — что относится к какой категории и в каком порядке за это браться.

Зачем вообще трогать разметку

Первое, что стоит сделать, — отделить реальные эффекты от мифов, иначе работа превращается в бесконечное вылизывание без результата. У чистой разметки есть четыре следствия, и ни одно из них не звучит как «сайт выйдет в топ».

  • Робот правильно понимает структуру. Заголовки, списки и смысловые контейнеры задают иерархию документа. По ним поиск определяет, о чём страница и какая её часть основная, а какая служебная.
  • Страница отрисовывается предсказуемо. Валидная разметка одинаково достраивается в любом браузере. Кривая — достраивается по-разному, и вёрстка расходится там, где никто этого не ждал.
  • Документ весит меньше. Меньше байтов — меньше данных передаётся и разбирается браузером. Это не главный рычаг, но и не ноль, особенно на мобильной сети.
  • Сайт можно поддерживать. Разметка, в которой видно смысл блоков, правится за минуты. Разметка из вложенных друг в друга безымянных контейнеров правится за часы, и каждая правка ломает что-то ещё.

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

Замер: с чего начинать работу

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

  1. Откройте страницу и сохраните исходный код документа в файл. Посмотрите размер файла в килобайтах.
  2. Скопируйте видимый текст страницы в текстовый редактор и посмотрите количество знаков.
  3. Разделите первое на второе. Получится грубое соотношение «разметка к содержанию».
  4. Посчитайте в исходном коде число открывающих контейнеров и число строчных стилей, прописанных прямо в атрибутах.
  5. Прогоните страницу через валидатор разметки и запишите количество ошибок по типам.
  6. Повторите на трёх типах страниц: главная, страница услуги или карточка товара, статья блога.

Дальше эти цифры становятся ориентиром. По моему опыту разбора сайтов малого бизнеса, документ шаблонной страницы весом до сорока-пятидесяти килобайт — нормально, сто пятьдесят и выше — повод разбираться, откуда взялся объём. Обычно ответ один и тот же: конструктор страниц, который заворачивает каждый абзац в пять вложенных контейнеров с уникальными идентификаторами.

Смысловые теги вместо безымянных контейнеров

Главная работа по разметке — не сокращение, а осмысление. Один и тот же блок можно записать как безымянный контейнер с классом или как тег, чьё назначение известно браузеру и роботу заранее. Разница в объёме кода при этом минимальна, а разница в понятности — принципиальная.

Что за блок Как часто делают Как правильно Что это даёт
Шапка сайта Контейнер с классом header Тег header Робот отделяет служебную часть от основной
Главное меню Контейнер со списком внутри Тег nav со списком ссылок Навигация распознаётся как навигация
Основное содержание Контейнер с классом content Тег main, внутри article Ясно, где текст страницы, а где обвязка
Раздел статьи Череда абзацев с отступами Тег section с заголовком внутри Появляется иерархия вместо плоского потока
Кнопка Контейнер с обработчиком нажатия Тег button или ссылка Работает с клавиатуры и в любом браузере
Подпись к картинке Абзац мелким шрифтом под картинкой Теги figure и figcaption Связь подписи с изображением явная
Цитата Абзац курсивом Тег blockquote Цитата не путается с авторским текстом
Дата публикации Текст «12 марта» Тег time с машинным атрибутом даты Дата читается однозначно

Отдельно про кнопки. Замена настоящей кнопки на контейнер с обработчиком нажатия — самая дорогая из привычных ошибок. Такой псевдоэлемент не фокусируется с клавиатуры, не срабатывает по клавише пробела, не читается программами экранного доступа и ломается первым, если скрипт на странице упал с ошибкой. Настоящая кнопка работает без единой строки постороннего кода.

Тему разбирал отдельно: «Поисковая оптимизация интернет-сайтов».

Заголовки: единственная часть разметки, где ошибка стоит трафика

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

  • Один заголовок первого уровня на страницу. Это название документа. Два таких заголовка — это два заявления о теме страницы, и поиск получает противоречивый сигнал.
  • Заголовок первого уровня не равен названию сайта. Если на всех страницах в нём стоит имя компании, страницы становятся неразличимы по теме.
  • Уровни не пропускаются. После первого идёт второй, после второго третий. Прыжок с первого на четвёртый ломает иерархию.
  • Заголовками не оформляют оформление. Крупный текст в подвале, слоган на баннере, надпись на кнопке — это не заголовки, даже если хочется сделать их крупными. Размер задаётся стилями.
  • Заголовок описывает то, что под ним. Раздел «Наши преимущества» с текстом про доставку — это заголовок «Доставка».
  • В заголовке нет ссылки на другую страницу. Исключение — списки анонсов, где заголовок карточки ведёт на материал.

Помогу с продвижением: продвижение сайта в Яндексе — вывожу сайты в топ Яндекса белыми методами.

Проверяется всё это за минуту: в инструментах разработчика есть режим просмотра структуры документа, а в любом расширении для аудита выводится дерево заголовков. Если дерево читается как оглавление и по нему понятно, о чём страница, — работа сделана. Если в дереве восемь заголовков второго уровня подряд с текстом «Услуги», «Услуги», «Заказать» — исправлять.

Если интересно направление с сайтами — базу даю в своём курсе:

Что реально утяжеляет документ

Когда владельцу сайта говорят «сожмите код», обычно имеют в виду минификацию. Но минификация убирает пробелы и переносы строк, а вес создают совсем другие вещи. Ниже — источники объёма по убыванию вклада, в том виде, в каком я их вижу при разборе.

Источник объёма Откуда берётся Что делать
Вложенные контейнеры конструктора Визуальные редакторы страниц оборачивают каждый элемент Верстать шаблон типовых страниц руками, конструктор оставить для посадочных
Стили прямо в атрибутах элементов Тот же конструктор либо правка «на живую» Вынести в файл стилей, оставив в атрибутах только то, что действительно уникально
Изображения, вставленные прямо в код Кодирование картинок в текст ради экономии запросов Оставить так только крохотные иконки, остальное — отдельными файлами
Скрытые блоки для мобильной версии Дублирование меню и шапки под разные экраны Одна разметка, поведение задаётся стилями
Комментарии в коде и мусор плагинов Отладочные вставки, следы удалённых модулей Вычищать при сборке, а не руками
Разметка данных, продублированная трижды Тема, плагин и настройка вручную ставят своё Оставить один источник, проверить валидатором структурированных данных
Пробелы и переносы строк Форматирование исходников Минификация при отдаче — самый последний по значимости пункт

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

Смежный материал по теме — «Оптимизация сайта под мобильные устройства».

Атрибуты, которые читает поиск

Есть небольшой набор атрибутов, где ошибка меняет поведение поиска, а не внешний вид. Их стоит проверить отдельно от всего остального, потому что визуально они себя не проявляют никак.

  • Альтернативный текст изображений. Описывает, что на картинке, обычными словами. Пустой атрибут допустим для декоративных элементов, отсутствующий — нет. Перечисление ключевых слов вместо описания — вред, а не польза.
  • Указание канонического адреса. Одна страница — один канонический адрес, ведущий на саму себя или на основную версию. Две таких записи на странице обесценивают обе.
  • Атрибут языка документа. Задаётся в корневом теге. По нему определяется язык страницы и правила переноса слов.
  • Атрибут области просмотра. Без него мобильный браузер показывает страницу как настольную и уменьшает её. Это одна строка, и её отсутствие сразу лишает сайт мобильной пригодности.
  • Атрибуты ссылок. Пометка внешних и партнёрских ссылок, закрытие служебных переходов от передачи веса.
  • Атрибут заголовка страницы и описание. Формально это метаданные, но лежат они в той же разметке. Дубли заголовков по сайту — самая частая находка при разборе.
  • Отложенная загрузка изображений. Атрибут отложенной загрузки для картинок ниже первого экрана. На картинке первого экрана его ставить не нужно — она нужна сразу.

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

Разметка данных: что и когда добавлять

Структурированные данные — это не украшение, а способ прямо сообщить поиску факты о странице в машинном виде. Речь идёт о разметке организации, товара, статьи, хлебных крошек, часто задаваемых вопросов. Отдача проявляется в оформлении сниппета и в том, что данные попадают в сервисы поиска.

Три правила, нарушение которых превращает пользу во вред. Первое: размечать только то, что действительно есть на странице — цена в разметке должна совпадать с ценой на экране. Второе: не дублировать разметку, если её уже ставит тема сайта, иначе валидатор увидит два конфликтующих описания одного объекта. Третье: не размечать отзывы и рейтинги, которых нет, — это прямое нарушение правил, за которое расширенный сниппет снимают целиком.

Если нужна помощь по теме — курсы SEO-оптимизации.

Проверка делается в инструментах валидации структурированных данных у Яндекса и Google. Правильный порядок: сначала убрать ошибки, потом добавлять новые типы разметки. Добавлять разметку поверх сломанной — это ускорять путь к тому, что расширенный вид перестанут показывать вовсе.

Порядок работ: с чего начать и чем закончить

Список задач по разметке можно составить на сто пунктов и не сдвинуться с места. Ниже порядок по соотношению «эффект к трудозатратам», в котором я веду такие работы на проектах.

Если нужны детали, смотрите «Внутренняя SEO оптимизация сайта».

Очередь Что делаем Трудоёмкость Что меняется
1 Чиним иерархию заголовков на шаблонах Часы Поиск понимает тему страниц, уходят противоречивые сигналы
2 Убираем ошибки вложенности и дубли идентификаторов Часы Вёрстка перестаёт расходиться между браузерами
3 Заполняем альтернативные тексты и правим канонические адреса Дни на большом сайте Уходят дубли, картинки начинают участвовать в поиске по изображениям
4 Заменяем безымянные контейнеры смысловыми тегами в шаблоне Дни Структура документа становится читаемой, шаблон легче поддерживать
5 Выносим строчные стили в общий файл Дни Документ худеет, оформление перестаёт разъезжаться при правках
6 Добавляем и валидируем структурированные данные Дни Сниппет оформляется богаче
7 Настраиваем сжатие и минификацию при отдаче Часы Небольшой выигрыш в объёме передаваемых данных

Работы с первой по третью строку окупаются почти всегда и почти на любом сайте. Четвёртая и пятая имеют смысл, когда сайт живёт и правится регулярно: они экономят не столько трафик, сколько ваши будущие часы. Шестая нужна там, где сниппет конкурентов уже оформлен богаче вашего. Седьмая ставится один раз на сервере и забывается.

Ошибки, которые делают чаще всего

  • Минификация как единственная мера. Сжали пробелы, отчитались об оптимизации, оставили нетронутыми двадцать уровней вложенности.
  • Ключевые слова в альтернативных текстах. Перечисление запросов вместо описания картинки — приём двадцатилетней давности, который сейчас работает только против сайта.
  • Заголовки ради размера шрифта. Самый распространённый способ сломать иерархию документа, ничего не подозревая.
  • Скрытый текст «для роботов». Блок, спрятанный стилями, который якобы усиливает страницу. Это нарушение, за которое санкции накладываются на весь сайт.
  • Ручная минификация исходников. Сжатые файлы кладут в репозиторий вместо того, чтобы сжимать при сборке. В результате код невозможно править, и любая правка делает страницу хуже.
  • Правки в шаблоне темы без дочерней темы. Обновление платформы стирает всё сделанное, и работа выполняется заново.
  • Оптимизация одной страницы. Разметка живёт в шаблонах. Починили главную — на остальных тысячах страниц ничего не изменилось.

Частые вопросы

Влияет ли вес разметки на позиции? Напрямую — нет. Косвенно влияет через время отрисовки и через то, насколько уверенно робот определяет основное содержимое страницы. Разница между сорока и ста пятьюдесятью килобайтами документа заметна на медленной мобильной связи, разница между сорока и тридцатью восемью — нет.

Обязательно ли добиваться нуля ошибок в валидаторе? Нет, и в реальности это почти недостижимо. Важны три типа: незакрытые блочные теги, повторяющиеся идентификаторы элементов и блочные элементы внутри строчных. Устаревшие атрибуты и мелкие замечания можно оставить.

У меня сайт на конструкторе, разметку не поменять. Что делать? Часть работ доступна и там: иерархия заголовков, альтернативные тексты, заголовки и описания страниц, отключение неиспользуемых блоков и виджетов. Глубокая перевёрстка шаблона — нет. Если разметка конструктора мешает настолько, что это видно в замерах, вопрос переходит из плоскости оптимизации в плоскость смены платформы.

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

Сколько заголовков второго уровня должно быть на странице? Столько, сколько у страницы смысловых разделов. Для карточки товара это два-три, для развёрнутой статьи — восемь-десять. Числа как нормы не существует, существует требование, чтобы дерево заголовков читалось как оглавление.

Стоит ли убирать из разметки всё, что не видно посетителю? Не всё: часть невидимого нужна — метаданные, структурированные данные, атрибуты доступности. Убирать надо мусор: комментарии, остатки удалённых модулей, отладочные вставки и скрытые дубли блоков, оставшиеся от прошлых версий шаблона.

Коротко

  • Начинать нужно с замера: вес документа, соотношение разметки к тексту, число ошибок валидатора на трёх типах страниц.
  • Самый большой вклад в объём дают вложенные контейнеры конструктора и строчные стили, а не пробелы; минификация — последний пункт списка, а не первый.
  • Иерархия заголовков — единственная часть разметки, где ошибка стоит трафика напрямую: один заголовок первого уровня, без пропуска уровней, без оформления заголовками.
  • Смысловые теги вместо безымянных контейнеров дают роботу понятную структуру, а вам — шаблон, который можно править без страха.
  • Атрибуты, невидимые на экране, проверяются обходом сайта краулером: пустые альтернативные тексты, дубли заголовков, конфликтующие канонические адреса.
  • Структурированные данные добавляются только на то, что реально есть на странице, и только после устранения ошибок в уже имеющейся разметке.

Если непонятно, что именно на вашем сайте стоит править в первую очередь — разметку, структуру под спрос или техническую часть, — приходите на SEO-консультацию: посмотрим шаблоны страниц и данные Вебмастера вместе и составим список работ в порядке окупаемости.

Увеличьте позиции и продажи вашего сайта

Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:

Анатолий Кузнецов — SEO-оптимизатор

Остались вопросы по продвижению?

Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.

Связаться со мной →

Комментарии

Владислав Макридин

Сделал замер по вашей методике. Страница услуги: документ 214 килобайт, видимого текста четыре тысячи знаков. Полез в исходный код и обалдел — каждая строчка текста завёрнута в четыре контейнера, у каждого свой уникальный идентификатор и строчные стили на пятнадцать свойств. Это конструктор страниц. Переделывать весь сайт нереально. Что можно вытащить хотя бы частично?

Анатолий Кузнецов автор

Полностью переделывать и не нужно, разделите страницы на две группы. Первая — типовые: карточки, страницы услуг, статьи блога. Их обычно десятки или сотни, и все они собираются из одного шаблона. Именно шаблон и стоит перевести на обычную вёрстку, конструктор оттуда убрать: это одна работа, а эффект получат все страницы группы сразу. Вторая группа — единичные посадочные и главная, где важна визуальная сборка руками. Их оставьте как есть, там объём кода не критичен, потому что страниц мало. Отдельно проверьте, не грузятся ли на всех страницах сайта стили и скрипты конструктора даже там, где его блоков нет: в половине случаев их можно отключить условием и снять заметный кусок веса без единой правки разметки. И начните всё равно не с этого, а с дерева заголовков — на страницах конструктора оно чаще всего сломано, а чинится в его же интерфейсе.

Алевтина Мосейчук

Про заголовки ради размера шрифта — прямо в точку. У нас дизайнер оформлял так весь подвал, там оказалось шесть заголовков второго уровня подряд: «Контакты», «Мы в соцсетях», «Оплата». И это на каждой странице сайта. Никто годами не замечал.

Тимур Наврузов

Не понимаю логику про альтернативные тексты. Если робот не видит картинку, то откуда ему знать, что там? Значит, он верит тому, что написано в атрибуте. Тогда почему нельзя написать туда запрос, под который двигаем страницу? Это же ровно то, что он и просит.

Анатолий Кузнецов автор

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

Галина Немилова

Добавлю про разметку данных. Мы поставили плагин для отзывов, он сам добавлял рейтинг в разметку. Потом поставили тему, которая делала то же самое. Полгода жили с двумя описаниями одного объекта, звёздочки в выдаче то появлялись, то пропадали. Нашли только когда прогнали через валидатор.

Родион Метлицкий

Вопрос про порядок из таблицы. У меня магазин на восемь тысяч товаров, у половины карточек альтернативные тексты пустые. Заполнять руками — это месяцы. Разработчик предлагает сгенерировать по шаблону из названия товара. Это считается нормальным решением или это тот самый спам ключами?

Анатолий Кузнецов автор

Генерация по шаблону из названия товара — нормальное решение для каталога, и спамом это не является: название товара и есть честное описание того, что на картинке. Но два уточнения. Первое: если у товара несколько изображений, одинаковый текст на всех пяти — плохо, добавляйте в шаблон различитель по порядковому номеру или по ракурсу, если он есть в данных. Второе: не вставляйте в шаблон коммерческие довески вроде «купить» и города — вот это уже превращает описание в запрос. Формула «название товара плюс бренд плюс, при наличии, цвет или размер» покрывает задачу целиком. И проверьте после генерации выборку из тридцати карточек глазами: в каталогах часто попадаются товары с мусорными названиями из выгрузки, и шаблон размножит этот мусор по всем изображениям.

Ксения Мещанова

Раздел про кнопки заставил проверить свой сайт. Действительно, кнопка «Заказать» сделана контейнером с обработчиком. Проверила клавиатурой — до неё вообще нельзя добраться табуляцией. При этом внешне всё выглядит как кнопка. Отправила разработчику, посмотрим, что скажет.

Артём Молодкин

Спорный, на мой взгляд, момент — что минификация даёт единицы процентов. У нас после сжатия и включения компрессии на сервере документ уменьшился втрое. Разве это единицы процентов? Или вы имели в виду только минификацию без компрессии?

Анатолий Кузнецов автор

Именно так, вы объединили две разные вещи. Сжатие при передаче — это компрессия на стороне сервера, и она действительно даёт кратное уменьшение объёма, потому что разметка очень хорошо сжимается из-за повторов. Минификация — это удаление пробелов и переносов из самого файла, и поверх уже включённой компрессии её вклад невелик: то, что вы убрали руками, алгоритм сжатия всё равно упаковал бы почти бесплатно. Отсюда практический вывод: компрессию включить обязательно, это одна строка в настройках сервера и самый выгодный пункт во всей теме. А минификацию ставить последней и не ждать от неё чудес. Кстати, проверьте заодно, что компрессия работает не только для разметки, но и для стилей, скриптов и файлов шрифтов — на настройках по умолчанию часть типов файлов нередко остаётся неохваченной.

Вера Никишова

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

Станислав Мочульский

Прогнал сайт краулером, как советуете. Нашёл сорок страниц, где канонический адрес указывает на главную. Это страницы фильтров каталога. Разработчик говорит, что так и задумано, чтобы не было дублей. Мне кажется, что это неправильно, но аргументов не хватает.

Анатолий Кузнецов автор

Вы правы, а разработчик перепутал два инструмента. Указание канонического адреса означает «эта страница — версия вон той же самой страницы». Между страницей фильтра и главной такого отношения нет: содержимое разное, назначение разное. Поиск в таких случаях обычно игнорирует некорректное указание, но иногда следует ему, и тогда сорок страниц просто исчезают из индекса. Для фильтров есть три правильных сценария в зависимости от того, есть ли на них спрос. Если по сочетанию фильтров люди ищут — страница делается посадочной, с собственным заголовком и текстом, и канонический адрес указывает на неё саму. Если спроса нет — страница закрывается от индексирования служебным указанием, но остаётся доступной для посетителей. Если фильтр просто пересортировывает то же самое — вот тогда канонический адрес ставится на исходную категорию, а не на главную. Начните с проверки спроса в Вордстате по десятку самых частых сочетаний — это разложит сорок страниц по трём группам за час.

Полина Наперова

Про атрибут области просмотра. Наш старый сайт был сделан в те годы, когда телефонов ещё не считали, и этой строки в нём не было вообще. Добавили — и сайт мгновенно перестал показываться уменьшенной копией на телефоне. Одна строка, а разница как между двумя разными сайтами.

Игорь Мулин

Не хватило в статье про изображения, вставленные прямо в код. У нас тема так делает со всеми иконками, и документ раздувается до полутора мегабайт на некоторых страницах. Понял, что надо выносить, но не понял, где проходит граница между «крохотной иконкой» и тем, что надо выносить.

Дарья Ныркова

Забрала таблицу с порядком работ как план на квартал. Особенно ценно, что расписана трудоёмкость: раньше подрядчик подавал всё одним куском «техническая оптимизация» с общей ценой, и понять, что там на часы, а что на недели, было невозможно. Теперь есть с чем сверять смету.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 Нажимая «оставить комментарий» вы принимаетеправила конфиденциальности 

Прокрутить вверх