Создание сайтов на 1С-Битрикс

Настройка bitrix для IndexNow Яндекса

Яндекс с Microsoft разработали и запустили протокол IndexNow, который позволяет автоматически сообщать поисковым системам об изменениях на сайте. Рассказываем как настроить на своем сайте отправку.

Настройка bitrix для IndexNow Яндекса Яндекс с Microsoft разработали и запустили протокол IndexNow, который позволяет автоматически сообщать поисковым системам об изменениях на сайте. Рассказываем как настроить на своем сайте отправку.
В статье рассказывается как подключить на своем сайте под управлением 1С-Битрикс скрипт для отправки новых url-ов сразу в Яндекс.

Мы будем пользоваться протоколом GET для передачи одного url-а.

Как пользоваться

  1. Придумываем свой ключ (требования: от 8 до 128 символов, разрешаются только a-z, A-Z , 0-9, -)
  2. Сохраняем в корне сайта файл —  ваш_ключ.txt, внутри файла только ключ в одну строку без пробелов)
  3. Добавляем в bitrix/php_interface/init.php код
!! Внимание! Добавлять в init.php желательно только имея доступ к FTP сайта.


/* Отправляем get-запрос Яндексу для индексирования только что добавленной страницы */

AddEventHandler("iblock", "OnStartIBlockElementAdd", "OnStartIBlockElementUpdateHandler"); 
AddEventHandler("iblock", "OnStartIBlockElementUpdate", "OnStartIBlockElementUpdateHandler"); 

function OnStartIBlockElementUpdateHandler ($arParams) {

	$iblockID	= 12;
	$protocol	= 'https';
	$siteUrl	= 'xxxxxxxxx.ru';
	$indexKey	= 'xxxxxxxxxxxx';

	// Если добавлена статья в нужный нам инфоблок
    if($arParams['IBLOCK_ID'] == $iblockID) {

    	// Если статья активна и имеет дату начала активности
    	if($arParams['ACTIVE'] == 'Y' && $arParams['ACTIVE_FROM']) {
    		$filename = $_SERVER['DOCUMENT_ROOT'] . '/upload/indexNowSended.txt';

    		// Если файл логирования ID-шников существует
    		if (file_exists($filename)) {
    			$newfile = FALSE;
    			// Делаем массив из файла с ID-s
				$sendedIDS = file($filename);
			} else {
				$newfile = TRUE;
			}

			// Если ID нет в массиве отправленных статей
			if(!in_array($arParams['ID'], $sendedIDS)) {

				$fullUrl = $protocol . '://' . $siteUrl . '/';

				// Если статья в разделе инфоблока
				if(!empty($arParams['IBLOCK_SECTION'][0])) {
					// Получаем данные о разделе
					$res = CIBlockSection::GetByID($arParams['IBLOCK_SECTION'][0]);
					$section = $res->GetNext();
					// Добавляем секцию к адресу страницы
					$fullUrl .= $section['CODE'] . '/';
				}
				// Добавляем код статьи к адресу
				$fullUrl .= $arParams['CODE'] . '/';

				$getURL  = 'https://yandex.com/indexnow';
				// Кодируем url в формат
				$getURL .= '?url='.rawurlencode($fullUrl);

				// Добавляем ключ к адресу
				$getURL .= '&key=' . $indexKey;

				// Отправка get-запроса
				$result = file_get_contents($getURL);

				// Кодируем ответ из json в массив
				$answer = json_decode($result, true);

				// Если все ок, то в ключе SUCCESS будет 1 (единица)
				if($answer['SUCCESS']) {
					if($newfile) {
						// Если файла нет, то создаем его
						file_put_contents($filename, $arParams['ID']);
					} else {
						// Добавляем ID в конец файла логирования
						file_put_contents($filename, PHP_EOL . $arParams['ID'], FILE_APPEND);
					}
				}
			}
    	}
    }
}

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

Объясняем принцип действия: скрипт срабатывает при сохранении или изменении статьи и проверяется — есть ли галочка "Активно" и указана ли дата "Начало активности". То есть вы можете сначала делать черновики и сохранять их неактивными.
Далее проверяется наличие файла /upload/indexNowSended.txt - если он уже есть, то в нем должны быть ID уже отправленных статей. Если сохраняемого ID нет в этом списке, то подготавливаем ссылку, отправляем в Яндекс и добавляем новые ID в конец этого файла. Если файла нет (первый раз срабатывает скрипт), то просто создаем файл и записываем туда один ID текущей статьи.

Дополнительные ссылки

Инструкция от Яндекса
Описание протокола IndexNow (на английском языке)
Логотип SiteBERG
Изменено: 31.10.2021 11:36

Популярное

Пожалуйста, ответьте на несколько вопросов.
Что нужно сделать?