
В исходном требовании описан конкретный симптом: к адресам блога добавляется каталог личного кабинета. Причина в самой задаче не установлена. Учебный разбор ниже показывает, какие связи проверить и как доказать исправление. Все пути условны; они не раскрывают устройство, домен или данные конкретного клиента.
Установить, что находится по ошибочному адресу
Сначала откройте несколько адресов непосредственно из полученного XML. Проверьте статус ответа, цепочку перенаправлений, конечный путь и содержание. Ошибочный адрес может возвращать статью, страницу входа, пустой шаблон, 404 или перенаправление на правильный URL. Внешне эти ситуации похожи в отчёте, но требуют разных действий. Нельзя сделать вывод об индексации только по наличию строки в карте.
Сравните адрес из меню блога с адресом в Sitemap. Если посетитель переходит на /journal/article-a/, а карта содержит /account/journal/article-a/, зафиксируйте оба пути и время получения. Затем проверьте canonical на основной странице статьи. Эти три представления должны описывать одну выбранную публичную страницу, но сама по себе одинаковая строка canonical не исправляет ошибочную генерацию карты.
Не удаляйте ошибочный маршрут до понимания его поведения. Если сервер уже обслуживал его как копию статьи, могут существовать внешние ссылки и накопленная история обхода. Решение о перенаправлении принимают по фактическому назначению пути. Если это закрытый кабинет, нельзя ради старой строки Sitemap сделать его публичным или открыть всё дерево служебных маршрутов.
| Наблюдение | Что проверять дальше | Чего не заключать |
|---|---|---|
| Ошибочный путь возвращает 404 | Генератор и кэш карты | Что статья удалена целиком |
| Возвращает форму входа | Контекст кабинета и маршрутизацию | Что это публичная копия статьи |
| Показывает ту же статью | Основной URL и обработку дубля | Что canonical уже решил всё |
| Перенаправляет на верный путь | Зачем в карте промежуточный адрес | Что генератор исправен |
Найти источник базового пути
URL часто собирается из домена, базового каталога раздела и slug статьи. Проверяйте каждую часть отдельно. Ошибка может появиться, если генератор использует текущий путь запроса вместо публичного пути блога. Запуск из административного раздела или кабинета тогда меняет результат, хотя сами статьи и их slug остаются прежними.
В учебном примере функция получает «journal» как раздел и «article-a» как идентификатор материала. Если базовый путь не передан явно, она может взять каталог текущей страницы. Это проверяемая гипотеза, а не универсальное объяснение. Сохраните входные значения генератора и результат для запуска из разных контекстов, не записывая при этом сессионные данные и секретные параметры запроса.
Проверьте конфигурацию раздела, поля CMS и общие настройки сайта. Иногда лишний префикс хранится в самом шаблоне ссылки, иногда появляется только при соединении двух уже нормализованных частей. Обратите внимание на абсолютные и относительные пути, ведущий слеш, завершающий слеш и повторное добавление раздела. Косметическое удаление повторов не заменяет выбор правильного источника.
Отделить публичный адрес от административного контекста
Генератор карты должен знать, к какому публичному сайту и разделу относится материал, независимо от места запуска. Задача по расписанию, административная кнопка и обычный HTTP-запрос могут иметь разные окружения. Если одинаковые данные дают разные URL, зависимость от контекста нужно сделать явной либо убрать. Иначе исправление одной точки запуска оставит ошибку в другой.
В многосайтовой установке дополнительно проверяют выбор сайта. Общий инфоблок или общая база не означают один публичный домен. Материал может принадлежать нескольким витринам с разными правилами адресации. В карту конкретного сайта должны попадать его основные адреса, а не первый домен из глобальной конфигурации. Нельзя надёжно выбрать домен по случайному заголовку запроса без разрешённого сопоставления.
Для фонового запуска задайте воспроизводимый контекст. В рабочем документе укажите, откуда берутся домен, язык и каталог блога. Не полагайтесь на то, что фоновая задача случайно стартует из нужной папки. Проверка на копии должна включать тот же способ запуска, который используется по расписанию: успешная ручная генерация ещё не подтверждает автоматический сценарий.
Согласовать Sitemap, ссылки и canonical
Выберите основной URL статьи и используйте единое правило его построения. Оно должно применяться к карте, внутренней ссылке и канонической ссылке страницы. Речь идёт о согласованном правиле, а не о хранении одной жёстко прописанной строки в каждом шаблоне. Когда название раздела или домен изменится, разрозненные строки снова разойдутся.
Google рекомендует указывать в Sitemap полные абсолютные адреса и выбирать страницы, которые владелец хочет видеть в поиске. Карта помогает сообщить предпочтительные URL, но не гарантирует обход или индексацию. Эти положения не требуют добавлять в XML личный кабинет, результат поиска или каждый параметр интерфейса. Источник карты должен отбирать публичные материалы по понятным условиям.
Проверьте язык, слеши и протокол. Адрес со слешем и адрес без него могут вести к одному материалу через перенаправление, но карта не должна случайно чередовать их. Canonical должен указывать выбранную основную версию, а не просто повторять любой текущий запрос с лишним префиксом. Согласование особенно полезно проверить на статье с нестандартным slug и на материале во вложенном разделе.
Исправлять генератор, а не готовую выгрузку
После локализации ошибки измените место, где формируется неправильная часть URL. Не добавляйте обработку «удалить account везде»: такое слово может быть законной частью slug или другого публичного маршрута. Исправление должно опираться на структуру адреса. Если базовый путь выбирается неверно, замените его источником публичного раздела, а не фильтром произвольной подстроки.
Рассмотрите, кто ещё использует функцию построения URL. Она может формировать меню, хлебные крошки, ссылки в письмах или экспорт. Прежде чем менять общую функцию, найдите потребителей и проверьте их ожидания. Порой безопаснее передать генератору явный публичный контекст, чем менять поведение помощника, от которого зависят административные страницы.
Тест должен воспроизводить именно исходный дефект. Полезны несколько вариантов: запуск из корня сайта, из служебного каталога и фоновым способом. Для одной и той же статьи ожидается одинаковый публичный адрес. Отдельно проверяют, что законный сегмент, похожий на служебное слово, не удаляется. Такой тест защищает правило, а не конкретное написание одного примера.
Проверить данные статьи и правила отбора
Ошибка пути может сочетаться с лишними материалами в карте. После исправления префикса убедитесь, что генератор не включает черновики, скрытые записи и материалы с будущей датой, если правила сайта не предусматривают их публичную доступность. Иначе технически красивые URL всё ещё будут вести к недоступным страницам. Условия публикации должны быть общими для списка статей и карты.
Не переносите дату изменения XML на все элементы как дату обновления содержания. Если статья не менялась, ежедневная генерация карты не означает ежедневное обновление материала. Поле lastmod, когда оно используется, должно отражать содержательное изменение по правилам проекта. Это отдельный вопрос от исправления пути, но именно во время переработки генератора его удобно проверить.
Удалённые материалы тоже требуют явной политики. Их не следует возвращать в Sitemap из старой сохранённой выборки. Если материал переехал, карта должна содержать конечный основной адрес. Если он окончательно снят, удалите его из текущей карты и проверьте ответ прежней страницы отдельно. Sitemap не заменяет корректные статусы и маршрутизацию самого сайта.
Исключить старый кэш карты
После изменения кода карта может продолжить отдавать прежний XML. Проверьте все уровни сохранения: файл на диске, кэш приложения, обратный прокси и сеть доставки, если она используется. Важно установить, какой компонент формирует ответ на публичном URL. Пересоздание файла в одном каталоге бесполезно, если сервер отдаёт другой экземпляр или закэшированную версию.
Сравните содержимое после штатной генерации, а затем выполните второй запуск без дополнительных изменений. Ошибочный префикс не должен вернуться. Проверка повторного выполнения защищает от ситуации, когда ручная команда использовала правильный контекст, а регулярная задача снова применила старые настройки. Не ограничивайтесь поиском одной исправленной строки в локальном файле.
Проверьте заголовки и фактический ответ карты обычным запросом. Для расследования можно сохранить контрольную сумму и время получения локально, но не выводить в публичную статью инфраструктурные адреса и внутренние пути. Учебный XML достаточно показывает ошибку. Если карта разделена на несколько файлов, проверьте также индекс карт и то, что он ссылается на актуальные дочерние файлы.
Что делать с уже известными поисковику адресами
Сначала приведите в порядок сайт и карту, затем наблюдайте повторный обход. Удаление строки из Sitemap не означает мгновенное исчезновение URL из поисковой базы. Поисковик может знать адрес из внешних ссылок или прежнего обхода. Правильное поведение самого URL зависит от того, был ли это дубль, удалённая страница или служебная область, и должно быть согласовано отдельно.
Если ошибочная версия представляла ту же публичную статью и решение предусматривает постоянный переезд, проверьте перенаправление на основной материал. Не перенаправляйте все неизвестные адреса на главную: посетитель теряет ожидаемую страницу, а диагностика перестаёт различать реальные материалы и ошибки. Правило должно сопоставлять известную статью, сохраняя разумную обработку несуществующего пути.
Инструменты вебмастера полезны для проверки прочитанной карты, выбранного canonical и известных ошибок. Не обещайте конкретный срок индексации и не считайте отсутствие ошибки сразу после отправки доказательством успеха. Сохраните дату проверки, выбранные примеры и наблюдаемый результат. По этим сведениям можно различить исправленный генератор и ещё не обновившееся состояние поисковой системы.
Собрать небольшую, но достаточную матрицу приёмки
Выберите обычную статью, статью во вложенном разделе, материал с нестандартным slug и запись, которая не должна быть публичной. Для первых проверьте наличие единственного основного адреса, для последней отсутствие в карте. Затем повторите генерацию через штатную задачу. Эта выборка проверяет структуру URL и отбор содержания, не заставляя вручную открывать весь блог.
Полезно отдельно проверить адрес со служебным словом внутри нормального slug. Он показывает, что исправление не удаляет подстроку вслепую. Добавьте запрос с неизвестным хостом в разрешённой тестовой среде, если генератор зависит от домена. Результат не должен превращаться в произвольный внешний URL, который затем попадёт в публичный XML.
| Проверка | Ожидаемое поведение |
|---|---|
| Генерация из служебного раздела | Публичные пути не получают его префикс |
| Повторная штатная генерация | Исправленные адреса сохраняются |
| Скрытый материал | Не появляется как публичная статья |
| Сопоставление URL и canonical | Одна выбранная основная версия |
| Старый неверный адрес | Обрабатывается по согласованной политике |
Оставить правило, которое можно сопровождать
В технической заметке зафиксируйте источник публичного домена и базового пути, условия отбора статей, точку запуска и способ обновления кэша. Следующему разработчику должно быть понятно, почему нельзя использовать текущую папку запроса. Это полезнее комментария «исправлен Sitemap», который не объясняет зависимость и не помогает при добавлении ещё одного раздела.
В редакторской инструкции достаточно указать, какие изменения материала влияют на URL и когда обновляется карта. Не требуйте от редактора вручную чистить XML после каждого сохранения. Автоматическое построение должно оставаться автоматическим; проверяемый инвариант состоит в том, что опубликованная статья получает один правильный публичный адрес независимо от места запуска генерации.
Снимок XML до и после можно показать в статье как учебный пример с условными путями. Реальный кабинет, адрес сервера и приватные параметры для этого не нужны. Полноценный результат проверки включает источник URL, повторную генерацию и ответ страницы. Лишь после этого имеет смысл передавать обновлённую карту поисковику и отслеживать, как он её обработал.
Документация и источники
- Google: создание Sitemap: Абсолютные URL и выбор адресов для карты
- Google: canonical: Согласование карты с основными адресами