Эта статья является переводом заметки Давида Кюннена "How to get 250k+ pages indexed by Google", разработчика из Германии, который нашел способ лучшей индексации сайтов, написанных на JavaScript.

При создании проекта Devsnap, Давид был очень наивным. Он использовал Create React App для фронтенда и язык Go с GraphQL для бэкенда. Классический SPA-сайт с клиентским рендерингом.

Давид знал, что гуглу на job-сайте придется индексировать множество страниц, но не переживал, так как известно, что Google обрабатывает JavaScript и, по идее, должен все нормально проиндексировать.

— О нет, я ошибался

David Künnen

Сначала все казалось идет норм. Шаг за шагом Google индексировал странички и сайт получал первый органический трафик. На графике ниже показано количество обрабатываемых поиском страниц сайта.

Количество просканированных страниц в Google

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

1. Внедрение SSR

Сначала Давид внедрил SSR (серверный рендеринг), так как где-то слышал от гуглоидов, что SPA-сайты с клиентским рендерингом индексируются дважды. Сначала Googlebot смотрит на HTML и следует по ссылкам, которые находит. А после того, как контент отправляется рендереру, получается окончательный HTML. Это не слишком затратно для Google, но происходит очень медленно. Поэтому, было решено, чтобы гугл сразу видел все нужные ссылки в коде.

SSR внедрялся по этому мануалу. И казалось, что понадобится несколько дней, но работа заняла всего несколько часов. А результаты получились крутыми.

Рост краул-рейта после внедрения серверного рендеринга на SPA-сайте

Без SSR сайт застрял на 20к страницах в индексе, а сейчас этот показатель растет к значению 100к и больше. Но этого тоже было недостаточно.

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

2. Внедрение динамического Sitemap

Сайт про работу очень объемный и нужно гуглу как-то помогать в сканировании, поэтому Давид сделал небольшой скрипт на Go, который генерировал sitemap.xml два раза в день и загружал его на CDN.

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

Отправленные карты сайтов в Search Console.

После отправки сайтмапов, Google стал быстрей индексировать сайт, но это по-прежнему было недостаточно. Скорость сканирования увеличились примерно до 5-10 страниц в минуту. Сравнительного графика здесь нет, так как автор почти сразу же начал внедрять следующий пункт.

3. Удаление JavaScript

Почему сайт сканировался так медленно? Ведь есть множество других сайтов с кучей страниц и гугл как-то с ними справляется.

Логично, что поисковик выделяет ограниченное количество ресурсов для индексации конкретного сайта, и сканирование Devsnap было до сих пор затратным, так как, несмотря на то, что Google видел все ссылки в начальном HTML, но он все равно отправлял все в свой рендерер, чтобы убедиться, ничего ли не осталось для индексации. Он просто не знал из-за наличия в коде JavaScript, все ли находится в начальном HTML.

Поэтому, Давид решил удалить для ботов весь JavaScript.

if(isBot(req)) {
    completeHtml = completeHtml.replace(/