К содержанию

Технология AJAX

AJAX (Asynchronous JavaScript and XML) – это способ обновлять часть страницы без её полной перезагрузки: скрипт в фоне отправляет запрос на сервер, получает данные и вставляет их в нужный блок. Посетитель видит, как меняется список товаров или корзина, а сама страница остаётся на месте.

Вы выбираете в каталоге фильтр «Цвет: чёрный», и товары меняются за секунду, без белого экрана и прыжка наверх. Это AJAX. Удобно для человека, но есть вопрос, который стоит задать разработчику заранее: а что в этот момент видит поисковый робот?

Фоновый запрос вместо перезагрузки страницы

Название появилось в 2005 году, когда XML был основным форматом обмена. Сейчас данные чаще передают в JSON или готовыми кусками HTML, а запросы отправляют через XMLHttpRequest или более новый fetch. Суть осталась прежней:

  1. Посетитель что-то делает: нажимает кнопку, выбирает фильтр, вводит текст.
  2. Скрипт отправляет фоновый запрос на сервер.
  3. Сервер возвращает только нужные данные, а не всю страницу.
  4. Скрипт вставляет их в страницу и при необходимости меняет адрес в строке браузера.

Так выглядит загрузка второй страницы товаров по кнопке «Показать ещё» (пример упрощённый):

fetch('/catalog/smesiteli/?PAGEN_1=2&ajax=y')
  .then(r => r.text())
  .then(html => list.insertAdjacentHTML('beforeend', html));
history.pushState({}, '', '/catalog/smesiteli/?PAGEN_1=2');

Последняя строка важна для SEO: через History API она меняет адрес в браузере, и у подгруженного состояния появляется собственный URL. Без неё кнопка «Назад» выбрасывает посетителя из каталога, а ссылкой на подборку не поделиться.

Схема сравнения обычной загрузки страницы и AJAX: фоновый запрос с обновлением адреса через History API и без собственного URL
Обычная загрузка и AJAX

Зачем AJAX сайту

У технологии честные плюсы, и отказываться от неё ради SEO не нужно:

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

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

Фильтры, «Показать ещё», вкладки: где AJAX мешает поиску

ГдеРиск для SEOЧто сделать
Фильтры каталогау нужных сочетаний нет своего адресасделать посадочные фильтры с постоянными URL
«Показать ещё», бесконечная прокруткаробот видит только первую порцию товаровоставить обычные ссылки на страницы пагинации
Вкладки с описанием и отзывамитекст грузится только по кликуотдавать текст в HTML, а вкладки переключать стилями
Формы заявок, корзина, подсказки поисканетв поиске эти элементы не нужны

Про фильтры с собственными адресами рассказываем в статье SEO-фильтры, про страницы каталога в статье Пагинация.

У многих стандартных компонентов 1С-Битрикс есть параметр режима AJAX (AJAX_MODE). Он удобен, но после его включения проверьте постраничную навигацию и фильтр каталога: ссылки на страницы должны остаться обычными ссылками с адресами, а важные для поиска состояния фильтра должны открываться по прямому URL.

Как поисковики видят AJAX

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

Раньше для AJAX-сайтов была отдельная схема: адреса с #! и параметр _escaped_fragment_, по которому сервер отдавал роботу HTML-копию. Google объявил её устаревшей в 2015 году. Яндекс тоже отказался от неё: робот игнорирует мета-тег fragment, сканирует обычные адреса и сам выполняет JavaScript. Если сайт до сих пор работает по старой схеме, Яндекс советует перейти на адреса без решётки через History API и поставить 301 редиректы со старых адресов с _escaped_fragment_.

Как проверить AJAX-блоки

  • Откройте исходный код страницы. Если текста или товаров там нет, они приходят по AJAX.
  • В инструментах разработчика на вкладке Network включите фильтр Fetch/XHR и посмотрите, какие запросы уходят при клике.
  • Скопируйте адрес после выбора фильтра и откройте его в новой вкладке. Если открылся каталог без фильтра, у этого состояния нет своего URL.
  • Проверьте страницу в Search Console и Вебмастере: есть ли нужный контент в отрисованной версии.
