sitemap漏了16篇文章——三站SEO巡检修了两个隐患
巡检触发的
每周一早上8点,Hermes会自动跑一轮三站SEO健康巡检。choumumu.com、keynote.org.cn、blog.choumumu.com——HTTP状态、SSL证书、sitemap、robots.txt、OG标签、Schema结构化数据、图片alt文本,每一项都扫一遍。
这周扫下来,两个站各出了一个问题。都不算大,但放着不管的话影响面不小。
choumumu.com:sitemap少了16篇文章
第一个问题出在choumumu.com。巡检脚本对比了实际发布的文章数和sitemap里的URL数,发现sitemap只有135条,但dist目录下实际有117篇文章加33个页面路由——少了整整16篇。
这16篇是什么?全是7月以来密集发布的木梳知识类文章。搜索引擎通过sitemap发现新内容,sitemap里没有,Googlebot根本不知道它们存在。
问题根源很简单。choumumu.com用的是Astro静态构建,但没有集成@astrojs/sitemap插件。每次发新文章后sitemap不会自动更新,得手动改。大概是最近几篇发完忘了更新,差距就这么拉大了。
修法:Python脚本重构sitemap
手动去改135行的sitemap不太现实。直接写了个Python脚本,思路很简单:
import os, glob
from datetime import datetime
# 扫描 dist 目录下所有 post slug
posts_dir = "dist/posts"
slugs = [d for d in os.listdir(posts_dir)
if os.path.isdir(os.path.join(posts_dir, d))]
# 生成 sitemap XML
today = datetime.now().strftime("%Y-%m-%d")
urls = []
for slug in slugs:
urls.append(f""" <url>
<loc>https://www.choumumu.com/posts/{slug}/</loc>
<lastmod>{today}</lastmod>
<changefreq>monthly</changefreq>
<priority>0.7</priority>
</url>""")
# 加上非文章页面
static_urls = [...] # 33个固定路由
sitemap = f'...{static_plus_posts}'
脚本从dist/posts/自动读取全部117个slug,生成完整的sitemap。还顺便处理了一个细节——移除了一条指向已删除文章shougong-mushu-vs-jiqi-mushu的陈旧链接。
生成后npm run build重新构建,再通过SSH推到生产服务器。验证:live sitemap现在包含了150条URL(33非文章 + 117文章),全部正确。
blog.choumumu.com:少了Twitter Card
第二个问题在blog.choumumu.com。巡检时发现文章模板template.html里没有Twitter Card的元标签——twitter:card、twitter:title、twitter:description这三行全缺。
影响是:在X/Twitter上分享日记文章链接时,不会展开成卡片预览,只显示一条裸URL。在社交媒体分发内容的时候,有没有卡片,点击率能差好几倍。
修复很简单——在模板的OG标签后面补了三行:
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{TITLE}}">
<meta name="twitter:description" content="{{DESCRIPTION}}">
直接SSH到生产服务器改的template.html。不过这里有个限制——博客是静态HTML手动生成的,没有构建步骤,所以这个修复只对新生成的文章生效。已有的19篇日记页面不会被追溯修改。要批量修复的话得另外写个脚本跑一遍所有已发布的diary HTML文件。
修完的成果
| 问题 | 站点 | 影响 | 修复方式 | 状态 |
|---|---|---|---|---|
| Sitemap漏16篇文章 | choumumu.com | 搜索引擎无法发现新内容 | Python脚本重构sitemap | ✅ 已修复 |
| 缺少Twitter Card | blog.choumumu.com | X/Twitter分享不出卡片 | SSH直接改template.html | ✅ 新文章生效 |
两个问题都不大,但都是那种「放着不管会持续漏」的类型。尤其是sitemap,16篇文章如果长期不在索引里,写再多也白费。好在巡检是一周一次自动跑,就算有遗漏,最多也就攒一周。
后续优化方向
choumumu.com的sitemap目前还是手动维护的。最理想的方案是集成@astrojs/sitemap让Astro在每次构建时自动生成——这样就不会再出现文章发了sitemap没更新的情况。不过这个改动可能要调整现有的路由结构,不急着搞,下次重构的时候顺手带上。
想了想,巡检这件事本身也值得记录。从最初手动一个个站点打开浏览器F12看,到现在Hermes全自动跑——HTTP状态、SSL、sitemap、OG、Schema、图片alt一口气查完,发现问题当场修。这才是我想要的AI协作方式:不是替我做决策,而是帮我把容易漏掉的事情盯住。