Sitemap Pages – мультиязычная карта сайта для модуля Page (Cotonti)
Плагин Sitemap Pages генерирует отдельные XML‑файлы sitemap для каждого языка, указанного в настройках, и опционально один общий индексный файл (sitemap index).
Sitemap Pages – мультиязычная карта сайта для модуля Page (Cotonti)
Плагин Sitemap Pages генерирует отдельные XML‑файлы sitemap для каждого языка, указанного в настройках, и опционально один общий индексный файл (sitemap index). Для языков, отличных от основного, в карту попадают только те категории и страницы, для которых существуют переводы в штатном плагине i18n (таблицы cot_i18n_structure и cot_i18n_pages).
Системные требования и зависимости
- Cotonti версии 1.0+ (протестировано с PHP 8.5+ и MySQL 8.4).
- Модуль
page– должен быть установлен и активен. - Плагин
i18n(Content Internationalization) – должен быть установлен и активен. Именно из его таблиц (cot_i18n_structureиcot_i18n_pages) плагин узнаёт, для каких категорий и страниц есть перевод на конкретный язык. - Для работы красивых URL требуется настроенный mod_rewrite в Apache (или аналог в Nginx).
Структура плагина
Плагин размещается в папке plugins/sitemap_pages/ и содержит следующие файлы:
sitemap_pages/
├── sitemap_pages.setup.php # Заголовок, метаданные и настройки плагина
├── sitemap_pages.ajax.php # Основной обработчик запросов (AJAX)
├── inc/
│ └── sitemap_pages.functions.php # Функции: генерация карт, работа с URL и языками
├── lang/
│ ├── sitemap_pages.ru.lang.php # Русские подписи к настройкам
│ └── sitemap_pages.en.lang.php # Английские подписи к настройкам
├── tpl/
│ ├── sitemap_pages.tpl # Шаблон для обычного urlset
│ └── sitemap_pages.index.tpl # Шаблон для индексного файла (sitemapindex)
└── setup/
└── sitemap_pages.install.php # Автоматическое добавление ссылки в robots.txt при установке
Шаблоны уже содержат правильную XML-разметку и не требуют ручной правки.
Установка
- Скачайте папку
sitemap_pagesи скопируйте её в директориюplugins/вашего сайта Cotonti. - Перейдите в админку: Расширения → Плагины.
- Найдите в списке
Pages Sitemap (multilingual)и нажмите Установить. - При установке плагин автоматически добавит строку
Sitemap: https://вашсайт/sitemap-pages.xmlвrobots.txt(если файл доступен для записи). Старые упоминанияsitemap-pages.xmlбудут удалены, чтобы избежать дублирования.
После установки плагин готов к настройке.
Настройка плагина в админке
Перейдите в Расширения → Плагины → Pages Sitemap (multilingual) → Настройки.
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| Языки (languages) | пусто | Список языков через запятую, например: en,ru,ua. Если оставить пустым, используются все активные языки из конфигурации Cotonti (Cot::$cfg['languages']). |
| Язык по умолчанию (default_lang) | ua | Язык, для которого в URL не добавляется префикс (например, /page.php?id=1 вместо /ua/page.php?id=1). |
| Использовать красивые URL (use_pretty_urls) | 0 (выключено) | Если включено (1), адреса карт будут иметь вид /sitemap-pages.xml и /en/sitemap-pages.xml. Если выключено, используются прямые ссылки с index.php?r=sitemap_pages. Рекомендуется включить после настройки .htaccess. |
| Включать пагинацию категорий (pageCategoryPagination) | 1 (включено) | Если у категории несколько страниц материалов, в карту будут добавлены URL с параметрами ?d=2, ?d=3 и т.д. |
| Частота изменения страниц (page_freq) | weekly | Значение тега <changefreq> для страниц. |
| Приоритет страниц (page_prio) | 0.5 | Значение тега <priority> для страниц. |
| Макс. ссылок на часть карты (perpage) | 50000 | Если общее количество URL превышает это число, карта будет разбита на несколько файлов (в большинстве случаев это не требуется). |
| Время жизни кеша (cache_ttl) | 3600 | Период (в секундах), через который кеш карт будет считаться устаревшим и пересоздастся при следующем обращении. |
После изменения настроек нажмите Сохранить.
Настройка .htaccess
Для работы красивых URL (если вы включили use_pretty_urls) добавьте в корневой .htaccess следующие строки сразу после правила RewriteRule ^sitemap\.xml$ ...:
RewriteRule ^sitemap-pages\.xml$ index.php?r=sitemap_pages [QSA,L]
RewriteRule ^(en|ru|pl|ua)/sitemap-pages\.xml$ index.php?r=sitemap_pages&l=$1 [QSA,L]
Важно: флаг
[QSA](Query String Append) обязателен, потому что языковое правило Cotonti уже может добавить параметр?l=en, и безQSAон будет потерян.
Убедитесь, что эти правила расположены до строки # All the rest goes through standard rewrite gateway.
Настройка robots.txt
Плагин при установке автоматически добавляет строку:
Sitemap: https://вашсайт/sitemap-pages.xml
Если автоматическое добавление не сработало (например, файл robots.txt недоступен для записи), добавьте эту строку вручную в конец файла.
Если вы хотите перечислить все языковые карты напрямую, можно добавить:
Sitemap: https://вашсайт/sitemap-pages.xml
Sitemap: https://вашсайт/en/sitemap-pages.xml
Sitemap: https://вашсайт/ru/sitemap-pages.xml
Sitemap: https://вашсайт/pl/sitemap-pages.xml
Однако предпочтительнее использовать индексный файл (см. ниже) и указывать только его.
Проверка в браузере
Сразу после установки и настройки можно открыть следующие адреса (кеш создастся автоматически при первом обращении):
- Основной язык (ua):
https://вашсайт/sitemap-pages.xml - Английская версия:
https://вашсайт/en/sitemap-pages.xml - Русская версия:
https://вашсайт/ru/sitemap-pages.xml - Польская версия:
https://вашсайт/pl/sitemap-pages.xml - Индексный файл (список всех языков):
https://вашсайт/index.php?r=sitemap_pages&a=index
Каждая из этих ссылок покажет XML‑документ с URL‑адресами страниц (и категорий, если включена пагинация). Если вы видите пустой <urlset>, проверьте, есть ли для данного языка переведённые страницы в таблице cot_i18n_pages, и включён ли плагин i18n с корректными локалями.
Как отправить в Google Search Console
- Войдите в Google Search Console (https://search.google.com/search-console).
- Выберите нужный ресурс (сайт).
- В левом меню перейдите: Индекс → Файлы Sitemap.
- Нажмите Добавить новый файл Sitemap.
- Вставьте URL индексного файла:
https://вашсайт/index.php?r=sitemap_pages&a=index - Нажмите Отправить.
Google прочитает индексный файл и автоматически добавит все языковые подкарты, которые в нём перечислены. Также можно отправить каждую языковую карту отдельно, но это не обязательно.
После отправки проверьте статус — должно появиться «Успешно» и количество обнаруженных страниц.
Кеширование и его очистка
Плагин сохраняет сгенерированные XML‑файлы в папке datas/cache/sitemap_pages/. Внутри вы увидите:
ua.xml– карта для языка по умолчанию.en.xml,ru.xml,pl.xml– карты для других языков.*.count– вспомогательные файлы с количеством записей.sitemap_pages_index.xml– индексный файл (если он был запрошен).
Если вы изменили настройки плагина или внесли правки в код, удалите все файлы из этой папки вручную (через FTP или файловый менеджер). При следующем обращении к любой карте кеш пересоздастся автоматически. В повседневной работе очистка не требуется – только при изменениях.
Устранение неполадок
- Все языковые URL показывают только
ua.xml.
Причина: отсутствует флаг[QSA]в правилах.htaccess(см. раздел 5). ДобавьтеQSAв обе строки. - В URL дублируется языковой префикс (
/en/en/page.php?id=1).
Причина: функцияsitemap_pages_urlне удаляет уже добавленный префикс. Убедитесь, что вinc/sitemap_pages.functions.phpиспользуется правильная версия функции (она очищает путь от известных префиксов). - Для некоторых языков пустой файл.
Значит, в таблицеcot_i18n_pages(илиcot_i18n_structure) нет записей с соответствующей локалью. Проверьте переводы в плагинеi18n. - После изменения настроек карта не обновляется.
Очистите кеш вручную (удалите содержимоеdatas/cache/sitemap_pages/). - Ошибка «XML declaration allowed only at the start of the document» в браузере.
Убедитесь, что в шаблонахsitemap_pages.tplиsitemap_pages.index.tplнет строки<?xml version="1.0" encoding="UTF-8"?>, а сам скрипт начинается с правильной XML-декларации (она добавляется программно). Также проверьте, что в начале файлов нет BOM или лишних пробелов. - Google Search Console не принимает карту.
Убедитесь, что файл соответствует стандарту Sitemap Protocol. Для проверки используйте валидатор XML-карт, например:
https://www.xml-sitemaps.com/validate-xml-sitemap.html
Дополнительные замечания
- Шаблон
sitemap_pages.index.tplиспользуется только для страницы с?a=indexи формирует<sitemapindex>. Если вы не планируете использовать индекс, этот шаблон можно не трогать. - Плагин полностью независим от старого плагина
sitemap. Вы можете продолжать использовать их одновременно для разных модулей. - При добавлении нового языка убедитесь, что он присутствует:
- в настройках плагина (
languages); - в правилах
.htaccess(список(en|ru|pl|ua)); - в функции удаления префиксов (
$knownLangsвsitemap_pages_url).
- в настройках плагина (
- Все вопросы, предложения и сообщения об ошибках можно направлять в поддержку:
https://abuyfile.com/forums/cotonti/custom/plugs/
Что лучше: один огромный файл или раздельные карты по модулям и языкам?
Прямой ответ: раздельные карты по модулям и языкам — лучше для моего конкретного проекта. Один огромный файл создаёт больше проблем, чем решает.
Вот сравнение по ключевым пунктам.
✅ Преимущества раздельных карт (мой подход)
- Производительность генерации
Каждая карта генерируется только для своего модуля (market / page) и языка. Это быстрее, потребляет меньше памяти и не блокирует сайт. Огромный общий файл пришлось бы пересобирать целиком даже при изменении одной страницы. - Гибкое кеширование
У каждого модуля свой TTL кеша (Time To Live — это время жизни кеша в секундах). Товары могут обновляться ежедневно, а страницы — раз в неделю. В общем файле такой гибкости нет - там всем нужно с. - Устойчивость к ошибкам
Если сломается генерация карты товаров, карта страниц продолжит работать. В монолитном файле одна ошибка ломает всё. - Удобство отладки
Сразу видно, какой модуль/язык вызвал проблему. Логика каждого модуля изолирована. - Соответствие архитектуре Cotonti
Cotonti модульный — плагиныsitemap_marketиsitemap_pagesнезависимы, их можно устанавливать и обновлять отдельно. Монолит нарушил бы эту идею. - SEO‑прозрачность
Поисковики получают чёткую структуру: отдельная карта для товаров, отдельная для страниц, каждая в нескольких языковых версиях. Это упрощает индексацию и анализ покрытия в Search Console. - Обход лимитов
Google принимает файлы до 50 000 URL и 50 МБ. Разделяя по модулям и языкам, вы избегаете превышения лимита без дополнительного дробления.
❌ Недостатки раздельных карт
- Больше записей в robots.txt
Вместо одной строкиSitemapнужно либо перечислить несколько карт, либо добавить индексный файл (sitemapindex), который ссылается на остальные. Это не проблема, а небольшое усложнение. - Чуть больше запросов от поисковиков
Вместо одного файла бот загрузит несколько. Но это копеечная нагрузка, и Google нормально обрабатывает множество sitemap‑файлов.
🤔 Что было бы с одним большим файлом
- Генерация занимала бы в разы больше времени, использовала больше памяти.
- При каждом обновлении любого модуля пришлось бы пересобирать весь файл целиком.
- Труднее соблюсти лимит в 50 000 URL — пришлось бы всё равно дробить на части, теряя смысл монолитности.
- Отладка стала бы сложнее: любая ошибка в одном модуле рушила бы всю карту.
В старом монолитном плагине все модули (market, page, forums, users) собирались в один XML‑файл (или несколько частей, если превышен лимит). При этом:
- Настройки
market_freq,page_freq,forums_freq,users_freqзадавали только тег<changefreq>внутри XML – они сообщали поисковику, как часто предположительно меняется контент. Но они не управляли реальной перегенерацией карты. - Реальная частота перегенерации определялась единственным параметром
cache_ttlдля всего плагина. Как только кеш устаревал (с момента последней генерации проходило больше секунд, чем указано вcache_ttl), собирались заново данные всех модулей сразу – даже если товары обновляются каждые 5 минут, а страницы – раз в месяц.
Таким образом, добавление одного нового товара заставляло пересобирать весь гигантский файл: категории и товары market, страницы, форумы, пользователей. Чем больше модулей было включено, тем дольше и ресурсоёмчее была каждая регенерация.
В новом подходе (раздельные плагины) каждый модуль имеет собственный cache_ttl, поэтому:
- Карта товаров может перегенерироваться каждые 30 минут,
- Карта страниц – раз в сутки,
- Карта форумов – раз в неделю.
Когда обновляется товар, пересобирается только карта товаров, а карты страниц и форумов остаются в кеше и не тратят ресурсы. Это и есть гибкость, которой не хватало монолиту.
Вывод:
Вывод: текущий подход — раздельные карты по модулям и языкам — оптимален для Cotonti. Он масштабируется, быстрее работает и лучше соответствует модульной архитектуре системы. Один огромный файл выигрывает только в минимализме robots.txt, но это преимущество нивелируется использованием индексного файла (sitemapindex), который вы можете легко включить.
Теперь мультиязычные карты страниц вашего сайта будут автоматически обновляться и индексироваться поисковыми системами.
Товар без файла для загрузки
- Категория расширения
- SEO и оптимизация
Автор контента
Оффлайн
webitproff
Последняя авторизация: 04.08.2026 10:21
Чем могу помочь?
Оказываю весь спектр услуг по CMF Cotonti. Разработка открытых и закрытых корпоративных интернет порталов, небольших социальных сетей, торговые площадки, маркетплейсы, биржи фриланса, каталоги товаров оптовых поставщиков, интернет-магазин под заказ, чтобы делать совместные покупки и групповые совместные продажи от имени нескольких продавцов.
Разработки на GitHub бесплатно
Telegram
- 03.08.2026 23:04
- 04.08.2026 10:21
Связанные и похожие товары
Витрина Market PRO
CMS, Скрипт и Движок - веб сайта онлайн-витрины, интернет магазина инфопродуктов и цифровых товаров. Разные цены в разных валютах на товар. Онлайн-оплата в криптовалюте за товары и услуги.