QQ扫一扫联系
对方发来一条需求:「网站地图」,还附了一张竞品的截图,上面是几十个链接按栏目排成几列。你要给的不是一个 sitemap.xml,而是一个人能点进去看的页面。
网站地图(SiteMapPage)做的就是这个人看的页面。装完访问 /sitemap.html,路由上没有挂任何中间件,游客能直接打开。
两张表。分类表 site_map_page_category 有 pid、sort、title,后台是树形管理,最多两级。
内容表 site_map_page 只有四个字段:categoryId、sort、title(最长 200)、url(最长 200)。后台编辑时链接用的是链接类型字段,可以填站内相对路径也可以填完整地址。
分类列表走永久缓存,键是 SiteMapPageCategories,只有在后台增删改分类时才清。直接改数据库里的分类不会刷新前台,这是排查「改了没生效」时第一个要看的地方。

这一点要讲清楚:这个模块不会自动扫描你的站点生成地图,每一条链接都要在后台录入。站点结构变了,页面不会跟着变。
好处是你能控制显示什么:不想让某个栏目出现在地图上,不录就行。坏处是要维护,一个几十页的站点首次录入得花点时间,之后每次加栏目都要记得同步。
如果维护成本承受不了,可以考虑自己写个脚本按栏目表生成,或者在渲染时改成读取各模块的分类接口。这个模块本身没提供自动化的路子。
适合:栏目结构稳定、页面数量在几十到一两百的站点,做一个人看的导航页,顺带给爬虫多一些内部链接。
不适合:内容量大的站点。手工录入上千条不现实,而且页面上没有分页,全量渲染会让页面很长。
另外它不带 sitemap.xml 输出,/sitemap.html 是一个 HTML 页面。要提交给搜索引擎的那个 xml,得另外解决。
先建分类,分类名最多 20 个字符,写「产品中心」这种四字刚好,写长名字会被截断。
再录链接。链接字段是个纯文本框,不会校验地址是否存在,录错了前台就是一个 404。建议录完批量点一遍。
最后给 sort 填值。页面按分类排序、分类内按条目排序,默认都是空的,不填的话顺序取决于数据库返回顺序,不同环境下可能不一致。给分类填 10、20、30,条目也照这个间隔来,后面插入方便。