封面图404:一篇新文章上线后首页破图是怎么修好的
本文最后更新于 2026年8月23日 晚上
今天发了两篇文章到博客,刚打开首页发现不对劲——前两篇文章的封面位置是破图图标,不是图片。

两张封面图都显示为破图,下方只露出了 alt 文字。
翻车现场
文章是博客助手技能(blog-helper)自动发布的。流程没问题:选题、写稿、审核、校对、发布,一路绿灯。封面图也生成了,文件名也填进了 front matter 的 index_img 字段。
但线上打开就是破图。浏览器网络面板看:
1 | |
文件名是对的,index_img 写的就是 /img/cover-xxx.jpg。但服务器上没这个文件。
根因:封面图重命名时加了多余前缀
追 publish-heso.py 的封面图同步逻辑,第 133 行:
1 | |
publish_filename 是 ND-20260724-002-jarvis-upgrade-feishu-fix.md,去掉 .md 后 _cover_slug = ND-20260724-002-jarvis-upgrade-feishu-fix。
封面图被复制成了 cover-ND-20260724-002-jarvis-upgrade-feishu-fix.jpg。
但 draft.py 写 index_img 时用的是纯 slug:/img/cover-jarvis-upgrade-feishu-fix.jpg,不含 ND-YYYYMMDD-NNN 前缀。
两边对不上:
index_img 期望 |
实际文件名 | 结果 |
|---|---|---|
/img/cover-jarvis-upgrade-feishu-fix.jpg |
cover-ND-20260724-002-jarvis-upgrade-feishu-fix.jpg |
404 |
/img/cover-collect-cron-false-negative.jpg |
cover-ND-20260724-001-collect-cron-false-negative.jpg |
404 |
第一篇文章(collect-cron)连封面图都没同步过去——发布时 cover.jpg 不在 archive 根目录,在 images/ 子目录里。cover_patterns 里虽有 images/cover.jpg,但原文件名叫 false-negative-fix.png,不匹配。所以第一篇是双重故障:名字对不上 + 文件根本没找到。
怎么修的
两步走:
1. 立即救火——手动复制封面图到正确位置:
1 | |
git add + git push,GitHub Pages 缓存刷新后封面图恢复。
2. 改代码,防止复发——publish-heso.py 第 133 行,去 ND-YYYYMMDD-NNN- 前缀:
1 | |
修复后测试:
| 文件名 | 旧 _cover_slug |
新 _cover_slug |
|---|---|---|
ND-20260724-002-jarvis-upgrade-feishu-fix.md |
ND-20260724-002-jarvis-... |
jarvis-upgrade-feishu-fix |
ND-20260724-001-collect-cron-false-negative.md |
ND-20260724-001-collect-... |
collect-cron-false-negative |
修复后

两张封面图正常加载。左边是架构图,右边是深色背景关键词图。
教训
index_img 写什么,封面图文件就存什么名字。
这不是 draft.py 的问题,也不是 index_img 字段设计的问题。问题在 publish-heso.py 把完整文件名(含日期编号)当成 slug 用了,而 front matter 里的 index_img 不含日期编号。
以后加类似”文件名重命名”逻辑时,先问自己:别的模块引用这个文件时用什么名字?
参考
- blog-helper 技能文档
publish-hexo.py封面图同步逻辑(已修复)