homidomi.ru — техническое SEO интернет-магазина на 1С-Битрикс
Интернет-магазин товаров для дома / климат- и BBQ-оборудования (1С-Битрикс) · E-commerce (товары для дома, кондиционирование, грили/BBQ, печи для пиццы)
Магазин делил вес между дублями страниц, а указание для поисковика вело на служебный файл движка. Нашёл причину и починил, не трогая ядро и тему.
- PHP
- Bitrix
- Bitrix D7
- Aspro Lite
- MySQL
- Nginx
- php-fpm 8.3
- SEO
В цифрах
- 2 / 2
- задачи ТЗ выполнены (301-редиректы + canonical)
- 5
- файлов изменено/создано, всё в /local/ (ядро и тема не затронуты)
- 3 → 1
- дублей тега canonical на странице приведено к одному
- 2
- раунд доработок по замечаниям заказчика (v2): HTTPS-редирект + canonical на поддоменах
Ключевое
- Указание на главную версию страницы стояло трижды — при дублях поисковик игнорирует их все. Осталось одно, и ведёт оно на саму страницу.
- Настроил переадресацию с адресов-дублей на основные, исключив обмен с 1С, приём заказов и админку: ошибка здесь остановила бы работу магазина.
- Проверил собственный план по документации движка и руководствам поисковых систем до выката — и нашёл в нём ошибки, которые сломали бы часть магазина.
- Все правки положил в отдельную папку для доработок: обновления движка и темы их не перезапишут.
- Отработал раунд правок по замечаниям заказчика: региональные поддомены получили собственные указания вместо общего для всего сайта.
Задача
Интернет-магазин товаров для дома терял позиции в поиске из-за дублей: одна и та же страница открывалась по нескольким адресам, и поисковик считал их разными, деля между ними вес.
Указание «вот главная версия этой страницы», которое должно было это чинить, само было сломано. Оно стояло на каждой странице трижды — а когда таких указаний несколько, поисковик игнорирует их все — и вело не на страницу, а на служебный файл движка.
Что сделано
- Нашёл корневую причину, а не симптом: код брал адрес страницы из переменной сервера, которая в этой конфигурации после внутренней переадресации возвращала имя служебного файла вместо адреса, набранного посетителем. Перевёл на штатный способ получить исходный адрес.
- Убрал тройное дублирование: добавил обработчик, который срабатывает после темы магазина и оставляет одно указание вместо трёх.
- Настроил переадресацию с адресов-дублей на основные, аккуратно исключив служебные пути — обмен с 1С, приём заказов, административную часть, фоновые задачи. Ошибка в этом списке остановила бы работу магазина.
- Все правки положил в отдельную папку для доработок, не тронув ни ядро движка, ни тему: обновления их не перезапишут. Перед работами сделал резервные копии файлов и таблиц базы.
- Перед реализацией проверил собственный план по документации движка и руководствам поисковых систем — и нашёл в нём ошибки, которые сломали бы часть магазина, до того как они попали на сайт.
Итог
На каждой странице осталось одно указание на главную версию вместо трёх, и ведёт оно на саму страницу, а не на служебный файл. Адреса-дубли переадресуют на основные, при этом обмен с 1С, оформление заказов и админка работают как прежде. Обе задачи технического задания закрыты, включая раунд правок по замечаниям заказчика: региональные поддомены получили собственные указания вместо общего для всего сайта.
Технические детали
Решение и подход
- Редиректы только на PHP-уровне. Сайт обслуживается nginx→php-fpm напрямую, поэтому
.htaccess/RewriteRule не работают. Редиректы размещены в началеinit.phpи используют штатныйLocalRedirect()(а неheader()+exit), что корректно завершает жизненный цикл Битрикс (закрытие БД/сессий, события). Исключения:/bitrix/,/rest/,/upload/,/local/tools/, CLI, cron-агенты (BX_CRONTAB/CHK_EVENT), AJAX, не-GET — чтобы не сломать обмен с 1С и формы магазина. - Корневая причина canonical. Старый код брал
$_SERVER['DOCUMENT_URI'], который в данной конфигурации nginx после internal rewrite указывает на скрипт-обработчик/bitrix/urlrewrite.php. Замена на D7HttpRequest::getRequestedPage()(из оригинальногоREQUEST_URI) и переход сAsset::addString()на штатный$APPLICATION->SetPageProperty('canonical',.). - Дедупликация поверх вендора. Тема Aspro (CLiteEvents,
OnEndBufferContent, sort=100) переносит canonical в<head>после каждого вхождения<head>и подменяет домен на$_SERVER['SERVER_NAME']. Добавлен собственный обработчикOnEndBufferContentс sort=500, который оставляет один тег и восстанавливает домен изHTTP_HOST(важно для поддоменов вродеrostov.homidomi.ru, т.к.server_name homidomi.ru *.homidomi.ruвсегда отдаёт основной домен вSERVER_NAME). - Без правок вендора. Все изменения только в
/local/; ядро Битрикс, тема Aspro и модуль SmartSEO не модифицировались — устойчивость к обновлениям.
Стек и обоснование
Платформа и границы правок. PHP 8.3 + 1С-Битрикс (D7 API); всё написанное лежит в /local/ по гайдлайнам вендора — ядро и тема остаются обновляемыми, а значит проект не превращается в форк, который нельзя апдейтить.
Aspro Lite 2.3.3 — установленная тема, чьё поведение (CLiteEvents) пришлось учитывать и перекрывать по приоритету обработчика, а не правкой вендорских файлов.
nginx + php-fpm без Apache — конфигурация хостинга (ISPManager). Именно она исключила .htaccess из инструментария и заставила делать редиректы на уровне PHP, а также стала причиной искажения DOCUMENT_URI.
Руководства Google и Yandex по канонизации — основание для решений о том, какой URL считать главным на пагинации и поддоменах; выбор сверялся с документацией, а не с общим ощущением.
Инженерные вызовы
- Конфигурация nginx→php-fpm, ломающая привычные механики (
.htaccessнеактивен;DOCUMENT_URIискажён после rewrite) — потребовала переноса логики вinit.phpи перехода наREQUEST_URI/D7 API. - Перекрытие поведения вендорской темы без правки её файлов: собственный
OnEndBufferContentс более высоким приоритетом, чтобы починить дубли и домен после CLiteEvents. - Мультидоменность (региональные поддомены
*.homidomi.ru) иSERVER_NAME, всегда отдающий основной домен, — решено восстановлением домена изHTTP_HOST. - Безопасность редиректов для e-commerce: аккуратный whitelist исключений, чтобы не задеть обмен с 1С, REST, AJAX, cron и POST-формы.
Услуги в проекте
- доработка существующего
- аудит
- SEO
- деплой
- консультация