golang gin 生成网站地图文件 sitemap.xml

更新日期: 2025-10-12 阅读次数: 17 字数: 1089 分类: golang

周末继续 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 聊聊, 查看更多联系方式