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

Индексация базы данных

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

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

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

Почему поисковик не видит содержимое базы

Данные крупного сайта хранятся в реляционной базе — MySQL, PostgreSQL, MS SQL. Это удобно: записи легко добавлять, править, связывать между собой и отдавать по запросу. Но поисковый робот к базе не подключается. У него нет ни доступа к серверу базы, ни возможности выполнить запрос к таблице, ни представления о том, какие таблицы там есть.

Робот умеет ровно одно: запросить адрес по протоколу HTTP и получить в ответ страницу. Всё, что он знает о вашем сайте, он узнал из адресов, которые ему кто-то дал: ссылки на страницах, карта сайта, внешние ссылки с других ресурсов. Записи в базе становятся страницами только в тот момент, когда движок собирает их в HTML по конкретному адресу. Нет адреса — нет страницы, сколько бы данных ни лежало в таблице.

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

Содержимое Видит ли робот Почему
Запись, доступная по своему адресу, на который есть ссылка Да Робот перешёл по ссылке и получил HTML
Запись, доступная по адресу, но без единой ссылки Практически нет Адрес неоткуда взять, если он не в карте сайта
Результат внутреннего поиска по сайту Нет Робот не вводит слова в форму
Данные, подгружаемые только после клика Чаще нет Клик — действие пользователя, робот его не совершает
Содержимое, доступное после авторизации Нет Робот не заполняет форму входа
Записи, выводимые только на карте или в интерактивном виджете Нет Нет обычных ссылок в разметке

Что робот обходит на самом деле

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

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

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

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

Внутренний поиск: ловушка крупных сайтов

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

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

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

Ошибка усугубляется, когда владелец, не понимая механики, пытается решить проблему разрешениями в robots.txt. Разрешение доступа ничего не меняет: дело не в запрете, а в отсутствии ссылок. Более того, страницы результатов внутреннего поиска правильнее как раз закрывать от индексации — иначе робот, найдя случайные ссылки с параметрами поиска, начнёт плодить бесконечные однотипные адреса и потратит на них ресурс обхода.

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

Как вывести содержимое базы в ссылки

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

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

  1. Иерархический каталог. Разделы, подразделы, страницы записей. Классика, которая работает лучше всего: путь короткий, вес распределяется предсказуемо, человеку понятно, где он находится.
  2. Алфавитные и тематические указатели. Для справочников и энциклопедий: страница на каждую букву, внутри — ссылки на записи. Генерируется автоматически из той же базы.
  3. Карта сайта в формате XML. Список адресов, отдаваемый роботу напрямую. Один файл вмещает до пятидесяти тысяч адресов, дальше делается индексный файл со ссылками на части.
  4. Перелинковка между записями. Блоки «похожие», «из этого же раздела», «следующая запись» связывают карточки друг с другом и вытаскивают из изоляции глубоко лежащие.
  5. Страницы-сборники под спрос. Подборки, собранные из базы по признаку, который люди ищут: по назначению, по параметру, по региону. Дают и ссылки, и посадочные страницы одновременно.
Способ Что решает Ограничение
Иерархический каталог Основной путь обхода и понятная структура Требует продуманной классификации записей
Алфавитный указатель Доступ к массиву однотипных записей Плохо работает без деления на подстраницы
Карта сайта XML Сообщает роботу адреса напрямую Не заменяет ссылки: адрес известен, но вес не передаётся
Перелинковка карточек Вытаскивает страницы-сироты Нужен алгоритм подбора, иначе блоки однообразны
Сборники под спрос Даёт посадочные страницы и ссылки сразу Требует анализа спроса, иначе плодятся пустышки

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

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

Пагинация и подгрузка: где теряются страницы

Списки в каталогах редко помещаются на один экран, и способ их разбивки прямо определяет, дойдёт ли робот до глубины. Три распространённых варианта ведут себя по-разному.

Обычная пагинация ссылками. Страницы вида «/razdel/2/», «/razdel/3/» с обычными ссылками в разметке. Самый надёжный вариант: робот проходит по номерам и собирает все карточки. Единственное требование — чтобы ссылки на соседние страницы присутствовали в исходном коде, а не появлялись после клика.

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

Смежный материал по теме — «Индексация сайта: что это такое и как она работает».

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

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

Фильтры каталога: что открывать, а что закрывать

