
页面迟迟不被收录,多因爬虫沿站内链接爬行,层级过深或缺少入口的页面被长期遗漏。sitemap 把希望收录的 URL 集中告知搜索引擎,下面给出可落地做法。
一、先弄清 sitemap 解决什么问题
1. 爬虫发现页面的路径有限
百度 Baiduspider、Googlebot 主要依赖站内链接爬行。孤立页面、深层分页、前端异步渲染的链接很难被稳定发现;站点越大抓取配额越分散,新页面排队越久。sitemap 补上不依赖站内链接的入口。
2. 真正有效的字段只有 lastmod
sitemap 协议支持 loc、lastmod、changefreq、priority 四个字段。Google 已明确忽略 changefreq 与 priority,百度只做部分参考。真正影响抓取的是 lastmod:真实修改时间能让爬虫判断哪些页面值得优先重抓,从而提升网站收录效率。
二、生成一份符合规范的 sitemap
1. XML 结构与体积限制
根节点是 urlset 并声明 sitemaps.org 命名空间;每个 URL 对应一个 url 节点,loc 必填且必须是含协议与域名的绝对地址。单文件上限 50000 条 URL、未压缩 50MB,编码 UTF-8。
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.example.com/front/57.html</loc>
<lastmod>2026-11-04</lastmod>
</url>
</urlset>
2. 内容站点的动态生成写法
PHP 站点无需手工维护文件,遍历已发布文章表输出即可,注意只输出可访问页面并做 XML 转义。
$rows = $pdo->query('SELECT id, updatetime FROM article WHERE isshow = 1')->fetchAll();
foreach ($rows as $r) {
printf("<url><loc>%s/%d.html</loc><lastmod>%s</lastmod></url>\n",
'https://www.example.com', $r['id'], date('Y-m-d', $r['updatetime']));
}
文章数超过 50000 时按分片拆分,再建索引文件:根节点换成 sitemapindex,用 sitemap 子节点列出各分片地址,爬虫会逐片抓取。
三、提交与验证
1. robots.txt 声明与提交入口
在 robots.txt 末尾加一行 Sitemap: https://www.example.com/sitemap.xml 让爬虫定位文件,并确认反爬规则没屏蔽该路径。提交入口:百度搜索资源平台「普通收录」和 Google Search Console「站点地图」分别填入地址。
2. 验证节点与常见失效原因
自查很简单:浏览器访问 sitemap 地址,返回的必须是 XML 而非 HTML。常见失效原因:loc 写成相对地址无法解析;文件返回 404;URL 带参数造成重复收录;服务端把它交给前端路由返回 HTML 入口页;lastmod 写成未来时间被判不可信。
关键配置提示
- 只提交返回 200 且可索引的页面,排除 404、跳转页与带 noindex 标记的页面。
- 文章更新后同步刷新 lastmod,不要写死固定日期,否则爬虫会逐步降低重抓频率。
- sitemap 是内链与 robots.txt 的补充而非替代,孤岛页面仍需加入站内导航。

快来评论,快来抢沙发吧~