可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载Kener v4.0.20 是一次围绕「搜索引擎可发现性」和「图片上传体验」的实质性更新管理员现在可以在管理后台直接配置sitemap.xml的生成模式所有图片上传字段开始支持 iPhone 常见的 HEIC/HEIF 格式并服务端自动转 JPEG同时全站补齐了 Open Graph 与 Twitter Card 元标签、规范了标题语义层级。本文以官方变更日志为主体结合仓库源码逐项拆解这些能力的工作原理与配置方法读完即可在自建 Kener 实例上完成 SEO 与上传能力的完整落地。新特性Sitemap 配置从 v4.0.20 开始管理员可以在Manage → Site Configurations → Sitemap中配置sitemap.xml的生成方式。配置项通过站点数据键sitemap持久化存储见 siteDataKeys.ts类型为 JSON 对象支持三种模式模式行为Auto自动自动包含所有页面、可见的活跃监控器以及当前月和上个月的月度事件页Manual手动仅包含你显式添加的 URLOff关闭对/sitemap.xml返回 404在Auto模式下你还可以在自动生成的条目之外附加额外的手动 URL。管理后台 UI 会直接展示当前 sitemap 的完整 URL由站点siteURL拼接/sitemap.xml派生而来见 site-configurations 页面/manage/app/site-configurations/page.svelte#L107-L109)方便直接复制提交给搜索引擎。三种模式的源码实现/sitemap.xml由路由 src/routes/(kener)/sitemap.xml/server.ts/sitemap.xml/server.ts) 动态生成其核心逻辑清晰对应三种模式Off直接从站点数据中读取sitemap.mode若为off立即返回404 Not Found源码 L12-L14/sitemap.xml/server.ts#L12-L14)确保搜索引擎不会索引到不应公开的站点地图。Manual只遍历配置中的urls数组过滤掉loc为空字符串的条目后输出url节点源码 L16-L24/sitemap.xml/server.ts#L16-L24)。Auto依次组装四类 URL源码 L26-L79/sitemap.xml/server.ts#L26-L79)所有页面遍历GetAllPages()按page_path生成/或/{page_path}路径可见的活跃监控器调用GetMonitors({ status: ACTIVE, is_hidden: NO })只收录仍处于 ACTIVE 状态且未隐藏的监控器对应/monitors/{tag}页面当前与上月的月度事件页以 UTC 时间为基准计算当月和上月的MMMM-YYYY生成/events/{MMMM}-{YYYY}两个 URL附加的手动 URL在 Auto 模式下若配置了额外urls会追加到自动条目之后。所有loc在写入 XML 前都会经过escapeXml()对、、、引号进行转义避免非法字符破坏 XML 结构源码 L95-L102/sitemap.xml/server.ts#L95-L102)。类型定义见 site.tsmode限定为auto | manual | offurls为{ loc: string }[]。默认种子数据中 sitemap 的初始模式为offseedSiteData.ts也就是说升级后需要主动到管理后台开启。新特性HEIC/HEIF 图片支持Kener 的所有图片上传字段——Logo、Favicon、社交分享预览图social preview、页面 Logo、监控器图片——现在都接受HEIC和HEIF格式iPhone 拍照的默认格式。上传的 HEIC/HEIF 图片会在服务端自动转换为 JPEG然后再交给 sharp 做后续处理。服务端转换链路图片上传统一走管理端 API src/routes/(manage)/manage/api/server.ts/manage/api/server.ts) 的uploadImageaction处理流程如下白名单校验允许的 MIME 类型扩展为image/png、image/jpeg、image/jpg、image/webp、image/heic、image/heif源码 L767/manage/api/server.ts#L767)并拒绝 SVG。HEIC/HEIF 指纹识别读取文件缓冲的第 412 字节若包含ftyp特征串则判定为 HEIC/HEIF 数据源码 L797-L798/manage/api/server.ts#L797-L798)这是因为 sharp 底层可能缺少 HEVC 编解码器。heic-convert 预转换命中 HEIC/HEIF 时调用heic-convert以format: JPEG、quality: 0.85先行转换源码 L799-L806/manage/api/server.ts#L799-L806)转换结果再交给 sharp 做缩放与再编码。MIME 不匹配豁免很多 iPhone 导出的 HEIC 文件会带着.jpg扩展名因此源码专门放行了「请求 MIME 为 heic/heif 或内容检测为 heic/heif」的场景避免误判为文件类型不符源码 L830-L835/manage/api/server.ts#L830-L835)。统一输出HEIC/HEIF以及 JPEG最终以 JPEGquality 85输出并落库其余 WebP/PNG 统一转 PNG源码 L865-L884/manage/api/server.ts#L865-L884)。上传接口还受GC.MAX_UPLOAD_BYTES限制超限会返回 Image is too large源码 L778-L780/manage/api/server.ts#L778-L780)并同样受最大图片像素与边长限制保护。BODY_SIZE_LIMIT默认提升至 3 MB由于图片尤其是高像素手机照片的 base64 编码体积可观v4.0.20 将默认请求体大小限制从 SvelteKit 默认的512 KB提升到3 MB以容纳更大的图片上传。该值可通过环境变量BODY_SIZE_LIMIT覆盖。Docker 镜像入口脚本 docker-entrypoint.sh 中设置export BODY_SIZE_LIMIT${BODY_SIZE_LIMIT:-3M}即容器内默认 3M可通过环境变量传入覆盖格式支持K千字节、M兆字节后缀或Infinity表示不限制官方环境变量文档environment-variables.md/docs/content/v4/setup/environment-variables.md#L199-L216)给出的示例为BODY_SIZE_LIMIT10M并说明如果管理后台需要上传更大图片或发送更大 API 载荷可以适当调大。改进Open Graph 与 Twitter Card 元标签所有面向公众的页面现在都会输出完整的 Open Graph 与 Twitter Card 元标签让状态页链接在社交平台分享时展示出丰富的卡片预览。仓库中各路由的实现如下状态页/与/[page_path]在 src/routes/(kener)/page.svelte/page.svelte#L117-L144) 与 src/routes/(kener)/[page_path]/page.svelte 中输出og:title、og:description、og:typewebsite、og:image、twitter:cardsummary_large_image、twitter:image。标题与描述按优先级回退页面级 SEO 设置 → 页面标题/页头 → 站点名 Status Page。事故页/incidents/[incident_id]见 incidents/[incident_id]/page.svelte使用og:typearticle且当存在评论时以第一条评论作为og:description让分享卡片直接呈现事故细节。维护页/maintenances/[maintenance_id]见 maintenances/[maintenance_id]/page.svelte同样使用og:typearticle以维护描述作为 description。月度事件页/[page_path]/events/[MMMM]-[YYYY]见 events/[MMMM]-[YYYY]/page.svelteOG 标题与描述包含月份信息。监控器页/monitors/[monitor_tag]见 monitors/[monitor_tag]/page.svelteOG 标题包含监控器名称描述取监控器描述。一个实现细节值得注意og:image和twitter:image这类标签必须使用绝对 URL因此源码通过absoluteResolve()把站点 URL 与相对图片路径拼成完整地址相关工具函数在 resolver.ts。此外站点级默认 OG 元数据og:site_name、twitter:site、twitter:creator等可在种子数据 seedSiteData.ts 中看到并在文档与状态页布局中实际输出。改进SEO 语义v4.0.20 对页面语义结构做了三处规范化服务于搜索引擎的内容理解标题标签层级状态页的页面标题/副标题改为包裹在真正的h1/h2中见 src/routes/(kener)/page.svelte/page.svelte#L159-L169)事故页标题同样以h1包裹见 incidents/[incident_id]/page.svelte维护页同理为每个页面提供唯一且清晰的标题层级。私有页防索引管理后台、账户相关、嵌入embed布局均新增meta namerobots contentnoindex, nofollow /阻止搜索引擎收录私有页面分别见 (account)/layout.svelte/layout.svelte#L16-L18)、(manage)/layout.svelte/layout.svelte#L81-L83)、(embed)/layout.svelte/layout.svelte#L14-L16)。robots.txt 扩充static/robots.txt 现在带显式的Allow/Disallow规则拒绝/manage/、/account/、/api/、/embed/并新增了针对 AI 爬虫的条目GPTBot、ChatGPT-User、ClaudeBot、anthropic-ai、PerplexityBot、Google-Extended以及 Googlebot、Bingbot 等主流搜索引擎爬虫同时声明了Sitemap:地址。改进页面级 SEO 字段键修复此前页面级 SEO 设置存在一个键名不一致的缺陷管理后台表单保存的是metaPageTitle、metaPageDescription、socialPagePreviewImagecamelCase而 dashboard 控制器读取的却是metaTitle/metaDescription/socialPreviewImage导致保存的 SEO 元数据无法生效。v4.0.20 修复了该问题存储边界映射集中在 pageSettings.ts该文件明确指出存储的page_settings_json使用 camelCase而 v4 API 对外暴露 snake_casemeta_page_title等映射逻辑统一放在存储边界处包含默认值合并与校验源码 L120-L127、L200-L206、L229-L234。控制器读取时使用正确的 camelCase 键并回退到站点级布局数据pageSettings.socialPagePreviewImage || layoutData.socialPreviewImage等见 dashboardController.ts。附带修复零监控器的页面现在也能正确返回 SEO 元数据不再因缺少监控器数据而缺失 meta 信息。改进页面设置独立保存按钮页面设置 UIDisplay 设置与 SEO 设置现在拥有各自独立的 Save 按钮和加载状态。保存 Display 设置不会再影响 SEO 设置反之亦然。实现上由统一的savePageSettings(source: display | seo)处理根据来源分别置位savingDisplaySettings/savingSeoSettings见 pages/[page_id]/page.svelte并各自包含独立校验如历史天数取值范围校验只作用于 Display 保存。Bug 修复图片上传错误处理页面图片上传现在会在解析 JSON 之前先检查 HTTP 响应状态——非 2xx 响应直接提示失败并返回不再尝试对错误响应做response.json()解析见 pages/[page_id]/page.svelte。此模式同样应用于社交预览图上传等场景。清理无用代码移除了未使用的MonitorAlerting.svelte组件以及过时的llms.txt/sitemap.xml服务端处理器避免旧实现与新功能并存造成混淆。升级与验证建议升级到 v4.0.20 后建议按以下顺序验证与配置开启 Sitemap进入Manage → Site Configurations → Sitemap将默认的Off切换为Auto或按需Manual在 Auto 下可附加手动 URL确认 UI 展示的 sitemap URL 可正常访问且 XML 结构合法。验证 HEIC 上传从 iPhone 上传一张 HEIC 照片到任一图片字段确认服务端自动转换为 JPEG 且预览正常若上传超大图片按需调整BODY_SIZE_LIMIT环境变量容器内默认已为3M。检查分享卡片将状态页、事故页、维护页链接粘贴到支持 OG 解析的平台确认og:type、og:title、og:description、og:image展示正确且og:image为绝对 URL。核对 robots 规则确认robots.txt中 AI 爬虫与常规爬虫条目符合预期/manage/、/account/、/embed/已被 Disallow 或 noindex 覆盖。本版本的变更以 v4.0.20 变更日志/docs/content/v4/changelogs/v4.0.20.md) 为官方依据文中源码证据均可在仓库对应路径查阅。赞分享可观测性后端前端运维【免费下载链接】kenerStunning status pages, batteries included!项目地址https://gitcode.com/gh_mirrors/ke/kener点击查看免费下载相关推荐Next.js SEO优化终极指南sitemap与robots.ts配置实战Next.js SEO优化终极指南sitemap与robots.ts配置实战 Next.js Boilerplate是一个基于Next.js 14的生产级启前端后端ApacheCN AI 路线图解析10个必学的机器学习算法ApacheCN AI 路线图解析10个必学的机器学习算法 ApacheCN AI 路线图是一份全面的机器学习学习指南旨在帮助新手和普通用户系统掌握机器学习文档教程知识库人工智能机器学习Nuxt.js SEO优化实战HTML Head配置详解Nuxt.js SEO优化实战HTML Head配置详解 前言 在现代Web开发中搜索引擎优化 SEO 是提升网站可见性的重要手段。Nuxt.js作为一款基上一篇腾讯混元开源5款3D生成模型Hunyuan 3D 2.0家族全面升级下一篇从安装到部署GeekServer跨平台运行完全指南Windows/Linux/Mac创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考