Фильтры — обратная сторона проблемы. Если раньше речь шла о том, что робот не видит нужного, то здесь он видит слишком много: каждое сочетание параметров порождает адрес, и на среднем каталоге таких сочетаний миллионы. Робот честно обходит их, тратит на это ресурс и находит на большинстве почти одинаковый список товаров.

Решение — разделить фильтры на три группы и обращаться с ними по-разному.

Группа Примеры Что делать
Есть спрос, товаров достаточно Раздел по бренду, по назначению, по типу Открыть, дать свой адрес, заголовок и описание
Спроса нет или товаров единицы Сочетание трёх и более параметров Закрыть от индексации, оставить для людей
Служебные параметры Сортировка, вид отображения, метки переходов Закрыть и указать основной адрес страницы

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

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

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

Краулинговый бюджет и приоритеты обхода

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

Если нужны детали, смотрите «IndexNow — моментальная индексация сайта от Яндекс».

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

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

Как проверить, что база попала в индекс

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

Что проверяем Где смотреть О чём говорит расхождение
Число записей в базе Административная панель сайта Точка отсчёта
Число адресов в карте сайта Файл карты сайта Меньше, чем записей, — часть записей вообще не отдаётся страницей
Страниц в поиске Панель вебмастера, раздел индексирования Меньше, чем в карте, — робот не дошёл или счёл страницы малоценными
Страницы-сироты Обход сайта программой-краулером Есть адрес, нет входящих ссылок
Статистика обхода Панель вебмастера, раздел обхода Виден темп и типичные ответы сервера
Причины исключения Панель вебмастера, список исключённых Дубли, малоценность, ошибки ответа

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

Для обхода собственного сайта пригодится любая программа-краулер: она проходит по ссылкам так же, как робот, и показывает реальную структуру. Сравнение её результата со списком записей из базы сразу выявляет изолированные группы — те самые «невидимые» тысячи страниц.

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

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

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

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

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

Влияет ли тип базы на индексацию? Не влияет никак. MySQL, PostgreSQL или что-то другое — для робота разницы нет, он видит только результат работы движка. Значение имеет скорость выдачи страницы: медленные запросы к базе замедляют ответ сервера, а это уже сокращает темп обхода.

Стоит ли открывать все фильтры каталога? Нет. Открывать имеет смысл только те сочетания, под которые есть спрос и достаточное количество товаров. Массовое открытие фильтров даёт лавину почти одинаковых страниц, съедает ресурс обхода и приводит к исключению карточек как дублей.

Коротко

  • Поисковый робот не подключается к базе — он получает по HTTP страницы, которые движок собрал из записей по конкретным адресам.
  • Записи попадают в индекс только при наличии обычных ссылок в разметке; скрипты, формы и кнопки без адреса путь для робота не создают.
  • Сайт, где содержимое доступно исключительно через внутренний поиск, отдаёт в индекс одну страницу — саму форму поиска.
  • Путь до любой записи должен укладываться в три-четыре перехода: каталог, указатели, подборки под спрос и перелинковка карточек.
  • Карта сайта сообщает адреса, но не заменяет ссылки: страница без входящих ссылок обходится редко и часто выпадает как малоценная.
  • На крупном сайте главный резерв — не ускорение обхода, а сокращение мусорных адресов от фильтров, сортировок и дублей.

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

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

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

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

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

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

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

Комментарии

Андрей Кремнёв

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

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

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

Милана Кривулина

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

Сергей Кропачев

Не соглашусь про карту сайта. У нас страницы, которые есть только в карте и ни на одну не ведёт внутренняя ссылка, спокойно сидят в индексе больше года. Так что утверждение слишком категоричное.

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

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

Анна Крохалёва

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

Владислав Крысин

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

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

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

Тамара Кубанова

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

Николай Кудлаев

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

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

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

Евгения Кукарцева

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

Дмитрий Куманин

Уточните момент про заголовок с датой изменения. Это на уровне сервера настраивается или в движке? Хостинг говорит, что у них всё стандартно, а в проверке этот заголовок не отдаётся.

Лариса Купина

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

Олег Курносов

У меня агрегатор объявлений, записи живут по две недели и удаляются. Каждый раз, когда робот доходит до карточки, её уже нет. Похоже, для такой модели вся эта история с индексацией базы работает плохо в принципе.

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

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

Вера Кухарева

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

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

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

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

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