Перейти к содержанию

Карта сайта и управление индексированием

Подготовим sitemap для публичного выпуска и отделим его от локальной среды. Карта должна перечислять страницы, предназначенные для индексации, включая сохранённый PHP-адрес. Она не является способом заставить поисковик индексировать любой файл. Результат урока — согласованная конфигурация sitemap, robots и метаданных локального просмотра.

Добавляем @astrojs/sitemap версии 3.7.4, подтверждённой официальным реестром. Интеграция работает при сборке и использует site для абсолютных адресов. В обычном локальном профиле она не включается. Производственный профиль выбирается явным POLKA_PUBLIC_BUILD=true. Этот флаг не выполняет публикацию, а только определяет ожидаемое содержимое выпуска.

Публичные адреса и локальная среда

Старый publicPath появился после обработки готового HTML, поэтому карта должна учитывать его отдельно. Учебный legacy-paths.json связывает временный адрес с сохранённым. Фильтр sitemap исключает временный путь, а customPages добавляет публичный. В результате не должно получиться две равноправные записи для одной статьи. Это соответствие требует синхронизации с Markdown.

Ручной реестр показан открыто, чтобы читатель увидел границу между генерацией маршрута и преобразованием выпуска. Для большого сайта лучше выводить обе формы из единого manifest. Дублирование значения в двух файлах допустимо лишь как ограниченное учебное решение. Если изменить publicPath и забыть карту, внутренние ссылки и sitemap станут описывать разные сайты.

Поисковая страница исключается из карты. Она представляет интерфейс запроса, а не новый самостоятельный материал для каждого сочетания параметров. Каталог, темы и статьи имеют более устойчивый редакционный смысл. При настоящей индексационной политике следует отдельно решить, какие списки и страницы пагинации полезны, а не копировать пример без анализа содержания.

Endpoint robots.txt.ts в локальном профиле возвращает Disallow: /. Layout добавляет noindex,follow. Эти настройки имеют разные назначения: robots ограничивает обход, meta описывает индексирование прочитанного документа. Не выдавайте закрытую локальную среду за защищённый приватный архив. Настройки поисковиков не являются авторизацией доступа к файлам.

В публичной ветке robots разрешает обход и указывает sitemap-index.xml на учебном домене. Перед настоящим выпуском домен нужно заменить в конфигурации и тексте endpoint. Проверяйте согласованность origin, а не только существование XML. Карта с polka.example была бы неправильной для ProfessorWeb даже при корректной XML-структуре.

Ожидаемый публичный выпуск содержит карту с сохранённым путём и без временной копии, а локальный — закрывающие индексирование признаки и без включённой интеграции. Сборка не выполнялась, поэтому конкретный XML не получен. После разрешённой сборки нужно сравнить набор карты с набором публичных адресов, а не считать наличие файла достаточным подтверждением полноты.

Если каталог растёт до нескольких тысяч статей, карта остаётся только одним каналом обнаружения. Обычные ссылки, тематические страницы и последовательности уроков продолжают иметь значение. Не устраняйте навигацию с аргументом, что робот уже получил sitemap. Для посетителя карта XML не заменяет понятный путь к материалу.

Полный файл astro.config.mjs текущего этапа:

import { defineConfig } from 'astro/config';
import sitemap from '@astrojs/sitemap';
import { readFileSync } from 'node:fs';
const legacy = JSON.parse(readFileSync(new URL('./legacy-paths.json', import.meta.url), 'utf8'));
const production = process.env.POLKA_PUBLIC_BUILD === 'true';
const origin = 'https://polka.example';
export default defineConfig({
  output: 'static', site: origin, build: { format: 'preserve' },
  integrations: production ? [sitemap({
    filter: page => !page.endsWith('/search.html') && !Object.keys(legacy).some(path => page === new URL(path, origin).href),
    customPages: Object.values(legacy).map(path => new URL(path, origin).href),
  })] : [],
});

Полный файл src/pages/robots.txt.ts текущего этапа:

