
Индексация базы данных — тема, из-за которой крупные сайты годами держат в поиске одну сотую того, что у них есть. Магазин с двумястами тысячами карточек показывает в панели вебмастера восемь тысяч страниц, энциклопедия на полмиллиона записей — три десятка. Владелец при этом уверен, что «сайт открыт для индексации», и формально прав: robots.txt разрешает всё. Проблема в другом — до содержимого таблиц робот просто не может дойти, потому что туда не ведёт ни одна ссылка.
В SEO я с 2005 года и разбирал этот сценарий на каталогах, справочниках, агрегаторах и магазинах. Причина всегда одна и та же, а решения различаются деталями. Ниже — механика того, как поисковый робот добирается до данных, где именно обрывается путь и какими способами содержимое базы выводят в поиск, не превращая сайт в свалку из миллиона мусорных адресов.
Почему поисковик не видит содержимое базы
Данные крупного сайта хранятся в реляционной базе — MySQL, PostgreSQL, MS SQL. Это удобно: записи легко добавлять, править, связывать между собой и отдавать по запросу. Но поисковый робот к базе не подключается. У него нет ни доступа к серверу базы, ни возможности выполнить запрос к таблице, ни представления о том, какие таблицы там есть.
Робот умеет ровно одно: запросить адрес по протоколу HTTP и получить в ответ страницу. Всё, что он знает о вашем сайте, он узнал из адресов, которые ему кто-то дал: ссылки на страницах, карта сайта, внешние ссылки с других ресурсов. Записи в базе становятся страницами только в тот момент, когда движок собирает их в HTML по конкретному адресу. Нет адреса — нет страницы, сколько бы данных ни лежало в таблице.
Отсюда простое правило, которое переворачивает подход к структуре крупного сайта: индексируется не база, а множество адресов, за которыми стоят её записи. Задача владельца — построить путь из ссылок от главной страницы к каждой записи, которую он хочет видеть в поиске.
| Содержимое | Видит ли робот | Почему |
|---|---|---|
| Запись, доступная по своему адресу, на который есть ссылка | Да | Робот перешёл по ссылке и получил HTML |
| Запись, доступная по адресу, но без единой ссылки | Практически нет | Адрес неоткуда взять, если он не в карте сайта |
| Результат внутреннего поиска по сайту | Нет | Робот не вводит слова в форму |
| Данные, подгружаемые только после клика | Чаще нет | Клик — действие пользователя, робот его не совершает |
| Содержимое, доступное после авторизации | Нет | Робот не заполняет форму входа |
| Записи, выводимые только на карте или в интерактивном виджете | Нет | Нет обычных ссылок в разметке |
Что робот обходит на самом деле
Обход строится по графу ссылок. Робот берёт известный адрес, скачивает страницу, вытаскивает из разметки все ссылки, добавляет новые адреса в очередь и повторяет процедуру. Чем ближе адрес к точкам входа и чем больше на него ссылок, тем выше вероятность, что он будет обойден быстро и переобходен регулярно.
Ссылкой для робота считается тег с адресом в атрибуте, а не всё, что похоже на ссылку визуально. Это важная разница, на которой теряются целые разделы:
- Работает: обычная ссылка с адресом в разметке, в том числе оформленная как кнопка.
- Не работает: элемент со скриптовым обработчиком, который меняет адрес в браузере при нажатии.
- Не работает: кнопка внутри формы, отправляющая данные методом POST.
- Не работает: адрес, собираемый скриптом из кусков при наведении курсора.
- Работает частично: ссылка, появляющаяся в разметке после исполнения скрипта, — робот может её увидеть, но с задержкой и не гарантированно.
Проверить, что именно видит робот на конкретной странице, можно без сложных инструментов: откройте исходный код страницы через просмотр кода в браузере и поищите там адреса карточек. Если в исходном коде их нет, а на экране карточки есть, значит содержимое дорисовывается скриптом, и с индексацией будут проблемы.
Внутренний поиск: ловушка крупных сайтов
Типичный сценарий, с которого начинается потеря сотен тысяч страниц. Сайт содержит огромный справочник, но выводится он только через строку поиска: человек вводит название, движок выполняет запрос к базе, страница показывает найденное. Для пользователя удобно, для робота — тупик.
Робот заходит на страницу поиска и видит форму и пустой результат. Слова в поле он не вводит: у него нет ни списка возможных запросов, ни задачи их перебирать. Он забирает единственный адрес — саму страницу поиска — и уходит. Всё содержимое справочника остаётся невидимым.
Тему разбирал отдельно: «Mobile-first индексация».
Ошибка усугубляется, когда владелец, не понимая механики, пытается решить проблему разрешениями в robots.txt. Разрешение доступа ничего не меняет: дело не в запрете, а в отсутствии ссылок. Более того, страницы результатов внутреннего поиска правильнее как раз закрывать от индексации — иначе робот, найдя случайные ссылки с параметрами поиска, начнёт плодить бесконечные однотипные адреса и потратит на них ресурс обхода.
Решение всегда одно: рядом с поиском должна существовать навигация из обычных ссылок, которая ведёт к тем же записям. Поиск — для людей, ссылочная структура — для робота и для людей одновременно.
Как вывести содержимое базы в ссылки
Помогу с продвижением: продвижение сайта в поисковых системах — вывожу сайты в топ Яндекса белыми методами.
Способов построить путь до каждой записи несколько, и на крупном сайте их обычно комбинируют. Ниже — рабочие варианты в порядке, в котором их стоит внедрять.
- Иерархический каталог. Разделы, подразделы, страницы записей. Классика, которая работает лучше всего: путь короткий, вес распределяется предсказуемо, человеку понятно, где он находится.
- Алфавитные и тематические указатели. Для справочников и энциклопедий: страница на каждую букву, внутри — ссылки на записи. Генерируется автоматически из той же базы.
- Карта сайта в формате XML. Список адресов, отдаваемый роботу напрямую. Один файл вмещает до пятидесяти тысяч адресов, дальше делается индексный файл со ссылками на части.
- Перелинковка между записями. Блоки «похожие», «из этого же раздела», «следующая запись» связывают карточки друг с другом и вытаскивают из изоляции глубоко лежащие.
- Страницы-сборники под спрос. Подборки, собранные из базы по признаку, который люди ищут: по назначению, по параметру, по региону. Дают и ссылки, и посадочные страницы одновременно.
| Способ | Что решает | Ограничение |
|---|---|---|
| Иерархический каталог | Основной путь обхода и понятная структура | Требует продуманной классификации записей |
| Алфавитный указатель | Доступ к массиву однотипных записей | Плохо работает без деления на подстраницы |
| Карта сайта XML | Сообщает роботу адреса напрямую | Не заменяет ссылки: адрес известен, но вес не передаётся |
| Перелинковка карточек | Вытаскивает страницы-сироты | Нужен алгоритм подбора, иначе блоки однообразны |
| Сборники под спрос | Даёт посадочные страницы и ссылки сразу | Требует анализа спроса, иначе плодятся пустышки |
Отдельно про карту сайта, потому что на неё возлагают лишние надежды. Она решает ровно одну задачу — сообщает роботу адреса, о которых он иначе не узнал бы. Она не передаёт странице внутренний вес, не влияет на приоритет и не гарантирует попадание в индекс. Страница, известная только из карты сайта и не имеющая ни одной входящей ссылки, обходится редко и часто выпадает. Карта — дополнение к ссылочной структуре, а не замена ей.
Если интересно направление с сайтами — базу даю в своём курсе:
Пагинация и подгрузка: где теряются страницы
Списки в каталогах редко помещаются на один экран, и способ их разбивки прямо определяет, дойдёт ли робот до глубины. Три распространённых варианта ведут себя по-разному.
Обычная пагинация ссылками. Страницы вида «/razdel/2/», «/razdel/3/» с обычными ссылками в разметке. Самый надёжный вариант: робот проходит по номерам и собирает все карточки. Единственное требование — чтобы ссылки на соседние страницы присутствовали в исходном коде, а не появлялись после клика.
Кнопка «Показать ещё». Догрузка следующей порции скриптом без смены адреса. Для человека удобно, для робота — обрыв: он получает только первую порцию, остальное остаётся за пределами разметки. Лечится тем, что рядом с кнопкой оставляют обычную пагинацию — визуально скромную, но с настоящими ссылками.
Смежный материал по теме — «Индексация сайта: что это такое и как она работает».
Бесконечная лента. Подгрузка при прокрутке. Для индексации худший вариант: адрес не меняется, ссылок нет, робот забирает первый экран. Решение то же — параллельная страничная навигация ссылками.
Ещё один частый дефект — слишком мало карточек на страницу. Если в разделе сто тысяч записей и по двадцать штук на страницу, глубина списка составит пять тысяч уровней, и до последних робот не доберётся никогда. Практическое правило: увеличивайте число элементов на странице и добавляйте промежуточные разбивки — по подкатегориям, по буквам, по диапазонам параметра, — чтобы путь от главной до любой записи укладывался в три-четыре перехода.
Фильтры каталога: что открывать, а что закрывать
Фильтры — обратная сторона проблемы. Если раньше речь шла о том, что робот не видит нужного, то здесь он видит слишком много: каждое сочетание параметров порождает адрес, и на среднем каталоге таких сочетаний миллионы. Робот честно обходит их, тратит на это ресурс и находит на большинстве почти одинаковый список товаров.
Решение — разделить фильтры на три группы и обращаться с ними по-разному.
| Группа | Примеры | Что делать |
|---|---|---|
| Есть спрос, товаров достаточно | Раздел по бренду, по назначению, по типу | Открыть, дать свой адрес, заголовок и описание |
| Спроса нет или товаров единицы | Сочетание трёх и более параметров | Закрыть от индексации, оставить для людей |
| Служебные параметры | Сортировка, вид отображения, метки переходов | Закрыть и указать основной адрес страницы |
Первая группа — самая ценная: это готовые посадочные страницы, собранные из той же базы. Проверяется просто — берёте формулировку фильтра, смотрите частоту в сервисах подбора запросов, и если спрос есть, а под фильтром достаточно товаров, страница заслуживает открытия. Остальным сочетаниям в поиске делать нечего: они дублируют друг друга и разбавляют индекс.
Если нужна помощь по теме — мой курс по SEO.
Для служебных параметров — сортировки, режима отображения, меток источника — используют указание основного адреса страницы. Это снимает вопрос дублей и одновременно возвращает вес на нужный адрес.
Краулинговый бюджет и приоритеты обхода
Каждому сайту робот отводит ограниченный ресурс обхода: сколько страниц он готов скачивать за сутки. Величина зависит от того, насколько быстро отвечает сервер, как часто меняется содержимое и какова общая оценка сайта. На маленьком сайте этот лимит не заметен, на крупном он определяет всё.
Если нужны детали, смотрите «IndexNow — моментальная индексация сайта от Яндекс».
Арифметика простая. Если сервер позволяет обходить, скажем, десять тысяч адресов в сутки, а на сайте два миллиона потенциальных адресов из-за фильтров и сортировок, полный цикл обхода займёт больше полугода. За это время половина карточек изменится, часть исчезнет, и в индексе всегда будет вчерашняя картина. Поэтому сокращение числа бесполезных адресов даёт больший эффект, чем любые попытки «ускорить индексацию».
- Ускорьте ответ сервера. Кеширование списков, индексы в базе под частые запросы, отдача статики отдельно от приложения. Робот увеличивает темп обхода, когда сайт отвечает быстро.
- Уберите мусорные адреса. Закрытые фильтры, отсутствие сессионных параметров в адресах, единый вид адреса без дублей со слешем и без него.
- Разгрузите цепочки редиректов. Каждый лишний переход — это ещё один запрос из бюджета.
- Разделите карту сайта по типам. Отдельные файлы для карточек, разделов и статей позволяют видеть в панели вебмастера, какая группа индексируется плохо.
- Отдавайте корректный ответ об изменении. Заголовок с датой последнего изменения позволяет роботу не скачивать заново то, что не менялось.
Как проверить, что база попала в индекс
Проверка строится не на ощущениях, а на сравнении трёх чисел: сколько записей в базе, сколько адресов отдаёт сайт, сколько страниц в поиске. Разрывы между ними показывают, где именно теряется содержимое.
| Что проверяем | Где смотреть | О чём говорит расхождение |
|---|---|---|
| Число записей в базе | Административная панель сайта | Точка отсчёта |
| Число адресов в карте сайта | Файл карты сайта | Меньше, чем записей, — часть записей вообще не отдаётся страницей |
| Страниц в поиске | Панель вебмастера, раздел индексирования | Меньше, чем в карте, — робот не дошёл или счёл страницы малоценными |
| Страницы-сироты | Обход сайта программой-краулером | Есть адрес, нет входящих ссылок |
| Статистика обхода | Панель вебмастера, раздел обхода | Виден темп и типичные ответы сервера |
| Причины исключения | Панель вебмастера, список исключённых | Дубли, малоценность, ошибки ответа |
Самый показательный отчёт — причины исключения страниц. Если массово выпадают карточки с пометкой о недостаточном качестве, проблема не в обходе, а в содержимом: страницы слишком похожи друг на друга, отличаются одним словом в названии, не имеют собственного описания. Такие карточки лечатся не ссылками, а наполнением — характеристиками, отзывами, ценами, уникальными фрагментами описаний, генерируемыми из полей той же базы.
Для обхода собственного сайта пригодится любая программа-краулер: она проходит по ссылкам так же, как робот, и показывает реальную структуру. Сравнение её результата со списком записей из базы сразу выявляет изолированные группы — те самые «невидимые» тысячи страниц.
Частые вопросы
Нужно ли открывать базу данных для поисковика напрямую? Нет, и такой возможности не существует. Робот работает только по HTTP и получает готовые страницы. Всё, что нужно, — чтобы движок отдавал каждую запись по своему адресу и чтобы на этот адрес вела ссылка.
Достаточно ли карты сайта, если ссылок нет? Недостаточно. Адреса из карты робот узнаёт, но обходит их с низким приоритетом, а страницы без входящих ссылок часто исключаются как малоценные. Карта ускоряет обнаружение, ссылочная структура обеспечивает удержание в индексе.
Что делать со страницами внутреннего поиска? Закрывать от индексации. Они дублируют содержимое каталога, порождают бесконечное множество адресов и расходуют ресурс обхода. Вместо них нужны разделы и подборки с постоянными адресами.
Сколько времени занимает индексация большого каталога? Зависит от скорости ответа сервера и от того, сколько мусорных адресов на сайте. Сотни тысяч страниц заходят в индекс месяцами, и ускоряет процесс не количество обращений на переобход, а сокращение бесполезных адресов и разгрузка сервера.
Влияет ли тип базы на индексацию? Не влияет никак. MySQL, PostgreSQL или что-то другое — для робота разницы нет, он видит только результат работы движка. Значение имеет скорость выдачи страницы: медленные запросы к базе замедляют ответ сервера, а это уже сокращает темп обхода.
Стоит ли открывать все фильтры каталога? Нет. Открывать имеет смысл только те сочетания, под которые есть спрос и достаточное количество товаров. Массовое открытие фильтров даёт лавину почти одинаковых страниц, съедает ресурс обхода и приводит к исключению карточек как дублей.
Коротко
- Поисковый робот не подключается к базе — он получает по HTTP страницы, которые движок собрал из записей по конкретным адресам.
- Записи попадают в индекс только при наличии обычных ссылок в разметке; скрипты, формы и кнопки без адреса путь для робота не создают.
- Сайт, где содержимое доступно исключительно через внутренний поиск, отдаёт в индекс одну страницу — саму форму поиска.
- Путь до любой записи должен укладываться в три-четыре перехода: каталог, указатели, подборки под спрос и перелинковка карточек.
- Карта сайта сообщает адреса, но не заменяет ссылки: страница без входящих ссылок обходится редко и часто выпадает как малоценная.
- На крупном сайте главный резерв — не ускорение обхода, а сокращение мусорных адресов от фильтров, сортировок и дублей.
Если у вас крупный каталог и в поиске оказалась лишь малая часть записей, а причина непонятна — приходите на SEO-консультацию: посмотрим статистику обхода, причины исключения страниц и структуру ссылок и определим, где именно обрывается путь робота к вашим данным.
Увеличьте позиции и продажи вашего сайта
Профессиональное SEO-продвижение с гарантией результата. Выберите подходящую услугу:
Остались вопросы по продвижению?
Меня зовут Анатолий Кузнецов, я SEO-оптимизатор с 20-летним стажем. Разберу ваш сайт, отвечу на вопросы и подскажу, что улучшить для роста позиций в Яндексе и Google.
Связаться со мной →
Комментарии
Андрей Кремнёв
У нас справочник организаций, порядка ста восьмидесяти тысяч записей. В индексе висело около четырёх тысяч. Прошёлся краулером — оказалось, что вся база доступна только через форму поиска и через карту с метками. Ссылок в разметке нет вообще. Сейчас делаем алфавитные и региональные указатели, посмотрим, что будет через пару месяцев.
Анатолий Кузнецов автор
Диагноз поставлен верно, и указатели — правильный первый шаг. Несколько уточнений, чтобы не переделывать потом. Не делайте страницу буквы одной длинной портянкой на десять тысяч ссылок: разбейте на подстраницы по двести-триста ссылок, иначе робот будет качать тяжёлые страницы медленно и брать с них не всё. Комбинируйте два разреза — по алфавиту и по региону: так до каждой записи будет вести минимум два пути, и глубоко лежащие карточки не окажутся сиротами. Карту с метками оставьте для людей, но продублируйте её список обычными ссылками под картой. И заранее подумайте о наполнении карточек: сто восемьдесят тысяч почти одинаковых страниц с одним названием и телефоном начнут выпадать как малоценные, даже когда робот до них дойдёт.
Милана Кривулина
Момент про «Показать ещё» стоит вешать на стену в каждом отделе разработки. У нас дизайнер убрал пагинацию как «устаревшую», через три месяца из индекса ушло больше половины карточек. Вернули страничную навигацию мелким шрифтом внизу — восстановилось за полтора месяца.
Сергей Кропачев
Не соглашусь про карту сайта. У нас страницы, которые есть только в карте и ни на одну не ведёт внутренняя ссылка, спокойно сидят в индексе больше года. Так что утверждение слишком категоричное.
Анатолий Кузнецов автор
Ваш случай не противоречит правилу, а показывает его границу. Страница, известная только из карты сайта, действительно может держаться в индексе — особенно если у неё есть внешние ссылки, если содержимое уникальное и объёмное, или если сайт в целом небольшой и ресурс обхода не в дефиците. Правило начинает работать на масштабе: когда таких страниц не сотня, а сотни тысяч, робот распределяет ограниченный бюджет по приоритету, и адреса без входящих ссылок оказываются в конце очереди. Проверить свою ситуацию можно в статистике обхода: посмотрите, как часто робот заходит на эти страницы. Если раз в несколько месяцев — они держатся на честном слове, и любое изменение содержимого будет доходить до поиска с огромной задержкой.
Анна Крохалёва
Добавлю про проверку исходного кода. Показала разработчику, что ссылок на товары в коде нет, а он ответил, что «поисковики давно всё исполняют». Пришлось открывать статистику обхода и показывать, что робот скачал ровно одну страницу раздела за месяц. Только после этого поверил.
Владислав Крысин
Вопрос по фильтрам. У нас магазин запчастей, и там сочетание «марка плюс модель плюс год» — это буквально то, как люди ищут. Получается миллионы комбинаций, но спрос-то реальный. Как тут выбирать, что открывать?
Анатолий Кузнецов автор
Запчасти — как раз тот случай, где глубокие сочетания открывать нужно, но не все подряд. Возьмите за основу два фильтра: наличие спроса и наличие товаров. Порог по товарам поставьте жёсткий — скажем, не меньше пяти позиций под сочетание, иначе получите тысячи пустых страниц, которые выпадут как малоценные. По спросу выгружайте частотность по своим маркам и моделям из сервисов подбора запросов и открывайте только те, где частота выше нуля. Дальше техника: у открытой страницы должен быть собственный адрес без параметров, свой заголовок с маркой и моделью, короткое описание и ссылка из общего списка модификаций, иначе робот на неё не попадёт. Остальные сочетания оставляйте работать для людей, но закрывайте от индексации и указывайте основной адрес раздела. И внедряйте порциями: открыли группу, посмотрели через месяц статистику обхода и исключений, потом следующую.
Тамара Кубанова
Про число элементов на странице — недооценённый пункт. У нас было по двенадцать товаров на страницу, из-за чего последние разделы уходили на глубину в сотни кликов. Подняли до шестидесяти, добавили подкатегории — обход пошёл заметно бодрее.
Николай Кудлаев
Как быть с базой, которая обновляется каждый час? У нас остатки и цены меняются постоянно, часть позиций исчезает. Стоит ли отдавать роботу такие карточки вообще, если завтра товара может не быть?
Анатолий Кузнецов автор
Отдавать стоит, но с продуманным поведением на исчезновение. Разделите две ситуации. Товар временно кончился — страница должна оставаться доступной, отдавать код успешного ответа, честно показывать статус «нет в наличии» и предлагать аналоги: адрес сохраняется, накопленные позиции не теряются. Товар снят с производства навсегда — тогда переадресация на карточку замены или на раздел, а если замены нет, страница отдаёт код отсутствия и убирается из карты сайта. Отдельно про частоту обновления: указывайте в карте сайта реальную дату последнего изменения и отдавайте корректный ответ на условный запрос — тогда робот не будет заново качать то, что не менялось, и сэкономленный бюджет уйдёт на новые карточки. И не пытайтесь загонять в переобход всё подряд при каждом изменении цены: приоритет надо отдавать появлению и исчезновению позиций, а не колебаниям остатка.
Евгения Кукарцева
Пункт про причины исключения помог больше всего. Думала, что у нас проблема с обходом, а оказалось — половина карточек висит с пометкой о недостаточном качестве. Описания у товаров были на одну строку и почти одинаковые. Проблема была не в ссылках вообще.
Дмитрий Куманин
Уточните момент про заголовок с датой изменения. Это на уровне сервера настраивается или в движке? Хостинг говорит, что у них всё стандартно, а в проверке этот заголовок не отдаётся.
Лариса Купина
Сделали разделение карты сайта по типам страниц, как советуете. Сразу стало видно, что разделы индексируются на девяносто процентов, а карточки на восемнадцать. Раньше это тонуло в общей цифре и мы искали проблему не там, где она была.
Олег Курносов
У меня агрегатор объявлений, записи живут по две недели и удаляются. Каждый раз, когда робот доходит до карточки, её уже нет. Похоже, для такой модели вся эта история с индексацией базы работает плохо в принципе.
Анатолий Кузнецов автор
Для короткоживущих записей ставка на индексацию самих карточек действительно проигрышная: робот физически не успевает, а массовое исчезновение страниц ухудшает общую картину по сайту. Разворачивайте задачу: пусть трафик собирают долгоживущие страницы, а объявления будут их наполнением. Это разделы вида «категория плюс город», «категория плюс параметр» — они существуют годами, обновляются автоматически из той же базы и попадают в спрос, который люди действительно вводят. Карточки при этом оставляйте доступными и не закрывайте, но не грузите ими карту сайта — туда кладите только устойчивые разделы. При удалении объявления не отдавайте пустую страницу: либо страница со статусом «объявление снято» и списком похожих актуальных, либо переадресация на раздел. И проверьте темп обхода — если робот заходит на сайт редко, сначала займитесь скоростью ответа и сокращением мусорных адресов, иначе даже долгоживущие разделы будут обновляться в поиске с большой задержкой.
Вера Кухарева
Добавлю практическое. Прогнала сайт краулером и сравнила со списком записей из базы — нашла целый раздел на четыре тысячи страниц, на который вообще ничего не ссылалось после редизайна. Он просто выпал из меню, а адреса остались рабочими. Без такого сравнения мы бы про него не вспомнили.