Автоматическая индексация страниц для поиска в CMS 1С-Битрикс устанавливает некоторые требования к индексируемым страницам, в частности наличие функции SetTitle в начале кода, если страница отличается от стандартного шаблона ее можно проиндексировать вручную, использую следующий код (его можно запустить из самописного скрипта, либо воспользовавшись инструментом «Командная PHP-строка» в панели битрикса):
<?php
if (\Bitrix\Main\Loader::includeModule("search")) {
// Укажите папку, которую нужно принудительно проиндексировать
$targetDir = "/catalog/";
$siteId = "s1"; // ID вашего сайта (обычно s1)
$fullPath = $_SERVER["DOCUMENT_ROOT"] . $targetDir;
if (is_dir($fullPath)) {
$dir = new DirectoryIterator($fullPath);
$count = 0;
foreach ($dir as $fileinfo) {
// Индексируем только PHP и HTML файлы, игнорируем служебные
if (!$fileinfo->isDot() && $fileinfo->isFile() && in_array($fileinfo->getExtension(), ['php', 'html', 'htm'])) {
$fileName = $fileinfo->getFilename();
if (strpos($fileName, '.') === 0 || $fileName == '.access.php') continue;
$itemPath = $targetDir . $fileName;
$fileContent = file_get_contents($fileinfo->getPathname());
// 1. Извлекаем заголовок из вашей переменной $title
$title = "Без названия";
if (preg_match('/\$title\s*=\s*[\'"](.*?)[\'"]\s*;/', $fileContent, $matches)) {
$title = trim($matches[1]);
}
// 2. Очищаем текст от PHP и HTML тегов для поискового робота
$bodyText = strip_tags($fileContent);
$bodyText = preg_replace('/<\?[\s\S]*?\?>/', '', $bodyText); // Удаляем PHP код
$bodyText = trim(preg_replace('/\s+/', ' ', $bodyText)); // Убираем лишние пробелы
// 3. Напрямую записываем в поисковую базу b_search_content
CSearch::Index(
"main", // Модуль статики
$itemPath, // Уникальный ID (путь к файлу)
array(
"DATE_CHANGE" => date("d.m.Y H:i:s", $fileinfo->getMTime()),
"TITLE" => $title,
"BODY" => $bodyText,
"URL" => $itemPath,
"SITE_ID" => array($siteId),
"PERMISSIONS" => array(1, 2), // Важно: принудительно даем доступ Администраторам(1) и Гостям(2)
),
true // Перезаписать старый индекс, если он был
);
echo "Проиндексирован файл: <b>" . $itemPath . "</b> с заголовком: <i>\"" . $title . "\"</i><br>";
$count++;
}
}
echo "<br><b>Всего успешно добавлено файлов в поиск: " . $count . "</b>";
} else {
echo "Папка не найдена";
}
} else {
echo "Модуль поиска не установлен";
}