Блог Ресурсы О нас Поиск Темы
Next.js Troubleshooting

Исправление: Google Search Console "Не удалось получить карту сайта" в Next.js (App Router)

Обновлено 10 октября 2025 г.

Категория: Next.js Troubleshooting
Поделиться

Руководство по устранению неполадок карты сайта Next.js для Google Search Console

Если вы сходили с ума, видя ошибку “Не удалось получить карту сайта” в Google Search Console для вашего проекта Next.js, вы не одиноки. Эта неприятная ошибка карты сайта в Google Search Console может помешать Google правильно проиндексировать ваш сайт, что наносит ущерб вашей видимости. Многие разработчики, использующие Next.js App Router, столкнулись с этой проблемой устранения неполадок карты сайта Next.js, когда GSC не может прочитать карту сайта, даже если она кажется полностью доступной в браузере.

К счастью, сообщество разработчиков отследило надежное решение. Это руководство проведет вас по шагам, чтобы исправить ошибку “Не удалось получить”, основываясь на полезном открытии, которым поделились в вопросе на GitHub Next.js.

Давайте вернем вашу карту сайта в индекс и вернем ваш сайт в нужное русло. Для получения дополнительных сведений и обсуждения вы также можете ознакомиться с моим ответом на этот вопрос на GitHub здесь.

Проблема: Почему Google не может получить карту сайта?

Основа проблемы, кажется, заключается в сочетании того, как Next.js обрабатывает маршрутизацию и middleware, и того, как Google Search Console кэширует свои попытки получения. Когда GSC пытается получить доступ к вашему sitemap.xml, он может столкнуться с помехами — часто от middleware, — которые вызывают сбой запроса. Как только это происходит, GSC, похоже, кэширует этот неудачный результат для конкретного URL. Даже после того, как вы устраните основную проблему, повторная отправка того же URL sitemap.xml может не вызвать новую попытку.

Как исправить ошибку “Не удалось получить”

Это решение исходит от пользователя GitHub @segabrielcarvalho, который поделился практическим подходом, решающим проблемы кэширования, маршрутизации и конфликтов middleware с помощью четырех ключевых шагов.

Шаг 1: Принудительно запросите свежую карту сайта с помощью слэша в конце

Это самый простой, но самый важный шаг. Google Search Console, похоже, агрессивно кэширует неудачные попытки получения. Чтобы заставить его попробовать снова с чистого листа, вы можете использовать простую технику сброса кэша.

Вместо отправки https://your-site.com/sitemap.xml, добавьте слэш в конце:

https://your-site.com/sitemap.xml/

Отправка этого немного измененного URL обойдет кэш GSC и вызовет новую попытку получения. Этот простой трюк часто достаточно, чтобы карта сайта была успешно прочитана после внедрения остальных исправлений.

Шаг 2: Обслуживайте карту сайта из вложенного маршрута

Вместо того чтобы размещать файл sitemap.ts в корне вашего каталога app, переместите его во вложенную папку. Это поможет изолировать его и обеспечить правильное обслуживание без конфликтов.

  1. Создайте новую папку sitemap внутри вашего каталога app.
  2. Переместите ваш файл sitemap.ts (или sitemap.js) в нее.

Новый путь к вашему файлу будет: app/sitemap/sitemap.ts

Это изменит публичный URL вашей карты сайта. Новый URL будет:

https://your-site.com/sitemap/sitemap.xml

Не забудьте использовать этот новый URL при отправке его в Google Search Console (с трюком со слэшем в конце!).

Шаг 3: Исключите SEO-файлы из вашего middleware

Middleware мощный, но он также может случайно заблокировать Googlebot доступ к важным файлам, таким как ваша карта сайта и robots.txt. Чтобы предотвратить это, вам нужно обновить ваш middleware.ts, чтобы явно исключить эти файлы.

Конфигурация matcher в вашем файле middleware говорит Next.js, для каких путей должен запускаться middleware. Используя отрицательное предварительное просмотрение (negative lookahead), вы можете указать ему запускаться на всех путях, кроме статических активов и SEO-файлов.

Вот пример middleware, который ничего не делает, но правильно исключает необходимые файлы. Вы можете адаптировать это для вашего существующего middleware.

middleware.ts
import type { NextRequest } from "next/server";
import { NextResponse } from "next/server";

export default function middleware(req: NextRequest) {
  // Сюда может идти ваша логика middleware.
  // Если у вас нет другой логики, просто верните next().
  void req;
  return NextResponse.next();
}

export const config = {
  matcher: [
    /*
     * Сопоставляет все пути запросов, кроме тех, которые начинаются с:
     * - _next/static (статические файлы)
     * - _next/image (файлы оптимизации изображений)
     * - favicon.ico (файл favicon)
     * - robots.txt (файл robots)
     * - sitemap.xml (файл карты сайта)
     * - sitemap/ (вложенные файлы карты сайта)
     * - site.webmanifest (файл манифеста сайта)
     */
    "/((?!_next/static|_next/image|favicon\\.ico|robots\\.txt|sitemap\\.xml|sitemap/.*|site\\.webmanifest).*)",
  ],
};

Эта конфигурация гарантирует, что ваш robots.txt и оба потенциальных пути к карте сайта (/sitemap.xml и /sitemap/sitemap.xml) никогда не будут обработаны middleware, избегая любых потенциальных блокировок или перенаправлений, которые могут сбить с толку Googlebot.

Шаг 4: Создайте правильный файл robots.txt

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

Создайте файл с именем robots.ts или robots.txt в вашем каталоге app со следующим содержимым:

app/robots.ts
import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  return {
    rules: {
      userAgent: '*',
      allow: '/',
    },
    sitemap: 'https://your-site.com/sitemap/sitemap.xml',
  }
}

Или, если вы предпочитаете статический файл:

app/robots.txt
User-agent: *
Allow: /

Sitemap: https://your-site.com/sitemap/sitemap.xml

Обязательно замените https://your-site.com на ваш фактический домен. Этот файл направляет сканеров на новое расположение вашей карты сайта.

Ключевые выводы

В обобщении исправления:

  1. Используйте слэш в конце (/) на URL вашей карты сайта при отправке в GSC, чтобы сбросить кэш.
  2. Переместите файл вашей карты сайта во вложенный маршрут, например app/sitemap/sitemap.ts.
  3. Обновите ваш middleware, чтобы исключить SEO-файлы, такие как robots.txt и sitemap.xml.
  4. Укажите в вашем robots.txt новый URL карты сайта.

Также важно убедиться, что у вас только один источник для вашей карты сайта. Если у вас есть sitemap.xml в папке public и вы также генерируете его из каталога app, могут возникнуть конфликты. Удалите все старые файлы карт сайта и придерживайтесь одного динамически генерируемого.

Следуя этим шагам, вы сможете решить ошибку “Не удалось получить карту сайта” и добиться правильного индексирования вашего сайта Next.js Google. Удачной разработки

Категория Next.js Troubleshooting
Поделиться

Связанные публикации

Получайте последние идеи об ИИ прямо в свой почтовый ящик

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

Только новые аккаунты. Отправляя свой адрес электронной почты, вы согласны с нашей Политика конфиденциальности