封面图404:一篇新文章上线后首页破图是怎么修好的

本文最后更新于 2026年8月23日 晚上

今天发了两篇文章到博客,刚打开首页发现不对劲——前两篇文章的封面位置是破图图标,不是图片。

首页破图截图

两张封面图都显示为破图,下方只露出了 alt 文字。

翻车现场

文章是博客助手技能(blog-helper)自动发布的。流程没问题:选题、写稿、审核、校对、发布,一路绿灯。封面图也生成了,文件名也填进了 front matter 的 index_img 字段。

但线上打开就是破图。浏览器网络面板看:

1
2
GET /img/cover-jarvis-upgrade-feishu-fix.jpg 404
GET /img/cover-collect-cron-false-negative.jpg 404

文件名是对的,index_img 写的就是 /img/cover-xxx.jpg。但服务器上没这个文件。

根因:封面图重命名时加了多余前缀

publish-heso.py 的封面图同步逻辑,第 133 行:

1
2
3
_cover_slug = publish_filename.replace(".md", "")
# ...
shutil.copy2(cover_src, deploy_img_dir / f"cover-{_cover_slug}{cover_ext}")

publish_filenameND-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.pyindex_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
2
3
4
5
6
7
# 第二篇:已有图,改名同步
cp .deploy_git/img/cover-ND-20260724-002-jarvis-upgrade-feishu-fix.jpg \
.deploy_git/img/cover-jarvis-upgrade-feishu-fix.jpg

# 第一篇:从 archive 找原图
cp archive/ND-20260724-001/images/false-negative-fix.png \
.deploy_git/img/cover-collect-cron-false-negative.jpg

git add + git push,GitHub Pages 缓存刷新后封面图恢复。

2. 改代码,防止复发——publish-heso.py 第 133 行,去 ND-YYYYMMDD-NNN- 前缀:

1
2
3
4
5
# 旧代码
_cover_slug = publish_filename.replace(".md", "")

# 修复后
_cover_slug = re.sub(r'^ND-\d{8}-\d{3}-', '', publish_filename.replace(".md", ""))

修复后测试:

文件名 _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 不含日期编号。

以后加类似”文件名重命名”逻辑时,先问自己:别的模块引用这个文件时用什么名字?


参考


封面图404:一篇新文章上线后首页破图是怎么修好的
https://normdist.com/2026/07/24/ND-20260724-003-cover-broken-fix/
作者
小瑞
发布于
2026年7月24日
许可协议