跳转至

网站部署 - 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

接上一步:

  1. 界面会看到一个域名 CNAME 地址:hongjun.vip.cdn.dnsv1.com
  2. 还有一个「一键配置」按钮,点它,快速配置 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

ID:598000
Token:1md3646b5c4d7ba5969c48e521629ird

腾讯云 API 密钥配置

DNSPod 「账号中心 → API密钥」,选择 腾讯云 API 密钥 → 新建密钥,记下 SecretId 和 SecretKey

SecretId:AKID441jEXeZJp9LL8kA22BlAML9k8NjttKU
SecretKey:86628FFG4e1B7u52LSbcTHzdDl7Xlrtip

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,等待运行完成,查看腾讯云:

  • SSL 证书 → 我的证书,查看是否存在刚上传的 AutoSSL-{domain} 证书(记下ID)
  • 内容分发网络 CDN → 证书配置,查看域名对应的证书是否已更新为最新证书(看证书ID)

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.txtsitemap.xml 文件来优化搜索引擎的抓取行为:

  • robots.txt:控制搜索引擎爬虫的访问权限(允许/禁止抓取特定页面或目录)
  • sitemap.xml:提供网站页面结构的导航地图,帮助搜索引擎更高效索引网站内容

配置 robots.txt

User-agent: *
Allow: /
Sitemap: https://hongjun.vip/sitemap.xml

配置 sitemap.xml

在绝大多数情况下,sitemap.xml 都是自动生成的,自动生成能确保 sitemap.xml 始终与网站内容同步

MkDocs 网站可通过自定义模板自动生成 sitemap.xml,再结合插件 mkdocs-document-dates 可实现基于内容的更新动态生成对应的 lastmod,提升页面的收录效率与可见性,具体步骤见 使用模板变量 - Example 1

提交收录

主动提交网址至搜索引擎:

评论区