周末继续 Golang Gin 重构 PHP 的 Magento 电商网站。其中一个需要重构的功能是网站地图 sitemap.xml 文件的生成。 之前做的网站普遍简单,很少超过上万个产品或者文章。而电商类的服务,例如 magento 通常需要导入几十万甚至上百万的产品信息。那么就需要注意一下 sitemap.xml 的配置规范。
golang 三方库
https://github.com/sabloger/sitemap-generator
虽然 Star 数只有 40 个,但是看起来文档还挺详情,准备测试一下。
> go get github.com/sabloger/sitemap-generator/smg
go: downloading github.com/sabloger/sitemap-generator v1.3.0
go: added github.com/sabloger/sitemap-generator v1.3.0
存储目录
一个独立的 sitemap 目录,放到根目录下。也方便 Nginx 规则配置。同时在 golang gin 代码中做访问处理,方便本地调试。
sitemap.xml 的更新机制
- 定时任务,每天凌晨 2 点更新一次
- 手动触发更新
- 批量导入操作完成后,触发更新。用 goroutine 异步处理会不会好一些?
- 新增页面后,手动添加
- 手动添加产品、文章等,触发更新
Priority 的值如何设置
sitemap 中每个条目的 Priority 的主要作用是“引导”爬虫,告诉它们你认为哪些页面最重要,应该优先抓取。 Priority 的值范围是 0.0 到 1.0,1.0 表示最高优先级。但是我不了解具体每个页面的值应该设置为多少。 于是问了一下 DeepSeek: "网站的 sitemap.xml 如果是外贸站的产品链接,Priority 设置成多少合适?":
- 首页:1.0。网站的入口和核心,代表整个网站的最高优先级。
- 核心产品分类/目录页:0.8 - 0.9。这些是产品页面的父级集合页,流量潜力大,重要性仅次于首页。
- 具体产品页:0.8。产品页是转化的最终着陆页,是网站的价值所在,必须设置为高优先级。
- 其他重要页面(关于我们、联系我们): 0.7。这些页面对于建立信任和促成询盘很重要,但不是直接的转化页。
- 博客文章/新闻内容:0.6 - 0.7。用于内容营销和获取长尾流量,重要性低于核心业务页面。
- 标签页、按条件筛选页:0.4 - 0.5。这些页面可能有重复内容问题,优先级应调低,避免爬虫浪费抓取预算。
- 网站条款、隐私政策等:0.3。必要但完全不重要的页面,设置为最低优先级。
具体的设置需要灵活调整,不是所有产品页都必须一模一样。例如:
- 将爆款产品、主打产品的优先级设置为 0.9。或者新发布的博客文章优先级设高。
- 将常规产品的优先级设置为 0.8。
- 将清仓、过季或低利润产品的优先级设置为 0.6。
感觉分析的非常合理。
简单的条目
<url>
<loc>https://www.sunzhongwei.com/</loc>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
复杂的条目
可以同时设置产品图片相关信息。
<url>
<loc>https://www.sunzhongwei.com/product-a.html</loc>
<lastmod>2025-08-22T08:19:56+00:00</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
<image:image>
<image:loc>https://www.sunzhongwei.com/product-a.jpg</image:loc>
<image:title>Some App</image:title>
<image:caption>Some App</image:caption>
</image:image>
<PageMap xmlns="http://www.google.com/schemas/sitemap-pagemap/1.0">
<DataObject type="thumbnail">
<Attribute name="name" value="Some App"/>
<Attribute name="src" value="https://www.sunzhongwei.com/product-a.jpg"/>
</DataObject>
</PageMap>
</url>
单个文件的 URL 数量限制
- 每个 sitemap 文件最多包含 50,000 个 URL 条目
- 每个 sitemap 文件的大小不能超过 50MB(未压缩)
可以通过设置来限制单个文件的 URL 数量,例如设置为 10,000 条。
smProducts := smi.NewSitemap()
smProducts.SetName("product_sitemap")
smProducts.SetLastMod(&now)
sm.SetMaxURLsCount(10000) // Default maximum number of URLs in each file is 50,000 to break
例如,网站有 35,000 个产品页面,那么会生成 4 个 sitemap 文件:
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://localhost:9053/sitemap/product_sitemap3.xml</loc>
</sitemap>
<sitemap>
<loc>http://localhost:9053/sitemap/product_sitemap2.xml</loc>
</sitemap>
<sitemap>
<loc>http://localhost:9053/sitemap/product_sitemap1.xml</loc>
</sitemap>
<sitemap>
<loc>http://localhost:9053/sitemap/product_sitemap.xml</loc>
</sitemap>
</sitemapindex>
其他
- 生产环境部署时,sitemap.xml 使用 Nginx 处理访问
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式