/** * Функция для обработки URL: * 1. Отдает 404 для URL с обрывками (/? или /&) * 2. Добавляет noindex для URL с параметрами, кроме пагинации * 3. Удаляет noindex для чистых URL пагинации (?PAGEN_1=x) * 4. Добавляет noindex для специфических страниц с пагинацией */ function processUrlsAndManageNoindex() { global $APPLICATION; // Исключаем административную панель и системные разделы $adminPaths = array( '/bitrix/', '/local/admin/', '/upload/', '/include/', '/ajax/' ); $currentPath = $_SERVER['REQUEST_URI']; foreach ($adminPaths as $adminPath) { if (strpos($currentPath, $adminPath) === 0) { return; // Не обрабатываем административные разделы } } // Дополнительная проверка на админку через константы Битрикса if (defined('ADMIN_SECTION') && ADMIN_SECTION === true) { return; } // Получаем полный запрошенный URI (путь + параметры) $requestUri = $_SERVER['REQUEST_URI']; // Получаем строку запроса (всё после знака ?) $queryString = $_SERVER['QUERY_STRING']; // Получаем путь без параметров $urlPath = parse_url($requestUri, PHP_URL_PATH); // Проверяем на обрывки в URL (? или & на конце, либо пустая строка запроса) $isEmptyParam = false; // URL заканчивается на /? if (substr($requestUri, -2) === '/?' && empty($queryString)) { $isEmptyParam = true; } // URL заканчивается на /& if (substr($requestUri, -2) === '/&') { $isEmptyParam = true; } // URL содержит знак & без параметров после него if (strpos($requestUri, '&') !== false && !preg_match('/&[^&=]+=/i', $requestUri)) { $isEmptyParam = true; } // Если обнаружен обрывок - отдаем 404 if ($isEmptyParam) { // Отправляем 404 заголовок if (!headers_sent()) { header('HTTP/1.0 404 Not Found'); header('Status: 404 Not Found'); } // Устанавливаем статус 404 для Битрикса \CHTTP::SetStatus('404 Not Found'); // Принудительно подключаем 404 страницу if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/404.php')) { require_once($_SERVER['DOCUMENT_ROOT'] . '/404.php'); die(); // Завершаем выполнение } } // Список URL-путей, для которых нужно добавлять noindex при пагинации $noindexPaginationPaths = array( '/services/vnedrenie/vnedrenie-1s-erp/', '/' // главная страница ); // Проверяем, является ли это чистым URL пагинации $isPagination = false; if (!empty($queryString) && preg_match('/^PAGEN_1=\d+$/', $queryString)) { $isPagination = true; } // Проверяем, нужно ли добавить noindex для пагинации на конкретных страницах $shouldNoindexPagination = false; if ($isPagination) { foreach ($noindexPaginationPaths as $path) { if ($urlPath === $path) { $shouldNoindexPagination = true; break; } } } // Проверяем наличие знака ? в URL if (strpos($requestUri, '?') !== false) { if ($isPagination && !$shouldNoindexPagination) { // Для обычных URL пагинации (не из списка исключений) УДАЛЯЕМ noindex // 1. Переопределяем свойство robots $APPLICATION->SetPageProperty("robots", "index, follow"); // 2. Добавляем JavaScript для удаления мета-тега noindex $script = " "; $APPLICATION->AddHeadString($script, true); // 3. Устанавливаем HTTP-заголовок if (!headers_sent()) { header('X-Robots-Tag: index, follow'); } } else if (!empty($queryString)) { // Для обычных URL с параметрами или для пагинации из списка исключений ДОБАВЛЯЕМ noindex $APPLICATION->SetPageProperty("robots", "noindex"); $APPLICATION->AddHeadString('', true); if (!headers_sent()) { header('X-Robots-Tag: noindex'); } } } }
[RuntimeException] Could not start session because headers have already been sent. "/home/bitrix/www/local/php_interface/init.php":1. (0) /home/bitrix/www/bitrix/modules/main/lib/session/session.php:143 #0: Bitrix\Main\Session\Session->start /home/bitrix/www/bitrix/modules/main/lib/session/kernelsessionproxy.php:47 #1: Bitrix\Main\Session\KernelSessionProxy->start /home/bitrix/www/bitrix/modules/main/include.php:182 #2: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog_before.php:19 #3: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog.php:10 #4: require_once(string) /home/bitrix/www/bitrix/header.php:1 #5: require(string) /home/bitrix/www/projects/index.php:2 #6: include_once(string) /home/bitrix/www/bitrix/modules/main/include/urlrewrite.php:128 #7: include_once(string) /home/bitrix/www/bitrix/urlrewrite.php:2 ----------