Вопрос или проблема
У меня есть сайт на next.js. Я хочу индексировать сайт для SEO, чтобы сам сайт был виден в Google. Когда я запрашиваю индексацию в консоли Google, он сообщает, что страницу нельзя индексировать из-за несанкционированного запроса (401).
У меня есть файл robots.txt и sitemap.xml в публичной папке.
Вот мой robots.txt:
User-agent: *
Disallow:
Sitemap: https://cardcounter21.com/sitemap.xml
Карта сайта:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- Главная страница -->
<url>
<loc>https://cardcounter21.com/home</loc>
<lastmod>2024-09-08</lastmod>
<changefreq>ежемесячно</changefreq>
<priority>1.0</priority>
</url>
<!-- Страница "Как учиться" -->
<url>
<loc>https://cardcounter21.com/learnhow</loc>
<lastmod>2024-09-08</lastmod>
<changefreq>ежемесячно</changefreq>
<priority>0.9</priority>
</url>
<!-- Страница справочника -->
<url>
<loc>https://cardcounter21.com/handbook</loc>
<lastmod>2024-09-08</lastmod>
<changefreq>ежемесячно</changefreq>
<priority>0.8</priority>
</url>
<!-- Страница премиум-справочника -->
<url>
<loc>https://cardcounter21.com/premiumhandbook</loc>
<lastmod>2024-09-08</lastmod>
<changefreq>ежемесячно</changefreq>
<priority>0.8</priority>
</url>
<!-- Страница upsell Card Counter -->
<url>
<loc>https://cardcounter21.com/cardcounterupsell</loc>
<lastmod>2024-09-08</lastmod>
<changefreq>ежемесячно</changefreq>
<priority>0.7</priority>
</url>
</urlset>
Вот мой middleware.ts:
import { authMiddleware } from "@clerk/nextjs";
import { NextResponse, NextRequest } from "next/server";
const isBot = (req: NextRequest) => {
const userAgent = req.headers.get('user-agent') || '';
const botUserAgents = [
'Googlebot',
'Bingbot',
'Yahoo! Slurp',
'DuckDuckBot',
'Baiduspider',
'YandexBot',
'Sogou',
'Exabot',
'facebot',
'ia_archiver'
];
return botUserAgents.some((bot) => userAgent.includes(bot));
};
export default authMiddleware({
afterAuth(auth, req, evt) {
if (isBot(req)) {
return NextResponse.next();
}
if (!auth.userId && !auth.isPublicRoute) {
const home = new URL("/home", req.url);
return NextResponse.redirect(home);
}
},
publicRoutes: [
"/sitemap",
"/home",
"/learnhow",
"/handbook",
"/premiumHandbook",
"/CardCounterUpsell",
"/sitemap.xml",
"/robots.txt",
"/api/simulation",
"/Images/Logo",
"/test",
"/api/webhook",
"/api/welcomeemails",
"/api/handbookEmails"
],
});
export const config = {
matcher: ["/((?!.+\\.[\\w]+$|_next).*)", "/", "/(api|trpc)(.*)"],
};
Любая помощь будет очень appreciated!
Спасибо!
Пример robots.txt:
User-agent: Googlebot
Disallow: /nogooglebot/
User-agent: *
Allow: /
Sitemap: https://www.example.com/sitemap.xml
Ссылка https://developers.google.com/search/docs/crawling-indexing/robots/create-robots-txt
У нас также есть интернет-магазин на Next.js.
В начале у нас также была такая же проблема с индексацией. Я думаю, что URL карты сайта, который вы упомянули выше, неверен.
Проверьте правильный URL карт сайта в Next.js.
И вы можете исправить эту проблему.
Ответ или решение
Для решения вашей проблемы с индексацией страниц Next.js сайта в Google, важно понять несколько ключевых моментов, которые могут причинять ошибки 401 (Unauthorized) во время попыток индексации.
-
Проблема с авторизацией:
-
Судя по вашему коду
middleware.ts
, вы используетеauthMiddleware
из пакета@clerk/nextjs
. Это означает, что доступ к вашим страницам может быть ограничен. Если Googlebot (или любой другой робот) не имеет прав доступа для просмотра контента, он может получать ошибку 401. Вам нужно убедиться, что ваши страницы, которые вы хотите индексировать, доступны для поисковых систем, так как в противном случае они не смогут их сканировать. -
В вашем коде есть условие:
if (!auth.userId && !auth.isPublicRoute)
, которое перенаправляет неавторизованных пользователей на главную страницу. Это может привести к тому, что Googlebot не сможет получить доступ. Убедитесь, что страницы, которые вы хотите сделать общедоступными, указаны в массивеpublicRoutes
.
-
-
Проверьте настройки вашего
robots.txt
иsitemap.xml
:- Ваш
robots.txt
выглядит корректно, так как вы разрешаете доступ ко всем страницам. Однако также убедитесь, что файл доступен для Googlebot, и нет других правил, запрещающих доступ к вашим страницам. - Убедитесь, что URL вашего
sitemap.xml
правильный и доступен. Вы можете проверить это, открыв его в браузере:https://cardcounter21.com/sitemap.xml
. Если он загружается без ошибок, тогда все в порядке.
- Ваш
-
Убедитесь в правильной настройке маршрутов:
- Убедитесь, что все страницы, которые вы хотите индексировать, возвращают правильные коды состояния HTTP (200 OK) и не редиректят с ошибкой (например, 404 Not Found). Это поможет убедиться, что Google может их найти.
- Используйте инструменты, такие как
Google Search Console
, для просмотра отчетов о сканировании и индексации. Эти отчеты могут указать на конкретные проблемы с доступностью страниц.
-
Проверьте конфигурацию вашего Next.js приложения:
- Убедитесь, что ваше приложение Next.js правильно настроено для серверного рендеринга (SSR) или статической генерации (SSG). Если вы используете статическую генерацию, убедитесь, что все страницы, которые должны быть индексированы, генерируются корректно. Для этого вы можете воспользоваться функциями
getStaticProps
илиgetServerSideProps
.
- Убедитесь, что ваше приложение Next.js правильно настроено для серверного рендеринга (SSR) или статической генерации (SSG). Если вы используете статическую генерацию, убедитесь, что все страницы, которые должны быть индексированы, генерируются корректно. Для этого вы можете воспользоваться функциями
-
Тестирование и отправка в
Google Search Console
:- После внесения изменений протестируйте доступ к страницам через
Google Search Console
. Используйте функцию "Проверка URL", чтобы убедиться, что Google может получить доступ к вашим страницам без ошибок.
- После внесения изменений протестируйте доступ к страницам через
-
Последние шаги:
- Если проблема сохраняется, изучите более детально логи вашего сервера или используйте инструменты веб-разработчика в вашем браузере, чтобы отследить запросы, которые делает Googlebot.
В случае, если все эти шаги не помогли решить вашу проблему, рассмотрите возможность временного отключения механизма аутентификации на страницах, которые должны быть проксированы, чтобы увидеть, устранит ли это проблему. После устранения проблем вы всегда сможете вернуть аутентификацию на место.
Если у вас возникнут дополнительные вопросы или потребуется более детальное руководство, не стесняйтесь задавать их. Удачи с вашими усилиями по индексации!