站点地图 sitemap.xml 配置
1. 什么是 sitemap?
Sitemap(站点地图) 是一个列出网站所有重要页面的文件(通常是 sitemap.xml),用于告诉搜索引擎有哪些页面可以被抓取和索引。如果没有 sitemap,很多页面不会被及时收录。
2. 为什么 sitemap 对 SEO 很重要
sitemap帮助搜索引擎正确高效理解网站
-
新课程、新课时上线后,Google 可以通过 sitemap 直接发现新页面,提高收录速度
-
覆盖深层页面, 有些页面如果没有外链或入口较少,例如:
- /courses/[courseSlug]
- /courses/[courseSlug]/lessons/[lessonSlug]
-
提供结构化信息,比如 lastModified,changeFrequency,priority,帮助搜索引擎更智能地抓取
3. Next.js 中实现 sitemap
以 RaytonX Learn 为例,在 App Router 中,可以直接使用:
// app/sitemap.ts
import { MetadataRoute } from "next";
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const baseUrl = "https://raytonx.com";
const courses = await getAllCourses();
const lessons = await getAllLessons();
return [
// 首页
{
url: `${baseUrl}/courses`,
lastModified: new Date(),
},
// 课程页
...courses.map((course) => ({
url: `${baseUrl}/courses/${course.slug}`,
lastModified: new Date(course.updated_at),
})),
// 课时页
...lessons.map((lesson) => ({
url: `${baseUrl}/courses/${lesson.courseSlug}/lessons/${lesson.slug}`,
lastModified: new Date(lesson.updated_at),
})),
];
}
4. sitemap 更新策略
新课时发布后,sitemap 如何更新?
- 动态生成, 每次访问 /sitemap.xml, 实时查询数据库,返回最新内容
- 构建时生成 sitemap, 内容更新需要重新部署
RaytonX Learn 使用 动态 sitemap + 数据库查询, 及时更新。
5. 子网站 sitemap.xml 如何同步到主域名下
因为 RaytonX Learn 部署在域名子路径下,正常情况sitemap的地址在 https://raytonx.com/courses/sitemap.xml
主域名下配置 sitemap.xml 和 robots.txt, 然后通过 sitemap index 使搜索引擎发现子网站的 sitemap
-
robots.txt
import type { MetadataRoute } from "next"; export default function robots(): MetadataRoute.Robots { return { rules: { userAgent: "*", allow: "/", }, sitemap: "https://raytonx.com/sitemap.xml", }; } -
sitemap.xml
// app/sitemap.xml/route.ts import { NextResponse } from "next/server"; export async function GET() { const xml = `<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>https://raytonx.com/sitemap-main.xml</loc> </sitemap> <sitemap> <loc>https://raytonx.com/courses/sitemap.xml</loc> </sitemap> </sitemapindex>`; return new NextResponse(xml, { headers: { "Content-Type": "application/xml", }, }); }
这样搜索引擎就能通过 /sitemap.xml 来获得子站的 /courses/sitemap.xml