Cloudflare SEO 实战指南:从加速、缓存到 Workers 源码优化
Cloudflare 如何做 SEO 优化|附源码
在网站 SEO 优化中,很多人第一时间想到的是关键词布局、内容质量、外链建设、站内结构等传统手段。但在实际项目中,网站访问速度、稳定性、安全性、爬虫可访问性、缓存策略、重定向规则、HTTPS 配置,同样会直接影响搜索引擎收录与排名。
Cloudflare 作为全球知名的 CDN、DNS、WAF 和边缘计算平台,不仅可以提升网站访问速度,还可以通过合理配置,帮助网站获得更好的 SEO 表现。
本文将系统讲解:
- Cloudflare 对 SEO 的影响
- Cloudflare DNS 如何优化
- CDN 缓存如何提升页面速度
- HTTPS 与重定向如何配置
- Workers 如何实现 SEO 级别优化
- robots.txt、sitemap.xml、canonical 如何处理
- 常见 SEO 问题与解决方案
- 附 Cloudflare Workers 源码示例
一、Cloudflare 为什么会影响 SEO?
搜索引擎排名并不是只看内容。Google、Bing、百度等搜索引擎都会综合考虑网站的访问体验,其中包括:
- 页面加载速度
- 服务器响应时间
- HTTPS 安全性
- 移动端体验
- 页面是否稳定可访问
- 是否存在大量 301 / 302 错误跳转
- 爬虫是否能正常抓取
- 是否存在重复页面
- 是否返回正确 HTTP 状态码
- 是否有清晰的站点地图
Cloudflare 刚好覆盖了很多技术层面的 SEO 关键点。
例如:
- 使用 Cloudflare CDN 可以降低全球访问延迟;
- 使用 Cloudflare Cache 可以减少源站压力;
- 使用 Cloudflare SSL 可以快速启用 HTTPS;
- 使用 Page Rules / Redirect Rules 可以配置 301 跳转;
- 使用 Workers 可以在边缘节点动态修改响应内容;
- 使用 WAF 可以防止恶意爬虫拖慢网站;
- 使用 Brotli / HTTP/3 可以提升资源传输效率。
因此,Cloudflare 不只是“套 CDN”,如果使用得当,它可以成为 SEO 技术优化的重要工具。
二、Cloudflare DNS 优化
SEO 的基础是网站必须稳定可访问,而 DNS 解析速度和稳定性会影响用户访问体验。
Cloudflare 的 DNS 解析速度通常很快,并且支持 Anycast 全球网络,可以提升域名解析效率。
1. 使用 Cloudflare 托管 DNS
将域名的 NS 服务器切换到 Cloudflare 后,可以在 Cloudflare 后台管理 DNS 记录。
常见配置如下:
| 类型 | 名称 | 内容 | 代理状态 |
|---|---|---|---|
| A | @ | 服务器 IP | 已代理 |
| CNAME | www | example.com | 已代理 |
| CNAME | cdn | example.com | 已代理或仅 DNS |
建议主站域名开启橙色云朵,也就是开启代理。
example.com A 1.2.3.4 Proxied
www.example.com CNAME example.com Proxied
开启代理后,用户访问网站时会先经过 Cloudflare,再由 Cloudflare 回源请求服务器。
这样可以获得:
- CDN 加速
- DDoS 防护
- WAF 防护
- HTTPS 支持
- 缓存能力
- HTTP/2、HTTP/3 支持
2. 避免 DNS 配置混乱
很多 SEO 问题都来自域名解析不统一,例如:
example.com可以访问www.example.com也可以访问http://example.com可以访问https://example.com可以访问http://www.example.com也可以访问
如果这些地址都返回 200 状态码,就会形成重复页面,影响权重集中。
推荐做法是统一主域名,例如:
https://www.example.com
然后将其他版本全部 301 到主域名:
http://example.com -> https://www.example.com
https://example.com -> https://www.example.com
http://www.example.com -> https://www.example.com
三、开启 HTTPS 并配置正确 SSL 模式
HTTPS 是现代网站 SEO 的基础配置。搜索引擎普遍更偏好安全站点,浏览器也会对 HTTP 页面显示“不安全”。
Cloudflare 提供多种 SSL 模式:
- Off
- Flexible
- Full
- Full Strict
推荐使用:
Full (Strict)
为什么不推荐 Flexible?
Flexible 模式下:
用户 -> Cloudflare:HTTPS
Cloudflare -> 源站:HTTP
这种模式虽然用户看到的是 HTTPS,但 Cloudflare 到源站之间仍然是 HTTP,容易产生安全隐患,也可能导致重定向循环。
推荐模式:
用户 -> Cloudflare:HTTPS
Cloudflare -> 源站:HTTPS
也就是 Full 或 Full Strict。
源站证书配置建议
你可以在源站安装:
- Let's Encrypt 免费证书
- Cloudflare Origin Certificate
- 商业 SSL 证书
如果使用 Cloudflare Origin Certificate,只能被 Cloudflare 信任,不能直接用于浏览器访问源站 IP,但在 Cloudflare 代理场景中完全够用。
四、强制 HTTPS 与 301 跳转
SEO 中,301 永久重定向非常重要。它可以告诉搜索引擎:
当前页面已永久迁移到新地址,请将权重传递给新地址。
Cloudflare 后台可以通过 Redirect Rules 实现 HTTP 到 HTTPS 的跳转。
推荐规则
http://example.com/* -> https://www.example.com/$1
https://example.com/* -> https://www.example.com/$1
http://www.example.com/* -> https://www.example.com/$1
注意不要使用 302 临时跳转来做长期域名规范化。对于 SEO 来说,主域名规范化应使用 301。
五、Cloudflare 缓存策略优化 SEO
页面速度是 SEO 的重要指标。Cloudflare 缓存可以显著降低首字节时间,也就是 TTFB。
1. 静态资源缓存
建议对以下资源设置较长缓存:
- CSS
- JS
- 图片
- 字体
- 视频
- SVG
可以在源站返回如下响应头:
Cache-Control: public, max-age=31536000, immutable
表示资源可以缓存一年。
适合带 hash 文件名的资源,例如:
/app.8f3a21.css
/main.92ab11.js
/logo.a8c91.png
2. HTML 页面缓存要谨慎
HTML 是否缓存,要看网站类型。
如果是静态站点,例如:
- Hugo
- Hexo
- Astro
- Next.js 静态导出
- VuePress
- VitePress
可以缓存 HTML。
如果是动态网站,例如:
- WordPress
- 电商网站
- 会员系统
- 后台管理系统
则需要避免缓存登录页面、购物车、用户中心、订单页等动态内容。
3. 建议缓存规则
静态资源:
URL contains .css .js .png .jpg .webp .svg .woff2
Cache TTL: 1 year
Browser TTL: 1 year
HTML 页面:
Cache TTL: 5 minutes ~ 1 hour
Browser TTL: 0 ~ 5 minutes
API 接口:
Bypass Cache
后台路径:
/admin/*
/login/*
/user/*
/cart/*
/checkout/*
Bypass Cache
六、开启 Brotli、HTTP/2 和 HTTP/3
Cloudflare 后台可以直接开启以下功能:
- Brotli 压缩
- HTTP/2
- HTTP/3
- 0-RTT Connection Resumption
这些功能可以提升传输效率,尤其对移动端用户体验明显。
Brotli 对 SEO 的价值
Brotli 可以压缩 HTML、CSS、JS 等文本资源,减少文件体积,加快加载速度。
例如一个 300KB 的 JS 文件,开启 Brotli 后可能只有 80KB 左右。
页面加载越快,用户跳出率越低,对 SEO 越有利。
七、使用 Cloudflare Workers 做 SEO 优化
Cloudflare Workers 是运行在 Cloudflare 边缘节点的 JavaScript 代码,可以在请求到达源站前或响应返回用户前进行处理。
它可以实现很多 SEO 功能,例如:
- 自动添加 canonical 标签
- 动态生成 robots.txt
- 动态生成 sitemap.xml
- 处理 301 重定向
- 修改响应头
- 阻止恶意爬虫
- 给图片增加缓存策略
- 给 HTML 添加结构化数据
下面提供一些常用源码。
八、源码一:HTTP 自动跳转 HTTPS + 统一 www 域名
以下代码可以部署到 Cloudflare Workers,用于统一域名。
假设主域名为:
https://www.example.com
其他形式全部 301 到该地址。
export default {
async fetch(request) {
const url = new URL(request.url)
const targetHost = 'www.example.com'
const isHttp = url.protocol === 'http:'
const isNonWww = url.hostname === 'example.com'
if (isHttp || isNonWww) {
url.protocol = 'https:'
url.hostname = targetHost
return Response.redirect(url.toString(), 301)
}
return fetch(request)
}
}
部署说明
在 Cloudflare 后台:
Workers & Pages -> Create Worker -> 粘贴代码 -> Deploy
然后绑定路由:
example.com/*
www.example.com/*
九、源码二:自动给页面添加 canonical 标签
canonical 标签用于告诉搜索引擎当前页面的规范地址,避免重复页面造成权重分散。
例如以下 URL 可能内容相同:
https://www.example.com/article?id=1
https://www.example.com/article?id=1&utm_source=google
https://www.example.com/article?id=1&utm_medium=email
我们可以使用 Workers 自动清理部分跟踪参数,并添加 canonical 标签。
class CanonicalRewriter {
constructor(canonicalUrl) {
this.canonicalUrl = canonicalUrl
}
element(element) {
element.append(
``,
{ html: true }
)
}
}
export default {
async fetch(request) {
const url = new URL(request.url)
const removeParams = [
'utm_source',
'utm_medium',
'utm_campaign',
'utm_term',
'utm_content',
'fbclid',
'gclid'
]
for (const param of removeParams) {
url.searchParams.delete(param)
}
const canonicalUrl = url.origin + url.pathname + url.search
const response = await fetch(request)
const contentType = response.headers.get('content-type') || ''
if (!contentType.includes('text/html')) {
return response
}
return new HTMLRewriter()
.on('head', new CanonicalRewriter(canonicalUrl))
.transform(response)
}
}
注意事项
如果源站已经输出 canonical 标签,不建议重复添加。重复 canonical 可能会让搜索引擎产生混淆。
更稳妥的方式是:
- 源站统一生成 canonical;
- Workers 只处理特殊路径;
- 或者先检测页面是否存在 canonical。
十、源码三:动态生成 robots.txt
robots.txt 用于告诉搜索引擎哪些路径可以抓取,哪些路径不建议抓取。
例如:
User-agent: *
Disallow: /admin/
Disallow: /login/
Disallow: /user/
Allow: /
Sitemap: https://www.example.com/sitemap.xml
使用 Workers 可以直接在边缘节点生成 robots.txt。
export default {
async fetch(request) {
const url = new URL(request.url)
if (url.pathname === '/robots.txt') {
const robots = `
User-agent: *
Disallow: /admin/
Disallow: /login/
Disallow: /user/
Disallow: /cart/
Disallow: /checkout/
Allow: /
Sitemap: https://www.example.com/sitemap.xml
`.trim()
return new Response(robots, {
headers: {
'content-type': 'text/plain; charset=utf-8',
'cache-control': 'public, max-age=3600'
}
})
}
return fetch(request)
}
}
robots.txt 优化建议
不要屏蔽重要页面,例如:
Disallow: /
这会导致整个网站无法被抓取。
也不要屏蔽 CSS、JS 文件,否则搜索引擎无法正常渲染页面,可能影响移动端体验评估。
十一、源码四:动态生成 sitemap.xml
sitemap.xml 可以帮助搜索引擎发现网站页面,尤其适合文章站、文档站、产品页较多的网站。
以下示例适合小型静态站点。
const pages = [
{
loc: 'https://www.example.com/',
lastmod: '2025-01-01',
priority: '1.0'
},
{
loc: 'https://www.example.com/about/',
lastmod: '2025-01-01',
priority: '0.8'
},
{
loc: 'https://www.example.com/blog/cloudflare-seo/',
lastmod: '2025-01-10',
priority: '0.9'
}
]
function generateSitemap() {
const urls = pages.map(page => {
return `
${page.loc}
${page.lastmod}
weekly
${page.priority}
`
}).join('')
return `
${urls}
`
}
export default {
async fetch(request) {
const url = new URL(request.url)
if (url.pathname === '/sitemap.xml') {
return new Response(generateSitemap(), {
headers: {
'content-type': 'application/xml; charset=utf-8',
'cache-control': 'public, max-age=3600'
}
})
}
return fetch(request)
}
}
sitemap.xml 提交建议
生成 sitemap 后,可以提交到:
- Google Search Console
- Bing Webmaster Tools
- 百度搜索资源平台
- Yandex Webmaster
并在 robots.txt 中声明:
Sitemap: https://www.example.com/sitemap.xml
十二、源码五:为静态资源添加长期缓存头
如果源站没有配置好缓存头,也可以通过 Workers 在边缘层补充。
export default {
async fetch(request) {
const url = new URL(request.url)
const response = await fetch(request)
const extPattern = /\.(css|js|png|jpg|jpeg|gif|webp|svg|ico|woff|woff2|ttf|eot)$/i
if (extPattern.test(url.pathname)) {
const newHeaders = new Headers(response.headers)
newHeaders.set('cache-control', 'public, max-age=31536000, immutable')
return new Response(response.body, {
status: response.status,
statusText: response.statusText,
headers: newHeaders
})
}
return response
}
}
注意
长期缓存适合带版本号或 hash 的资源。
例如:
main.a81f3c.js
style.91ab2.css
如果你的资源文件名不会变化,不建议直接设置一年缓存,否则用户可能长期访问旧文件。
十三、源码六:阻止低质量恶意爬虫
恶意爬虫会消耗服务器资源,拖慢页面响应速度,间接影响 SEO。
可以使用 Workers 简单拦截部分明显异常的 User-Agent。
const blockedAgents = [
'AhrefsBot',
'SemrushBot',
'MJ12bot',
'DotBot',
'BLEXBot'
]
export default {
async fetch(request) {
const userAgent = request.headers.get('user-agent') || ''
const blocked = blockedAgents.some(bot =>
userAgent.toLowerCase().includes(bot.toLowerCase())
)
if (blocked) {
return new Response('Forbidden', {
status: 403,
headers: {
'content-type': 'text/plain; charset=utf-8'
}
})
}
return fetch(request)
}
}
注意
不要误伤主流搜索引擎爬虫,例如:
- Googlebot
- Bingbot
- Baiduspider
- Sogou web spider
- 360Spider
- YandexBot
如果误拦搜索引擎,会导致页面无法收录。
十四、Cloudflare Page Rules / Cache Rules 配置建议
虽然 Workers 很灵活,但很多简单优化可以直接用 Cloudflare 后台规则完成。
1. 后台页面绕过缓存
example.com/admin/*
Cache Level: Bypass
2. 登录页面绕过缓存
example.com/login*
Cache Level: Bypass
3. 静态资源缓存
example.com/*.css
example.com/*.js
example.com/*.png
example.com/*.webp
设置:
Edge Cache TTL: 1 month 或 1 year
Browser Cache TTL: 1 month 或 1 year
4. HTML 页面缓存
如果是静态站点,可以设置:
Cache Everything
Edge Cache TTL: 1 hour
如果是 WordPress,需要搭配插件或规则谨慎处理。
十五、WordPress 使用 Cloudflare 的 SEO 优化建议
WordPress 用户非常适合使用 Cloudflare,但要避免缓存登录态页面。
推荐配置
- 开启 Cloudflare 代理;
- SSL 使用 Full Strict;
- 开启 Brotli;
- 开启 HTTP/2 和 HTTP/3;
- 静态资源长期缓存;
- 后台路径绕过缓存;
- 使用 SEO 插件生成 sitemap;
- 避免缓存预览页、搜索页、购物车页;
- 使用 APO 或缓存插件提升 HTML 访问速度。
需要绕过缓存的路径
/wp-admin/*
/wp-login.php
/cart/*
/checkout/*
/my-account/*
/?preview=true
WordPress 常见问题
如果后台登录异常,通常是缓存规则或安全规则影响。
如果出现重定向循环,通常是:
- Cloudflare SSL 设置为 Flexible;
- 源站强制 HTTPS;
- WordPress 地址配置不一致。
建议将 SSL 设置为:
Full Strict
并确保 WordPress 后台地址统一为:
https://www.example.com
十六、Cloudflare SEO 优化检查清单
上线前建议逐项检查:
- [ ] DNS 解析是否正常
- [ ] 主域名是否唯一
- [ ] HTTP 是否 301 到 HTTPS
- [ ] 非 www 是否 301 到 www,或反向统一
- [ ] SSL 是否为 Full Strict
- [ ] 是否开启 Brotli
- [ ] 是否开启 HTTP/2、HTTP/3
- [ ] 静态资源是否配置长期缓存
- [ ] HTML 是否根据业务合理缓存
- [ ] 后台、登录、购物车是否绕过缓存
- [ ] robots.txt 是否可访问
- [ ] sitemap.xml 是否可访问
- [ ] canonical 是否正确
- [ ] 是否误拦搜索引擎爬虫
- [ ] 404 页面是否返回真实 404
- [ ] 301 跳转链是否过长
- [ ] 页面是否存在重复 URL
- [ ] Search Console 是否正常抓取
- [ ] Core Web Vitals 是否达标
十七、常见错误与解决方案
1. 页面被缓存后用户看到旧内容
原因:
- HTML 缓存时间太长;
- 源站更新后没有清理 Cloudflare 缓存;
- 静态资源没有 hash 文件名。
解决方案:
- 缩短 HTML Edge Cache TTL;
- 发布后自动调用 Cloudflare API 清理缓存;
- 静态资源使用带 hash 的文件名。
2. 搜索引擎抓取到多个重复页面
原因:
- HTTP 和 HTTPS 同时返回 200;
- www 和非 www 同时返回 200;
- URL 参数没有规范化;
- canonical 缺失。
解决方案:
- 设置 301 跳转;
- 添加 canonical;
- robots.txt 屏蔽无价值参数页面;
- 在搜索引擎后台配置参数规则。
3. 网站出现重定向循环
原因通常是 Cloudflare SSL 设置错误。
例如:
Cloudflare 使用 Flexible
源站又强制 HTTP 跳转 HTTPS
于是形成循环:
Cloudflare -> 源站 HTTP
源站 -> HTTPS
Cloudflare -> 源站 HTTP
源站 -> HTTPS
解决方案:
Cloudflare SSL 改为 Full Strict
源站正确安装 HTTPS 证书
4. robots.txt 或 sitemap.xml 被缓存错误
如果 robots.txt 或 sitemap.xml 返回错误内容,搜索引擎可能无法正确抓取。
解决方案:
- 设置较短缓存,例如 1 小时;
- 修改后手动清理缓存;
- 使用 Search Console 测试抓取。
十八、进阶:使用 Cloudflare API 自动清理缓存
如果网站发布文章后需要自动刷新缓存,可以调用 Cloudflare API。
以下是 Node.js 示例:
const zoneId = '你的 Zone ID'
const apiToken = '你的 Cloudflare API Token'
async function purgeCache(urls) {
const response = await fetch(
`https://api.cloudflare.com/client/v4/zones/${zoneId}/purge_cache`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${apiToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
files: urls
})
}
)
const data = await response.json()
console.log(data)
}
purgeCache([
'https://www.example.com/',
'https://www.example.com/blog/cloudflare-seo/'
])
如果想清理全部缓存:
body: JSON.stringify({
purge_everything: true
})
不过不建议频繁清理全部缓存,否则会降低 CDN 命中率。
十九、推荐的整体架构
一个比较理想的 Cloudflare SEO 优化架构如下:
用户 / 搜索引擎爬虫
|
v
Cloudflare DNS
|
v
Cloudflare CDN + WAF + Cache Rules
|
v
Cloudflare Workers
|
v
源站服务器 / 静态站点 / WordPress
其中:
- DNS 负责稳定解析;
- CDN 负责加速;
- WAF 负责安全;
- Cache Rules 负责缓存;
- Workers 负责边缘 SEO 逻辑;
- 源站负责内容质量和业务逻辑。
二十、总结
Cloudflare 对 SEO 的帮助并不是简单地“让网站变快”,而是从多个层面提升网站的技术质量:
- 提升 DNS 解析速度;
- 降低 TTFB;
- 加速静态资源;
- 提供 HTTPS;
- 统一域名权重;
- 减少重复页面;
- 提升站点稳定性;
- 降低恶意流量影响;
- 辅助生成 robots.txt 和 sitemap.xml;
- 通过 Workers 灵活处理 SEO 细节。
但需要注意,Cloudflare 不是万能 SEO 工具。它解决的是技术层面的访问体验、缓存、安全和规范化问题。真正的 SEO 仍然离不开高质量内容、合理的网站结构、优秀的用户体验和持续运营。
如果你的网站已经接入 Cloudflare,建议优先做好以下五件事:
- SSL 设置为 Full Strict;
- HTTP、HTTPS、www、非 www 做 301 统一;
- 静态资源开启长期缓存;
- robots.txt、sitemap.xml、canonical 保持正确;
- 不要误拦搜索引擎爬虫。
做好这些基础配置后,再结合 Workers 做精细化优化,Cloudflare 就能成为你网站 SEO 的强力基础设施。