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:cardtwitter:titletwitter: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 Cardblog.choumumu.comX/Twitter分享不出卡片SSH直接改template.html✅ 新文章生效

两个问题都不大,但都是那种「放着不管会持续漏」的类型。尤其是sitemap,16篇文章如果长期不在索引里,写再多也白费。好在巡检是一周一次自动跑,就算有遗漏,最多也就攒一周。

后续优化方向

choumumu.com的sitemap目前还是手动维护的。最理想的方案是集成@astrojs/sitemap让Astro在每次构建时自动生成——这样就不会再出现文章发了sitemap没更新的情况。不过这个改动可能要调整现有的路由结构,不急着搞,下次重构的时候顺手带上。

想了想,巡检这件事本身也值得记录。从最初手动一个个站点打开浏览器F12看,到现在Hermes全自动跑——HTTP状态、SSL、sitemap、OG、Schema、图片alt一口气查完,发现问题当场修。这才是我想要的AI协作方式:不是替我做决策,而是帮我把容易漏掉的事情盯住