Commit f2bfb2f
committed
fix(seo): prevent multiple h1 via remark heading shift
Bing Webmaster 报 4 个页面有多个 <h1>。仓库 324 个 MDX 里 181 个正文
都写了 # 一级标题(markdown 习惯),叠加 page.tsx 渲染的 <h1>{title}</h1>
形成双 h1,是 SEO/无障碍反模式。
不能要求贡献者改写习惯,所以在 build 阶段加 remark 插件自动处理:
function remarkShiftHeadingIfH1(tree) {
if (tree 含 h1) {
所有 heading.depth += 1 (h1→h2 / h2→h3 / ... / h5→h6)
}
}
效果:
- 贡献者照常写 # 标题 / ## 章节 / ### 子节
- 渲染变 <h2> / <h3> / <h4>,保持层级关系
- page.tsx 的 <h1>{title}</h1> 是页面唯一 h1
- MDX 不含 h1 时不动 (作者已从 ## 起,天然合规)
本地验证:
- bq.html: 之前 2 h1 → 1 h1 ✅
- cs/index.html: 之前 3 h1 (含两个 # 中文混排) → 1 h1 ✅
- leetcode 抽样: 1 h1 ✅
历史背景:page.tsx 渲染 h1 是 2025-09-19 commit 7b270d5 加的,
社区贡献的 mdx 早就在写 # 一级标题,双 h1 隐患存在 8 个月直到 Bing
2026-05 扫描才报出。1 parent 78799b5 commit f2bfb2f
1 file changed
Lines changed: 39 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
39 | 71 | | |
40 | 72 | | |
41 | 73 | | |
| |||
86 | 118 | | |
87 | 119 | | |
88 | 120 | | |
| 121 | + | |
89 | 122 | | |
90 | 123 | | |
91 | 124 | | |
92 | 125 | | |
93 | 126 | | |
94 | | - | |
95 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
96 | 133 | | |
97 | 134 | | |
98 | 135 | | |
| |||
0 commit comments