为通过客户端加载内容的静态作品网站设计 Cloudflare Worker 预渲染方案,改善 SEO 与动态内容抓取。我在非计算机专业背景下借助 AI 完成开发,并独立排查路由、HTTP 响应与渲染问题,无需整体迁移当时的技术栈或增加服务器费用。
使用工具
标签
项目背景
作为一名市场营销和品牌管理专业的学生,我的目标是打造一份作品集,它不仅是一份电子简历,更能展现我跨语言、跨文化、跨技术的技能。我成功推出了shainwaiyan.com,这是一个快速、多语言、移动端优化的静态网站,由无头 CMS(Strapi)、GitHub API 与客户端渲染(CSR)提供支持。这种组合让网站保持轻量,也适合使用免费套餐部署。对普通访客而言,页面能够正常展示内容。
面临的挑战
在 SEO 分析中,我发现了一个关键问题:像 Googlebot 和 Bingbot 这样的搜索引擎机器人会在动态内容加载之前抓取页面快照。这意味着,虽然网站在 SEO 工具看来一切正常,但商业计划、营销项目、营销实战、博客和认证等关键内容却无法被索引。尽管网站结构清晰且关键词优化到位,但在对搜索排名至关重要的领域,网站实际上却“隐形”了。通常的建议是使用 Next.js 或 Nuxt 等服务器端渲染(SSR)框架重建整个网站,但这是一项浩大的工程,而我希望在保留静态优先技术栈、免费套餐部署和现有基于 Cloudflare 工作流程的同时,避免进行此类操作。
实现过程
我当时没有重建整站,而是设计并实现了一个智能的边缘层变通方案:一个为爬虫补全 HTML 内容的 Cloudflare Worker。需要说明的是,我并非计算机科学专业毕业生,通常不编写代码。我借助人工智能的辅助开发了这个复杂的 Cloudflare Worker,并将其作为连接战略愿景与技术实现的强大工具。我的职责是仔细确保其功能正常并排除故障。这通常意味着我需要深入调试,利用 curl 命令等工具检查 HTTP 请求和响应,分析网络流量,并遍历无数日志来精确定位错误。这种亲身实践、自学成才的故障排除方法对于发现与现有 SSR Worker 的隐藏冲突至关重要,而这个冲突曾让我沮丧了两天。
这个 Worker 位于请求入口,按访问者类型决定如何处理网站请求:
爬虫识别:Worker 检查每个请求的 User-Agent,并通过特征列表识别搜索引擎、社交平台与 AI 爬虫。
条件渲染逻辑:
对于爬虫:如果检测到已识别的爬虫程序,且请求目标指向可预渲染的路径,Worker 就会执行预渲染。它会获取请求的 HTML 模板,从 Strapi 和 GitHub 获取所有必要的动态 API 数据,然后使用指定的 CSS 选择器将这些数据精确地注入到最终的 HTML 结构中。此外,在将最终生成的 HTML 发送给机器人之前,它还会应用一系列 SEO 优化(例如结构化数据、元标签、图像优化)和强大的安全功能(CSP 内容安全策略与内容净化)。
对于用户:如果请求来自普通用户,Worker 会将其直接转发至源站,从而保持网站的高性能静态交付和客户端渲染体验。
性能与可靠性:我为预渲染页面设置缓存策略、性能预算与错误处理机制,并通过定时任务预热关键页面,减少爬虫访问时的等待。
结果
部署后,搜索引擎能够读取原本依赖客户端加载的动态内容。按当时的项目记录,相关内容也获得了 Google 与 Bing 的收录。这一切的实现无需重建整个网站,也无需产生任何新的后端或服务器托管费用。该解决方案通过智能且经济高效的边缘渲染,成功提升了网站的爬虫抓取能力和 SEO 性能,验证了“当某些功能无法按预期运行时,找到改进方法”的原则。这个项目让我在实践中锻炼了借助 AI 实现方案、独立排查请求与渲染问题,以及在既有架构限制下解决问题的能力。

