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

文章目录

    周末继续 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式