Индексирование страниц с JavaScriptβ
С помощью Вебмастера вы можете управлять индексированием страниц сайта, на которых контент отображается через JavaScript — указать, следует ли роботу выполнять JavaScript на страницах при обходе вашего сайта. Это может быть полезно, если на сайте не реализован SSR (Server-Side Rendering) или пререндеринг.
Управление индексированием
- Перейдите в Вебмастер.
- Перейдите на страницуβ.
- Выберите одну из опций. По умолчанию включена опция На усмотрение робота. Это значит, что робот самостоятельно определит, выполнять ли JavaScript-код на страницах сайта. Например, для принятия решения он может оценить качество и полноту контента на странице с JavaScript и без и загрузить ту, которая может оказаться более полезной для посетителя сайта.Совет. Запретите рендеринг, если на сайте реализован SSR (Server-Side Rendering) или пререндеринг.
Расширенные настройки рендеринга
Если на вашем сайте контент загружается с задержкой, вы можете сообщить об этом Яндексу с помощью специального кода JavaScript.
На страницах сайта, где контент загружается с задержкой, создайте объект window.YandexRotorSetting
таким образом, чтобы он обрабатывался до события DomContentLoaded. Внутри этого объекта можно указать параметры, на которые будет реагировать робот Яндекса при обработке страницы. Параметры приведены в таблице ниже.
Пример кода:
<script>
window.YandexRotorSettings = {
WaiterEnabled: true;
FailOnTimeout: false;
NoJsRedirectsToMain:true
}
</script>
Параметр | Тип | Описание |
---|---|---|
WaiterEnabled | Boolean | Возможные значения:
При значении true возможна проверка состояний:
Подробное описание состояний ниже. |
IsLoaded | Boolean | Возможные значения:
|
IsError | Boolean | Возможные значения:
|
Параметр | Тип | Описание |
---|---|---|
WaiterEnabled | Boolean | Возможные значения:
При значении true возможна проверка состояний:
Подробное описание состояний ниже. |
IsLoaded | Boolean | Возможные значения:
|
IsError | Boolean | Возможные значения:
|
FailOnTimeout | Boolean | Возможные значения:
Тайм-аут можно задать в пользовательских настройках при WaiterEnabled: true. |
NoJsRedirectsToMain | Boolean | Возможные значения:
Используйте параметр, если на вашем сайте реализован вызов window.history.back(), например, при использовании History API. Робот Яндекса воспринимает вызов window.history.back() как переход на главную страницу без изменения содержимого. В результате на главную страницу может попадать контент с других страниц. Как определить подмену контента Вы можете заметить, что в результатах поиска описание главной страницы меняется на описание внутренних или атрибут rel="canonical" меняется на атрибут внутренних страниц. |
FailOnTimeout | Boolean | Возможные значения:
Тайм-аут можно задать в пользовательских настройках при WaiterEnabled: true. |
NoJsRedirectsToMain | Boolean | Возможные значения:
Используйте параметр, если на вашем сайте реализован вызов window.history.back(), например, при использовании History API. Робот Яндекса воспринимает вызов window.history.back() как переход на главную страницу без изменения содержимого. В результате на главную страницу может попадать контент с других страниц. Как определить подмену контента Вы можете заметить, что в результатах поиска описание главной страницы меняется на описание внутренних или атрибут rel="canonical" меняется на атрибут внутренних страниц. |
- Примеры реализации JavaScript-кода
- Дождаться загрузки элемента с нужным CSS-селектором
<!-- Хотим дождаться элемента с классом '.observable-class'. Он будет создан через 10 секунд ---> <!-- Этот код должен быть вставлен прямо в html ---> <script> window.YandexRotorSettings = { WaiterEnabled: true } </script> <!-- Этот код можно загружать через <script src="...">--> <script> var intervalId = setInterval(function() { if (document.querySelectorAll('.observable-class').length > 0) { window.YandexRotorSettings.IsLoaded = true; clearInterval(intervalId); } }, 1000); </script> <!-- Скрипт для примера. Создаем элемент с нужным классом --> <script> setTimeout(function() { var div = document.createElement('div'); div.classList.add('observable-class'); div.innerText = "These are the droids you're looking for."; document.body.appendChild(div); }, 10000); </script>
Подождать 5 секунд после загрузки<!-- Рекомендуем полагаться на ожидание конкретных элементов. Загрузка ресурсов роботом может занимать неопределенное время ---> <!-- Этот код должен быть вставлен прямо в html ---> <script> window.YandexRotorSettings = { WaiterEnabled: true } </script> <!-- Этот код можно загружать через <script src="...">--> <script> setTimeout(function() { window.YandexRotorSettings.IsLoaded = true; }, 5000); </script>
- Примеры реализации функции внутри isLoaded
- Проверить состояние страницы
<!--В примере проверяем, что на странице размещено больше 10 элементов div--> window.YandexRotorSettings = { WaiterEnabled: true, IsLoaded: function() { return document.body.querySelectorAll('div').length > 10; } };
Дождаться загрузки контента в элементе titlewindow.YandexRotorSettings = { WaiterEnabled: true, IsLoaded: function() { return document.title.length > 0; } }