Сравнение AJAX на сайте без учёта SEO и с учётом SEO: пагинация, фильтры, вкладки с описанием и адреса страниц
AJAX без учёта SEO и с учётом SEO
Правило простое: если блок должен находиться в поиске, у него есть свой адрес и он открывается без участия скриптов. AJAX оставьте для удобства: корзины, форм, подсказок.

Индексация, адреса с решёткой, скорость и кнопка «Назад»

Индексируют ли Яндекс и Google контент, загруженный через AJAX?

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

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

Часть адреса после # браузер на сервер не отправляет, и поисковики считают /catalog/#black и /catalog/ одной страницей. Поэтому каждое состояние, которое нужно в индексе, получает обычный адрес с путём или параметром, а в строку браузера его ставит History API.

Как AJAX сказывается на скорости сайта?

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

Чем fetch отличается от XMLHttpRequest?

Метод fetch новее, короче записывается и работает с промисами. XMLHttpRequest старше, зато из коробки показывает прогресс отправки файла. Для поиска разницы нет.

Почему после AJAX-фильтра кнопка «Назад» уводит из каталога?

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

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

Справки Яндекса и Google

Остались вопросы по теме «Технология AJAX»?

Напишите нам в Telegram или MAX. Ответит специалист, который отвечает за эту тему, или руководитель проектов в рабочее время.

Сергей ПимкинОтвечает по темеСергей ПимкинВедущий SEO-специалист

Тарифы по теме

Все тарифы →
от 70 000 ₽/мес при оплате за 3 месяца, помесячно 80 000 ₽

Стартовый тариф для небольшого бизнеса: наводим порядок на сайте и получаем первые заявки из Яндекса и Google.

  • Техническая оптимизация сайта
  • Контентная оптимизация
  • Семантическое ядро под город или регион
  • Настройка Яндекс Вебмастера и Google Search Console
  • Цели в Яндекс Метрике
  • Ежемесячный отчёт по позициям, трафику и заявкам
  • Оптимизация поведенческих факторов
  • Оптимизация коммерческих факторов и E-A-T
SEO ProХит
от 90 000 ₽/мес при оплате за 3 месяца, помесячно 99 000 ₽

Тариф для растущего бизнеса. Работаем на количество заявок: считаем звонки через коллтрекинг и дорабатываем сайт под конверсию.

  • Техническая оптимизация сайта
  • Контентная оптимизация
  • Семантическое ядро под город или регион
  • Настройка Яндекс Вебмастера и Google Search Console
  • Цели в Яндекс Метрике
  • Ежемесячный отчёт по позициям, трафику и заявкам
  • Оптимизация поведенческих факторов
  • Оптимизация коммерческих факторов и E-A-T
от 135 000 ₽/мес при оплате за 3 месяца, помесячно 149 000 ₽

Для масштабирования бизнеса: SEO, A/B-тесты, карточки в Яндекс.Бизнесе и 2ГИС, техподдержка сайта. Нейросети берут на себя рутину, итог проверяют специалисты.

  • Техническая оптимизация сайта
  • Контентная оптимизация
  • Семантическое ядро под город или регион
  • Настройка Яндекс Вебмастера и Google Search Console
  • Цели в Яндекс Метрике
  • Ежемесячный отчёт по позициям, трафику и заявкам
  • Оптимизация поведенческих факторов
  • Оптимизация коммерческих факторов и E-A-T

Проверим ваш сайт бесплатно

Экспресс-аудит за 24 часа: скорость, индексация, мета-теги, коммерческие факторы и цели Метрики.

Расскажите о задаче. Ответим за 12 часов

Отвечает руководитель проектов, не бот. Пришлём бриф и план с цифрами и сроками.

Или напишите: Telegram, MAX, +7 (391) 216-88-63

Заявка у нас. Руководитель проектов свяжется с вами в рабочее время и пришлёт бриф в течение 12 часов.