网站部署 - SEO优化¶
之前把 网站部署到 Netlify(免费、配置简单、支持全球访问),服务器和域名都由 Netlify 提供,但这个结构无法稳定支持国内搜索引擎收录,所以再优化一下
优化目标¶
内容能被国内外主流搜索引擎抓取并收录
影响因子¶
收录影响因素(国内引擎):
| 影响因子 | 说明 |
|---|---|
| 1)政策合规性 | 未备案的境内服务器网站基本无法被收录,ICP备案 是敲门砖和信任状 |
| 2)可访问性与速度 | 页面加载快速稳定,延迟 < 100ms,境外服务器建议搭配境内 CDN 加速 |
| 3)内容质量与相关性 | 提供原创、高质量、对中文用户有价值的内容,保持稳定且持续的更新 |
| 4)技术友好性 | 适配移动端、开启 HTTPS、提供 robots.txt 和 sitemap.xml |
| 5)外链与站点权重 | 其他高权重、高信任度网站的链接 |
收录概率(国内引擎):
| 条件组合 | 收录概率(国内引擎) |
|---|---|
| 境内服务器 + 备案域名 | 高 |
| 境内服务器 + 未备案域名 | 极低 |
| 境外服务器 + 备案域名 | 中 |
| 境外服务器 + 未备案域名 | 极低 |
| 境外服务器 + 境内CDN + 备案域名 | 高 |
| 境外服务器 + 境内CDN + 未备案域名 | 低 |
方案设计¶
1)方案(境外服务器 + 境内CDN + 备案域名)
采用 最具性价比、维护最轻量 的方案(无需购买国内服务器、无需重新部署程序):
- 境外(原有):源服务器(例如 Netlify) + Netlify 域名
- 境内(新增):备案域名 + CDN(例如腾讯云 CDN、阿里云 CDN、又拍云)
2)结构
用 Netlify 服务器作为源服务器,让境内 CDN 指向源服务器(国内用户和爬虫访问 CDN 节点,CDN 回源到 Netlify):
%%{init: {'theme': 'default', 'themeVariables': {'fontSize': '14px'}}}%%
flowchart LR
subgraph "`**境内**`"
A@{ shape: brace-r, label: "国内用户" }
B@{ shape: notch-rect, label: "备案域名" }
C@{ shape: lin-cyl, label: "腾讯云 CDN" }
end
subgraph "`**境外**`"
D@{ shape: brace-r, label: "国外用户" }
E[Netlify 域名]
F[(源服务器(Netlify))]
end
A --> B --> C <-.回源&缓存.-> F
D --> E --> F
3)优势(腾讯云 CDN + Netlify 服务器):
| 特点 | 说明 |
|---|---|
| 🚀 免维护 | 不用自己同步文件,自动回源拉取最新内容 |
| 🌏 全球加速 | 海外用户直接走 Netlify,国内走 CDN |
| 🧠 国内引擎可收录 | 国内 IP + HTTPS + 备案域名 = 可收录 |
| 💰 成本极低 | 每月 10GB 免费,长期 0 成本运行 |
CDN 配置流程¶
%%{init: {'theme': 'default', 'themeVariables': {'fontSize': '14px'}}}%%
flowchart TB
A[腾讯云 CDN 配置流程] --> B{前期准备}
B --> C[注册腾讯云 & 备案域名]
B --> D[源站]
click B "#前期准备"
C & D --> E
subgraph E [核心配置流程]
F[添加加速域名] --> H[配置 CNAME 解析]
click F "#添加加速域名"
click H "#配置-CNAME"
end
E --> I{后续配置}
I --> J[缓存配置]
I --> K[...]
I --> L[HTTPS配置]
click J "#缓存策略配置"
click L "#HTTPS-配置"
J & K & L --> M[验证]
前期准备¶
1)注册腾讯云,领取或购买 CDN 流量包(新用户可领取0元50GB CDN 境内流量包,此后还有 10GB/月 免费额度)
2)购买域名提交备案
添加加速域名¶
备案通过后,腾讯云,选中「内容分发网络 CDN → 域名管理 → 添加域名」:
| 配置项 | 建议值 |
|---|---|
| 加速区域 | 中国境内 |
| 加速域名 | hongjun.vip(已备案域名) |
| 加速类型 | CDN网页小文件 |
| IPv6访问 | 可关闭(国内 SEO 用不到) |
| 源站类型 | 自有源 |
| 回源协议 | HTTPS(Netlify 站点是 https) |
| 源站地址 | jaywhj.netlify.app : 443 |
| 回源HOST | jaywhj.netlify.app |
点击「确认添加」,然后「跳过推荐配置」,直接进入「CNAME 配置」,不要点「完成」
配置 CNAME¶
接上一步:
- 界面会看到一个域名 CNAME 地址:
hongjun.vip.cdn.dnsv1.com - 还有一个「一键配置」按钮,点它,快速配置 CNAME 解析,点「确定」
验证:
- 回到界面,点「验证CNAME状态」,确定生效后最后再点「完成」
- 在 DNS 控制台「云解析 DNS」,找到已备案的域名,点击右侧「解析」,应该能看到刚配置好的 1 条 CNAME 记录(如果没有,则手动添加):
| 主机记录 | 记录类型 | 记录值 |
|---|---|---|
| @ | CNAME | hongjun.vip.cdn.dnsv1.com |
缓存策略配置¶
目的:
- 保持更新及时性(对搜索引擎友好)
- 减少回源流量(节省成本)
- 最大化缓存效果(提升访问速度)
域名管理 → 选中域名 → 管理,找到「缓存配置」:
1)节点缓存过期配置(CDN 节点保存时间):
| 类型 | 内容 | 缓存行为 | 优先级权重 | 备注 |
|---|---|---|---|---|
| 全部文件 | 全部文件 | 缓存7天 | 1 | 兜底 |
| 文件后缀 | woff2;woff;ttf;eot;otf | 缓存180天 | 2 | 提高加载速度 |
| 文件后缀 | jpg;jpeg;png;gif;ico;svg;webp;bmp | 缓存30天 | 3 | 提高加载速度 |
| 文件后缀 | js;html;css;xml;shtml;htm;json | 缓存1天 | 4 | 保持更新及时性 |
2)浏览器缓存过期配置(用户浏览器保存时间):
| 类型 | 内容 | 缓存行为 | 备注 |
|---|---|---|---|
| 文件后缀 | woff2;woff;ttf;eot;otf | 缓存90天 | 提高加载速度 |
| 文件后缀 | jpg;jpeg;png;gif;ico;svg;webp;bmp | 缓存1天 | 提高加载速度 |
| 文件后缀 | js;html;css;xml;shtml;htm;json | 缓存30分钟 | 保持更新及时性 |
3)缓存键规则配置(区分不同 URL 的缓存):
| 类型 | 内容 | 忽略参数 | 忽略大小写 |
|---|---|---|---|
| 全部文件 | 全部文件 | 全部忽略 | 否 |
HTTPS 配置¶
腾讯云免费 SSL 证书有效期只有 3 个月,且不支持自动续签,不是很方便
解决方案:
- A:每三个月手动操作一次(免费 + 手动续签 + 手动上传)
- B:使用 Let's Encrypt + acme.sh / Certbot 脚本(免费 + 自动续签 + 自动上传)
- C:购买付费证书(付费 + 自动续签 + 无需上传)
| 模块 | 服务商 | 功能 |
|---|---|---|
| 证书颁发 | Let's Encrypt | 全球最广泛使用的免费 DV 证书 |
| 签发/续签托管 | acme.sh / Certbot | 从 ZeroSSL、Let's Encrypt 等 CA 生成免费证书 |
| 自动化任务 | GitHub Actions / 云服务器 | 定时任务,自动签发/续签、自动上传、自动更新 CDN |
| 域名 DNS | DNSPod(腾讯云DNS) | 域名解析托管 |
| CDN 部署 | 腾讯云 CDN | HTTPS 部署 |
DNSPod Token 配置¶
DNSPod 「账号中心 → API密钥」,选择 DNSPod Token → 创建密钥,记下 ID 和 Token
腾讯云 API 密钥配置¶
DNSPod 「账号中心 → API密钥」,选择 腾讯云 API 密钥 → 新建密钥,记下 SecretId 和 SecretKey
acme.sh 自动化签发配置¶
可使用 GitHub Actions 工作流来触发定时任务完成证书的自动签发、上传与更新(省去云服务器):
1)在 GitHub 创建一个私有仓库
2)设置仓库 secrets
仓库 → Settings → Secrets and variables → Actions → New repository secret,分别添加:
| Secret 名称 | 内容 | 来源 |
|---|---|---|
| DP_Id | DNSPod ID | DNSPod 控制台 |
| DP_Key | DNSPod Token | DNSPod 控制台 |
| QCLOUD_SECRET_ID | 腾讯云 SecretId | 腾讯云访问管理 |
| QCLOUD_SECRET_KEY | 腾讯云 SecretKey | 腾讯云访问管理 |
| DOMAIN | 你的备案域名 | 备案域名 |
| ACME_EMAIL | 随意一个真实邮箱 | 手动填写 |
3)创建工作流 acme-auto.yml
仓库首页 → Add file → Create a new file:.github/workflows/acme-auto.yml
内容见 acme-auto.yml
这是自己撸的一套「SSL 全链路无人值守自动化」方案(好吧 GPT-5),具备以下特色:
| 功能模块 | 特色说明 |
|---|---|
| 自动签发 ✓ | 自动调用 Let's Encrypt + acme.sh 签发新证书 |
| 智能续签 ✓ | 自动检查证书有效期,仅在证书即将过期时( ≤30 天)才续签 |
| 自动上传 ✓ | 自动上传证书至腾讯云 SSL(SSLPod) |
| CDN 热更新 + 区域回退 ✓ | 自动更新 CDN HTTPS 配置,支持多区域(广州→北京→上海)回退 |
| 旧证书自动清理 ✓ | 按 Alias 精确删除旧证书,防止堆积 |
4)运行与自动化
仓库 → Actions → 选中左侧 Auto Renew SSL and Upload to Tencent Cloud CDN → 点击右侧 Run workflow,等待运行完成,查看腾讯云:
5)开启强制跳转 HTTPS
内容分发网络 CDN → 域名管理 → 点击域名 → HTTPS配置,启用强制跳转:
- 跳转类型:Http->Https
- 跳转方式:301跳转
- 携带头部:否
测试验证¶
直接访问 hongjun.vip,看是否能打开
添加子域访问¶
前面添加了根域 hongjun.vip,但用户如果通过子域 www.hongjun.vip 访问,则不通,这时可配置子域重定向到根域,可选方案有:
- A:DNS 显性 URL
- B:源站重定向
- C:CDN URL 重写
采用 CDN URL 重写方式:
1)按前面添加加速域名的步骤,继续添加 www.hongjun.vip,基础配置一样
2)添加后同样「跳过推荐配置」,直接进入「CNAME 配置」,不要点「完成」
3)通过「一键配置」快速配置好 CNAME 解析,最终在域名解析里应该能看到共 2 条记录:
| 主机记录 | 记录类型 | 记录值 |
|---|---|---|
| @ | CNAME | hongjun.vip.cdn.dnsv1.com |
| www | CNAME | www.hongjun.vip.cdn.dnsv1.com |
4)HTTPS配置,跟前面一样,选择之前上传的证书
5)缓存配置 → 访问URL重写配置:
| 配置项 | 规则 |
|---|---|
| 匹配设置 | 不选 |
| 待重写URL | /* |
| 目标Host | https://hongjun.vip |
| 目标Path | /$1 |
验证访问 www.hongjun.vip,看是否能访问,并且自动跳转到了 https://hongjun.vip
技术配置¶
可通过在网站根目录提供 robots.txt 和 sitemap.xml 文件来优化搜索引擎的抓取行为:
- robots.txt:控制搜索引擎爬虫的访问权限(允许/禁止抓取特定页面或目录)
- sitemap.xml:提供网站页面结构的导航地图,帮助搜索引擎更高效索引网站内容
配置 robots.txt¶
配置 sitemap.xml¶
在绝大多数情况下,sitemap.xml 都是自动生成的,自动生成能确保 sitemap.xml 始终与网站内容同步
MkDocs 网站可通过自定义模板自动生成 sitemap.xml,再结合插件 mkdocs-document-dates 可实现基于内容的更新动态生成对应的 lastmod,提升页面的收录效率与可见性,具体步骤见 使用模板变量 - Example 1
提交收录¶
主动提交网址至搜索引擎: