Skip to content

Commit 5275f4d

Browse files
committed
SEO 深度优化:IndexNow、lastmod、结构化数据增强
- 添加 IndexNow GitHub Action 自动通知 Bing/Yandex 索引更新 - 集成 jekyll-last-modified-at 插件支持 sitemap lastmod - 添加站点级 Person Schema JSON-LD 结构化数据 - 优化 HTML lang 属性为 zh-Hans - 创建 INDEXNOW-SETUP.md 配置指南 - 更新 SEO-CHECKLIST.md 包含新功能
1 parent bec0fd6 commit 5275f4d

File tree

6 files changed

+221
-1
lines changed

6 files changed

+221
-1
lines changed

.github/workflows/indexnow.yml

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
name: IndexNow - 通知搜索引擎索引更新
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
paths:
7+
- '_posts/**'
8+
- '*.md'
9+
- '_config.yml'
10+
11+
jobs:
12+
notify-indexnow:
13+
runs-on: ubuntu-latest
14+
steps:
15+
- name: Checkout repository
16+
uses: actions/checkout@v4
17+
with:
18+
fetch-depth: 2 # 获取最近两次提交以便比较变化
19+
20+
- name: Get changed files
21+
id: changed-files
22+
run: |
23+
# 获取变更的文件列表
24+
CHANGED_FILES=$(git diff --name-only HEAD^ HEAD | grep -E '^_posts/.*\.md$|^.*\.md$' || true)
25+
26+
# 构建 URL 列表
27+
URLS=""
28+
for file in $CHANGED_FILES; do
29+
if [[ $file == _posts/* ]]; then
30+
# 从文件名提取 slug: _posts/2024-10-17-neovim-cpp-setup.md -> neovim-cpp-setup
31+
filename=$(basename "$file" .md)
32+
slug=$(echo "$filename" | sed 's/^[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-//')
33+
URLS="$URLS https://magic-alt.github.io/$slug/"
34+
fi
35+
done
36+
37+
# 去重并格式化
38+
URLS=$(echo "$URLS" | tr ' ' '\n' | sort -u | tr '\n' ' ' | sed 's/ $//')
39+
echo "urls=$URLS"
40+
echo "urls=$URLS" >> $GITHUB_OUTPUT
41+
42+
- name: Submit to IndexNow
43+
if: steps.changed-files.outputs.urls != ''
44+
run: |
45+
# IndexNow API 端点(Bing/Yandex 都支持)
46+
INDEXNOW_ENDPOINT="https://api.indexnow.org/indexnow"
47+
48+
# 你需要生成一个 IndexNow key(任意 UUID 格式字符串)
49+
# 建议在 GitHub Secrets 中设置 INDEXNOW_KEY
50+
# 或者使用固定值(需要在网站根目录放置对应的验证文件)
51+
INDEXNOW_KEY="${{ secrets.INDEXNOW_KEY }}"
52+
53+
# 如果没有设置 secret,使用示例 key(需要创建验证文件)
54+
if [ -z "$INDEXNOW_KEY" ]; then
55+
INDEXNOW_KEY="your-indexnow-key-here"
56+
echo "⚠️ 警告: 未设置 INDEXNOW_KEY secret,使用默认值"
57+
echo "请访问 https://www.indexnow.org/ 了解如何生成和验证 key"
58+
fi
59+
60+
# 提交每个 URL
61+
for url in ${{ steps.changed-files.outputs.urls }}; do
62+
echo "📤 提交 URL: $url"
63+
64+
curl -X POST "$INDEXNOW_ENDPOINT" \
65+
-H "Content-Type: application/json" \
66+
-d "{
67+
\"host\": \"magic-alt.github.io\",
68+
\"key\": \"$INDEXNOW_KEY\",
69+
\"urlList\": [\"$url\"]
70+
}" || echo "❌ 提交失败: $url"
71+
72+
sleep 1 # 避免过快请求
73+
done
74+
75+
echo "✅ IndexNow 通知完成"
76+
77+
- name: Summary
78+
if: steps.changed-files.outputs.urls != ''
79+
run: |
80+
echo "## IndexNow 提交摘要" >> $GITHUB_STEP_SUMMARY
81+
echo "" >> $GITHUB_STEP_SUMMARY
82+
echo "已通知以下 URL 更新:" >> $GITHUB_STEP_SUMMARY
83+
echo "" >> $GITHUB_STEP_SUMMARY
84+
for url in ${{ steps.changed-files.outputs.urls }}; do
85+
echo "- $url" >> $GITHUB_STEP_SUMMARY
86+
done
87+
echo "" >> $GITHUB_STEP_SUMMARY
88+
echo "🔍 Bing/Yandex 将在几小时内重新抓取这些页面" >> $GITHUB_STEP_SUMMARY

Gemfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ group :jekyll_plugins do
88
gem "jekyll-paginate", "~> 1.1"
99
gem "jekyll-seo-tag", "~> 2.8"
1010
gem "jekyll-sitemap", "~> 1.4"
11+
gem "jekyll-last-modified-at", "~> 1.3"
1112
end
1213

1314
# Allow running `bundle exec jekyll serve` on Ruby >= 3.0

INDEXNOW-SETUP.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# IndexNow 配置指南
2+
3+
IndexNow 是一个协议,允许网站主动通知搜索引擎(Bing、Yandex 等)内容更新,加速索引过程。
4+
5+
## 🔑 设置 IndexNow Key
6+
7+
### 方法 1: 使用 GitHub Secrets(推荐)
8+
9+
1. 生成一个 UUID 格式的密钥:
10+
```bash
11+
# Linux/macOS
12+
uuidgen
13+
14+
# 或在线生成: https://www.uuidgenerator.net/
15+
# 示例: 12345678-1234-1234-1234-123456789abc
16+
```
17+
18+
2. 在 GitHub 仓库设置中添加 Secret:
19+
- 进入仓库 → Settings → Secrets and variables → Actions
20+
- 点击 "New repository secret"
21+
- Name: `INDEXNOW_KEY`
22+
- Value: 你生成的 UUID
23+
24+
3. 在网站根目录创建验证文件:
25+
```bash
26+
# 创建文件: 12345678-1234-1234-1234-123456789abc.txt
27+
# 文件内容就是这个 UUID
28+
echo "12345678-1234-1234-1234-123456789abc" > 12345678-1234-1234-1234-123456789abc.txt
29+
```
30+
31+
4. 提交验证文件到仓库根目录
32+
33+
### 方法 2: 使用固定密钥
34+
35+
如果不想使用 GitHub Secrets,可以:
36+
37+
1. 生成一个 UUID(如上)
38+
2. 编辑 `.github/workflows/indexnow.yml`,将 `your-indexnow-key-here` 替换为你的 UUID
39+
3. 创建对应的验证文件(见上面第 3 步)
40+
41+
## 📋 验证文件示例
42+
43+
在仓库根目录创建文件:`12345678-1234-1234-1234-123456789abc.txt`
44+
45+
文件内容:
46+
```
47+
12345678-1234-1234-1234-123456789abc
48+
```
49+
50+
## 🚀 工作流程
51+
52+
1. 当你推送新文章或修改文章到 `main` 分支时
53+
2. GitHub Actions 自动检测变更的文章
54+
3. 提取文章 URL
55+
4. 通过 IndexNow API 通知 Bing/Yandex
56+
5. 搜索引擎在几小时内重新抓取这些页面
57+
58+
## 🔍 支持的搜索引擎
59+
60+
-**Bing** - 完全支持
61+
-**Yandex** - 完全支持
62+
-**Google** - 不支持(Google 不参与 IndexNow)
63+
64+
对于 Google,仍需使用 Google Search Console 的 URL 检查工具手动提交。
65+
66+
## 📊 查看提交结果
67+
68+
1. GitHub Actions 运行后,查看 Actions 页面的摘要
69+
2. 在 Bing Webmaster Tools 查看索引状态
70+
3. 使用 `site:magic-alt.github.io` 搜索验证收录情况
71+
72+
## 🆘 故障排除
73+
74+
### 密钥验证失败
75+
- 确认验证文件名与密钥完全一致
76+
- 确认验证文件在网站根目录可访问:`https://magic-alt.github.io/your-key.txt`
77+
78+
### GitHub Action 失败
79+
- 检查 INDEXNOW_KEY secret 是否正确设置
80+
- 查看 Actions 日志了解具体错误
81+
82+
### 未收录
83+
- IndexNow 只是"通知",不保证立即收录
84+
- 确保在 Bing Webmaster Tools 已验证网站所有权
85+
- 检查 robots.txt 没有禁止抓取
86+
87+
## 📖 相关资源
88+
89+
- [IndexNow 官方文档](https://www.indexnow.org/)
90+
- [Bing IndexNow 集成指南](https://www.bing.com/indexnow)
91+
- [IndexNow API 规范](https://www.indexnow.org/documentation)
92+
93+
---
94+
95+
**注意**: IndexNow 对 Google 无效。Google 推荐使用 Sitemap + Google Search Console 的 URL 检查工具。

SEO-CHECKLIST.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
### 1. 核心插件配置
66
-**jekyll-seo-tag**: 自动生成 SEO 元信息、Open Graph、Twitter Card、JSON-LD 结构化数据
77
-**jekyll-sitemap**: 自动生成 `/sitemap.xml`
8+
-**jekyll-last-modified-at**: 自动追踪文件修改时间,增强 sitemap lastmod
89
- ✅ 已添加到 `_config.yml``Gemfile`
910

1011
### 2. 站点元信息 (_config.yml)
@@ -33,6 +34,21 @@ author:
3334
- ✅ 包含 K 字母设计,紫色渐变背景
3435
- ✅ 适用于社交分享和 SEO
3536

37+
### 6. IndexNow 自动推送 (新增)
38+
- ✅ 创建了 GitHub Action: `.github/workflows/indexnow.yml`
39+
- ✅ 自动检测文章更新并通知 Bing/Yandex
40+
- ✅ 加速 Bing 生态的索引速度
41+
- ⚠️ 需要配置 INDEXNOW_KEY(见 INDEXNOW-SETUP.md)
42+
43+
### 7. 站点级结构化数据 (新增)
44+
- ✅ 在 `head.html` 添加了 Person Schema JSON-LD
45+
- ✅ 包含作者信息、GitHub 链接等
46+
- ✅ 增强搜索引擎对站点主体的理解
47+
48+
### 8. 语言标签优化 (新增)
49+
- ✅ HTML lang 属性设置为 `zh-Hans`
50+
- ✅ 帮助搜索引擎正确识别中文内容
51+
3652
---
3753

3854
## 📋 下一步操作(需要手动完成)

_config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,17 @@ plugins:
2828
- jekyll-paginate
2929
- jekyll-seo-tag # 自动注入 SEO 元信息与结构化数据
3030
- jekyll-sitemap # 自动生成 /sitemap.xml
31+
- jekyll-last-modified-at # 自动追踪文件最后修改时间
3132

3233
# 站长验证(填入验证码)
3334
webmaster_verifications:
3435
google: "" # Google Search Console 验证码
3536
bing: "" # Bing Webmaster Tools 验证码
3637

38+
# Sitemap lastmod 配置
39+
# jekyll-sitemap 会自动使用 jekyll-last-modified-at 提供的时间
40+
# 或使用 Git 提交时间作为 lastmod
41+
3742
mathjax: true
3843

3944
markdown: kramdown

_includes/head.html

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<!DOCTYPE html>
2-
<html lang="{{ page.lang | default: site.lang }}">
2+
<html lang="{{ page.lang | default: site.lang | default: 'zh-Hans' }}">
33
<head>
44
<meta charset="utf-8">
55
<meta http-equiv="X-UA-Compatible" content="IE=edge">
@@ -11,6 +11,21 @@
1111
<!-- Canonical URL -->
1212
<link rel="canonical" href="{{ page.url | absolute_url }}">
1313

14+
<!-- 站点级别的结构化数据 (Person Schema) -->
15+
<script type="application/ld+json">
16+
{
17+
"@context": "https://schema.org",
18+
"@type": "Person",
19+
"name": "{{ site.author.name }}",
20+
"url": "{{ site.url }}{{ site.baseurl }}",
21+
"sameAs": [
22+
"https://github.com/magic-alt"
23+
],
24+
"jobTitle": "Developer & Technical Writer",
25+
"description": "{{ site.description }}"
26+
}
27+
</script>
28+
1429
<meta name="theme-color" content="#0f172a">
1530
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | absolute_url }}">
1631
<link rel="stylesheet" href="{{ "/assets/css/styles.css" | relative_url }}">

0 commit comments

Comments
 (0)