Skip to content

由 Worker 托管 sitemap.xml 与 robots.txt(复用 RSS 的 R2 缓存 + cron 预生成架构),修复 RSS 站点地址并优化中文渲染 - #545

Open
hohouman wants to merge 8 commits into
openRin:mainfrom
hohouman:main

Conversation

@hohouman

@hohouman hohouman commented Jul 30, 2026

Copy link
Copy Markdown

本次提交包含若干相互独立但围绕 SEO、RSS 正确性与中文渲染的改进,其中 sitemap/robots 的落地方式与既有 RSS 保持一致、可维护性更好。

一、新增环境变量 FRONTEND_URL(重要)

本次新增一个可选环境变量 FRONTEND_URL,表示站点的公开访问地址(如 https://your-domain.com,需带协议、不带结尾斜杠)。

用于 sitemap.xml、robots.txt 以及 RSS 中生成绝对链接;
在 .env.example 与 server/src/custom-env.d.ts(全局 Env 接口新增 FRONTEND_URL?: string;)中声明;
未配置时自动回退到请求来源(request origin),因此为可选,不影响现有部署。
部署时建议显式配置 FRONTEND_URL,以保证搜索引擎与阅读器拿到正确的绝对地址。

二、由 Worker 托管 sitemap.xml 与 robots.txt(与 RSS 同架构)

此前站点缺少 sitemap,且 robots.txt 依赖前端静态文件。本次将其内联进 rin-server,并复用 RSS 既有的「R2/S3 缓存 + cron 预生成」机制,而非每次请求实时查库:

新增 server/src/services/sitemap.ts:
导出 SitemapService()(Hono 路由:GET /sitemap.xml、GET /robots.txt);
GET /sitemap.xml:基于现有 D1 / Drizzle 层,从已发布文章(draft = 0)、瞬间、友链、标签生成 sitemap,URL 对齐前端路由;
GET /robots.txt:固定内容,允许所有爬虫,屏蔽 /admin/、/profile/、/login/、/search/,并将 Sitemap: 指向 <FRONTEND_URL>/sitemap.xml;
两个路由均复用 RSS 的模式——请求时优先从 R2/S3 缓存读取,命中直接返回;未命中则实时生成、写回存储桶(S3_CACHE_FOLDER,默认 cache/)后再返回;未配置存储桶时优雅降级为实时生成;
导出 sitemapCrontab(env, db),与 rssCrontab 同构,供定时任务预生成。
在 server/src/runtime/scheduled-handler.ts 的 handleScheduled 中注册 sitemapCrontab(env, db),由 cron 预生成;
在 server/src/core/register-routes.ts 中通过 app.route("/", SitemapService()) 注册;
修改 server/src/runtime/fetch-handler.ts:在静态资源分支之前放行 /sitemap.xml 与 /robots.txt 元数据路由(原先带扩展名的请求会先进入静态资源分支,导致这两个路由失效);
删除 client/public/robots.txt,避免其覆盖由 Worker 返回的 robots.txt。

三、修复 RSS 缺失站点地址

server/src/services/rss.ts:
实时生成改为优先使用 env.FRONTEND_URL(回退到请求 origin);
修复 rssCrontab:定时任务自动生成并缓存到存储桶的 RSS,原先 frontendUrl 硬编码为空字符串,导致自动生成的订阅源缺少站点 URL;现改为使用 env.FRONTEND_URL。

四、中文字体渲染修复

当浏览器首选语言为 zh-TW / zh-HK 时,中文会出现有粗有细、有大有小的破碎现象。

client/index.html:增加预连接并加载 Noto Serif SC;
client/src/index.css:字体栈补充 "Noto Sans SC", "PingFang SC", "Microsoft YaHei", "Hiragino Sans GB", sans-serif 回退;
client/tailwind.config.ts:为 fontFamily.sans / fontFamily.serif 增加 CJK 回退。

image image

五、部署配置补充 新增的可选环境变量 FRONTEND_URL 需落到 Worker 运行时:

cli/src/tasks/deploy-cf.ts:生成 wrangler.toml 时将其写入 [vars];
.github/workflows/deploy.yml:部署步骤注入 FRONTEND_URL(读取仓库变量,默认空);
.github/actions/setup-wrangler/action.yml:CI 用 wrangler.toml 占位同步。 cron 调度无需调整,sitemapCrontab 已随既有 */20 * * * * 触发。

@hohouman
hohouman marked this pull request as draft August 1, 2026 08:05
@hohouman
hohouman marked this pull request as ready for review August 1, 2026 08:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant