Техническая оптимизация сайта, часть первая

Пошаговый план от руководителя оптимизаторов в «Ашманов и партнёры» Никиты Тарасова.

В закладки

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

В первой части статьи разберём:

Оптимизация URL-адресов страниц сайта

Для правильной индексации важно, чтобы страницы сайта отражали его структуру. Поэтому уровни вложенности URL должны соответствовать уровню вложенности страниц относительно корня сайта. Но не стоит впадать в крайность и делать адреса c пятью уровнями вложенности и более.

При формировании адресов следует придерживаться простых правил:

  • Исключить из адресов все специальные символы вроде «?», «=», «&».

  • Использовать цифры в псевдостатических адресах можно без ограничений.

  • В качестве разделителя слов в адресе лучше использовать символ «-» (дефис).

  • Использовать в адресах транслитерированные ключевые слова, которые в точности соответствуют контенту страницы.
  • Использовать в адресах только строчные латинские символы, не кириллицу.

Возьмём в качестве примера интернет-магазин мебели. В каталоге магазина существует раздел «Угловые диваны». Правильный URL-адрес этого раздела выглядит так: domain.ru/catalog/uglovye-divany/.

Частая проблема, особенно среди интернет-магазинов, — когда одна страница доступна по нескольким адресам. Например, для одного товара создают несколько адресов в зависимости раздела, в котором он расположен. С точки зрения поисковых систем такие страницы считаются дублями и негативно влияют на индексацию.

Некоторые решают эту проблему при помощи тега link с атрибутом rel=”canonical”. Но этот тег служит рекомендательным и не всегда учитывается поисковыми системами. Лучше задать универсальный адрес. Например, адрес карточки товара для условного дивана «Амстердам» будет выглядеть так: domain.ru/product/amsterdam.

Внедрение данного алгоритма формирования псевдостатических адресов для страниц карточек товаров позволит:

  • Избежать чрезмерного уровня вложенности в структуре URL и положительно скажется на индексации.
  • Устранит риск возникновения дублей.

Важно: после внедрения или корректировки псевдостатической адресации со всех старых URL на новые настройте редиректы 301. При переходе на страницы по новым адресам сервер не должен выдавать промежуточный код ответа 301. В ответ на запрос страницы сервер должен выдавать содержимое страницы с кодом ответа 200 без перенаправлений.

Поиск и устранение «зеркал» сайта

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

«Зеркала» обычно возникают по следующим причинам:

  • Когда несколько доменов привязаны к одному физическому сайту (набору файлов на хостинге).
  • Когда есть служебные домены, автоматически генерируемые хостингом.
  • Когда домен с указанием порта (например, domain.ru:8080).
  • Из-за IP-адреса (например, если сайт доступен по IP 192.168.1.1).

Несколько шагов, которые помогут обнаружить дубли:

  • Проверьте сайт с помощью сервисов для поиска «зеркал» и индексированных доменов.
  • Определите IP-адрес сайта (например, в 2ip).
  • Выгрузите источники по страницам входа из «Яндекс.Метрики» в таблицу Excel (ставим точность 100% и временной интервал около десяти лет).
Пример выгрузки источников по страницам входа из «Яндекс.Метрики​»

Первый столбец данных из «Яндекс.Метрики» нужно скопировать в отдельную вкладку и объединить с данными, которые мы получили в ходе первых двух шагов. Затем в таблице с помощью функции «Заменить на» удалите протоколы HTTP и HTTPS и префиксы WWW. Затем из списка нужно удалить дубли.

Далее, при помощи SeoAG генерируем список всех возможных сочетаний (с WWW и без, с HTTP и без, c HTTPS и без) при помощи функции {http:|https:}{//|//www.}{domain1.ru|domain2.ru}, где domain1.ru|domain2.ru — уникальный список доменов, полученный ранее. Добавляем список доменов при помощи «Мастер ввода».

Пример генерации списка доменов при помощи SEO Anchor Generator​

Затем сгенерированный список доменов добавляем в Screaming Frog Seo Spider и переключаемся в режим List. Настраиваем учёт директив robots.txt. Загружаем итоговый список доменов.

Далее все URL c кодом ответа 200 Ok проверяем вручную и выясняем, что именно находится по таким адресам.

Пример импорта списка доменов в ​Screaming Frog Seo Spider для проверки

Найти зеркало можно с помощью поиска по текстовым фрагментам. Для этого необходимо ввести часть текста с сайта (пять-восемь слов, идущих подряд) в поисковую строку и заключить их в кавычки.

Пример поиска зеркала сайта по текстовым фрагментам

Список зеркал нужно закрыть от индексации, разместив в корне каждого из них файл robots.txt следующего содержания:

User-agent: * Disallow: /

В случае с доменными алиасами нужно настроить постраничный редирект 301 с дубля на соответствующий сайт.

Корректировка robots.txt

Данный файл содержит набор директив, позволяющих управлять индексацией сайта. Например, указывать поисковым системам, какие директории сайта должны присутствовать в поиске, а какие нет.

В файле robots.txt закрывают от индексации служебные страницы:

  • Версии для печати.
  • Корзины товаров.
  • Авторизацию, регистрации, личные кабинеты.
  • Сортировки.
  • Страницы с UTM-метками.

Сервис Screaming Frog Seo Spider поможет определить, какие ещё страницы стоит исключить из индексации. В данном случае помогут фильтры по дублям метатегов title/h1/description.

Фильтр по дублям метатегов title/h1/description в программе Screaming Frog Seo Spider

Часто большая часть служебных страниц имеет дублирующиеся метатеги.

Ещё стоит выгрузить проиндексированные страницы сайта из сервиса «Яндекс.Вебмастер» и проверить, какие из них стоит исключить из индекса.

​Проиндексированные страницы в «Яндекс.Вебмастере»

Одним из требований поисковых систем служат открытые для индексации файлы JavaScript и CSS, изображения. Определить список ресурсов, которые необходимо открыть для индексации, можно при помощи сервиса от Google.

Актуальные требования основных поисковых систем к файлу robots.txt можно найти в справочных «Яндекса» и Google.

Есть ещё несколько распространённых ошибок. Например, если проект разрабатывают с нуля или переделывают на тестовом домене (например, test.domain.ru или dev.domain.ru), то разработчики часто забывают закрыть тестовую версию сайта от индексации.

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

Пример тестовых версий сайтов в выдаче «Яндекса​»

Тестовую версию сайта следует закрывать от индексации при помощи следующего набора директив.

User-Agent: * Disallow: /

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

После переноса сайта с тестового домена на основной или завершения разработки всегда проверяйте содержимое файла robots.txt.

На текущий момент существуют такие средства отладки robots.txt:

  • Редактор в кабинете «Яндекс.Вебмастера». В него можно загрузить актуальный файл и проверить, какие директивы он разрешает или запрещает индексировать поисковым роботам.
  • Либо можно воспользоваться встроенным отладчиком сервиса Screaming Frog Seo Spider.

Определение и устранение дублей страниц

Дубли — точные копии страниц сайта, доступные одновременно по нескольким адресам.

Типичные примеры:

Варианты дублей могут варьироваться в зависимости от системы управления вашего сайта. От дублей нужно избавляться, и все страницы сайта следует привести к единому виду, например https://www.domain.ru/.

Выбор вида страниц для индексации зависит от того, насколько много страниц этого вида уже находится в индексе поисковых систем.

Для убирания дублей со всех остальных адресов страниц существует несколько способов (можно воспользоваться одним из них или скомбинировать несколько):

  1. Настройте редирект 301 на конечный вид страницы.
  2. Скорректируйте настройки сервера таким образом, чтобы при запросе дублей сервер выдавал код ответа 404 Not Found.
  3. Закройте дубли страниц от индексации в robots.txt.

Работа сайта при отключённом JavaScript

Для индексации важно, чтобы контент и основные ссылки на страницах были доступны при отключенном JavaScript. Тогда поисковые системы могут проиндексировать информацию на страницах полностью и правильно определить её ссылочный вес.

Существует два основных способа проверки работы сайта с отключенным JavaScript.

Плагин One-Click JavaScript Toggle или аналог

Если после отключения JS вы видите на сайте белый экран, это не значит, что сайт не работает при отключённых скриптах. Возможно, просто «поехала» вёрстка. Если после отключения JS на странице пропали важные элементы (карточки товаров, цены), стоит открыть исходный код страницы и при помощи поиска найти элементы по фрагментам текста.

Сервис Browseo

Выясните, какой контент не выводится на странице и насколько это критично.

Обработка ошибки 404

Иногда ошибка 404 обрабатывается некорректно и для несуществующей страницы выдаётся, например, код 200 Ok. В подобных случаях могут возникнут проблемы с индексацией страниц вплоть до того, что сайт полностью выпадет из поиска.

Так как сайты обычно состоят из шаблонов страниц, то для проверки корректной обработки ошибки 404 достаточно добавить метку test к каждой из страниц:

  • Главная: https://domain.ru/test/
  • Категория или подкатегория: https://domain.ru/catalog/category/test/
  • Страницы карточки: https://domain.ru/product/name-product/test/
  • Страница пагинации: https://domain.ru/catalog/category/page-test/
  • Служебные страницы: https://domain.ru/page/test/

А затем проверить код ответа для каждой страницы из списка в Screaming Frog Seo Spider.

Настройте сервер так, чтобы при обращении к несуществующей странице он выдавал ответ HTTP/1.1 404 Not Found без перенаправлений.

Проработайте страницу, выдаваемую пользователю при ошибке 404, так, чтобы она была информативной и имела ссылки на основные разделы меню и главную страницу сайта.

О чём пойдёт речь во второй части

Далее мы разберём:

  • Скорость загрузки сайта.
  • Оптимизацию под мобильные устройства.
  • Страницы пагинации.
  • Битые ссылки и редиректы.
  • Микроразметку.
  • Использование тега meta name="robots" content="…".
  • Распределение ссылочного веса по страницам сайта.
  • Использование тега noindex, внутреннюю перелинковку и другие аспекты технической оптимизации.

Рекомендации по теме

Для погружения в тему технической оптимизации советую ознакомиться с чек-листом, опубликованным в блоге Texterra. Также рекомендую чек-лист от Collaborator в онлайне, который поможет фиксировать внесённые коррективы и оценивать проделанный объём работ относительного всех предстоящих задач.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Ашманов и партнеры", "author_type": "self", "tags": ["\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f"], "comments": 14, "likes": 16, "favorites": 175, "is_advertisement": false, "subsite_label": "seo", "id": 82301, "is_wide": false, "is_ugc": true, "date": "Thu, 12 Sep 2019 15:51:02 +0300", "is_special": false }
0
{ "id": 82301, "author_id": 125246, "diff_limit": 1000, "urls": {"diff":"\/comments\/82301\/get","add":"\/comments\/82301\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/82301"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199127, "last_count_and_date": null }
14 комментариев
Популярные
По порядку
Написать комментарий...
5

Без воды и по делу. Продолжайте :)

Ответить
2

Спасибо, будет еще материал

Ответить
0

Разве сервис руки не вода?)

Ответить
0

В статье данный сервис нигде не упоминался)

Ответить
2

Вопрос??

Если страницы корзины, авторизации, регистрации скрыты тегами NOINDEX, NOFOLLOW то их в файле robots.txt не надо скрывать?

Ответить
1

Да -использование  тега <meta name="robots" content="noindex, nofollow"/>  аналогично запрету от индексации в robots.txt. За исключением того что при использовании meta robots с атрибутом nofollow - поисковые роботы не будут переходить по внутренним ссылкам, размещенным со страниц корзины, авторизации, регистрации

Ответить
2

Ссылку на чек-лист Texterra поправьте

Ответить
0

Поправили. Спасибо!

Ответить
1

Вот рассудите! Я всегда открываю страницы пагинации в интернет-магазинах. Многие коллеги закрывают.

Конечно же когда я открываю, настраиваю атрибуты next и prev, каноникал и правлю мета-теги (номер страницы).

Как делаете вы?

Ответить
2

Согласен, что страницы пагинации нужно открывать для индексации - так как с их помощью поисковые роботы могут индексировать документы, находящиеся на более глубоком уровне вложенности.

Касательно next и prev - Goolge отказался от этих атрибутов https://twitter.com/googlewmc/status/1108726443251519489 поэтому в их использовании нет необходимости

По оптимизации страниц пагинации:

1. Со второй и последующих страниц пагинации, например http://domain.ru/category/?PAGEN_1=2 необходимо проставить тег rel=”canonical” на первую страницу пагинации. Проставлять тег canonical рекомендует сам Яндекс - https://yandex.ru/blog/platon/2878

2. На второй и последующих страницах пагинации необходимо настроить генерацию заголовка title по следующему шаблону

/h1/ - страница /N/ из /page_last/

где h1 содержимое соответствующего тега на странице, page_last – указывает на суммарное число страниц в разделе. 

Ответить
1

Некоторые решают эту проблему при помощи тега link с атрибутом rel=”canonical”. Но этот тег служит рекомендательным и не всегда учитывается поисковыми системами. Лучше задать универсальный адрес. Например, адрес карточки товара для условного дивана «Амстердам» будет выглядеть так: domain.ru/product/amsterdam.

Обновите знания!:

Опровергаю - Правильно ставить каноникал на одну карточку в разных категориях. Яндекс пишет что неконанические страницы могут быть полезны и он учитывает. А насколько я помню SEO это получение трафика. Занижать страницы каноникал они не будут. По теме не вру https://webmaster.yandex.ru/blog/nekanonicheskie-stranitsy-v-poiske

Ответить
2

Не соглашусь с Вами

В статье речь идет о устранении полных дублей, когда один и тот же товар доступен по разным URL адресам

domain.ru/catalog/category1/amsterdam/ и domain.ru/catalog/category2/amsterdam/

Для устранения подобного вида дубликатов рекомендуется использовать универсальный URL domain.ru/product/amsterdam/

Не вижу смысла плодить дубли и устранять их посредством canonical. Если даже проставлять canonical - часть краулингового бюджета будет расходоваться не переобход таких страниц. Особенно актуально для крупных ресурсов, где количество страниц идет на десятки и сотни тысяч

В статье же Яндекса говорится о неканонических страницах с различающимся контентом

Ответить
0

Для огромных сайтов конечно это выход. 

Но лучше пытаться сохранить структуру. Например можно сделать так. 

Если у вас один диван относиться и к белым и к кожаным и к офисным то URL карточки лучше оставить домен/диваны/белый диван.

Структура важна. При использовании метода domain.ru/product/amsterdam/ все товары попадут в категорию product. И получается для ПС на сайте будет одна категория а сами категории не будут иметь вес, так как в них по структуре нет товаров. 

Ваш метод несомненно подходит, но я бы не рискнул.

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ] { "page_type": "default" }