export function GET() {
  const production = import.meta.env.POLKA_PUBLIC_BUILD === 'true';
  const body = production ? 'User-agent: *\nAllow: /\nSitemap: https://polka.example/sitemap-index.xml\n' : 'User-agent: *\nDisallow: /\n';
  return new Response(body, { headers: { 'Content-Type': 'text/plain; charset=utf-8' } });
}

Полный файл legacy-paths.json текущего этапа:

{"/articles/markdown.html":"/my/content/intro.php"}

Разбор состояния библиотеки

Robots и meta не являются гарантией того, что локальная или случайно доступная страница никогда не появится в индексе. Поисковая система должна получить и обработать соответствующие правила, а закрытый доступ требует другого механизма. Для редакционного preview следует не только ставить нужные признаки, но и не публиковать его вместо настоящего выпуска. Эта граница важнее красивого XML-файла в папке проекта.

Список customPages описывает старые публичные пути, но сам не создаёт их. Если postbuild не выполнен, карта может перечислять адрес, для которого нет файла. И наоборот, перенос может создать страницу, забыв обновить sitemap. Поэтому будущая сверка должна сравнить оба набора. Наличие каждого механизма по отдельности не подтверждает их согласованность в одном выпуске.

Интеграция может сформировать индекс карты и отдельные файлы списка. Поэтому robots ссылается на ожидаемый sitemap-index, а не на произвольное имя из старого генератора. При изменении версии интеграции нужно сверить фактический результат. Не заполняйте инструкцию названиями файлов только по памяти. Закреплённая версия помогает сделать предметный будущий просмотр, но не заменяет его.

Для самостоятельного разбора выпишите все публичные статьи, каталоги и темы маленькой библиотеки. Затем отдельно перечислите исключения: временный маршрут старого материала и интерфейс поиска. Такой список позволяет понять filter без знания внутреннего устройства интеграции. Если новый тип страниц добавится позднее, он должен получить своё решение об индексировании, а не случайно унаследовать чужой статус.

Обновление даты в sitemap не следует превращать в сигнал, который меняется при каждой сборке без редактирования текста. Мы не добавляем выдуманное lastmod. Для реального проекта дата должна выражать существенное изменение материала по выбранной политике. Иначе карта будет сообщать о постоянной свежести страниц, которые остаются теми же. Редакционные данные и время запуска инструмента имеют разные значения.

После разрешённого выпуска карту можно отправить в инструменты поисковых систем и наблюдать обработку. Это отдельный следующий процесс, не результат написания конфигурации. В этом локальном заказе нет отправки файлов, обращения к личным Webmaster-отчётам или подтверждения индексирования. Сохраняем различие между подготовленным источником адресов и фактическим поведением внешней системы.

При сборке из командной строки один и тот же флаг должен быть доступен конфигурации и серверной подготовке страниц. Если локальная среда настроена иначе, сравните полученные robots и meta, а не доверяйте только имени профиля. Настройки среды не следует передавать через пользовательский параметр URL. Публичность выпуска является решением подготовки, а не переключателем, которым случайный посетитель меняет политику индексации.

Условия для самостоятельного наблюдения

Это план будущего разбора, а не журнал выполненных проверок. Рассмотрите одинаковые исходные данные и сопоставьте действие с ожидаемым состоянием.

Условие Ожидаемое состояние и его граница
Локальный профиль Интеграция карты не включается, документ получает noindex и robots запрещает обход.
Публичный профиль Явный флаг включает sitemap, но сам не отправляет файлы на сервер.
Старый PHP материал Публичный путь добавляется отдельно вместо временной HTML-копии.
Реестры разошлись Sitemap и ссылки могут объявлять разные адреса одной записи.
Поисковая страница Она исключается из карты как интерфейс запросов, а не самостоятельный учебный материал.
Домены различаются Нужно согласовать site, robots и абсолютные адреса карты до выпуска.

Оглавление серии, курсы ProfessorWeb и полный архив исходников. Для этого урока выберите lesson-12.

Первичные источники: Sitemap, Configuration.

Редакционный статус: локальный черновик. Установка, учебные программы, браузерные сценарии, тесты и публикация не выполнялись. Описанные эффекты ожидаемые.