↓
  1. 随笔/

两轮网站打磨记:从 AI 助手悬浮入口到全文 RSS

距离 上一篇全站优化记快两个月了。这期间网站没大动,但积攒了两轮「体检 → 修复」的迭代:一轮偏 UI 与内容,一轮偏 基础设施与 SEO。还是老规矩,写下来给自己备忘,也给同样在折腾 Hugo 博客的朋友一个参考。

这次的改进方式:先体检,再动手 #

和上次「凭感觉改」不同,这两轮都是先做全站体检,把发现的问题按影响排序,确认了再改。体检维度包括:

  • 移动端导航在不同宽度下的表现
  • 分享卡片(og: tags)在微信/Twitter 里的实际观感
  • 响应头(CSP、HSTS、缓存策略)、内链健康度
  • RSS 输出质量、结构化数据、图片加载优先级

好处很明显:避免为不存在的问题写代码。这次体检我还发现了两个自己误报的项——tutoring 页案例卡和 mermaid 按需加载其实都工作正常,是我 grep 模式太窄导致的假阴性。先验证再动手,省下了两次无意义的改动。


第一轮:UI 与内容 #

移动端导航:basic → hybrid #

这是两轮里影响最实际的一项。Congo 主题的 header 之前用的是 basic 布局,桌面端横排没问题,但手机上 10 个导航链接会竖排挤满首屏,用户要滑很久才能看到正文。

改法就一行配置:

[header]
  layout = "hybrid"   # 手机汉堡菜单, 桌面保持横排

hybrid 是主题现成的第三种布局:窄屏收进汉堡按钮,宽屏照旧横排。改完用浏览器实测了菜单展开、桌面布局不变、无控制台报错。主题作者早就把路铺好了,我们只是没翻到那一页配置。

分享卡片标题统一 #

浏览器标签页显示「田稼禾 | 安全研究员」,但微信/Twitter 分享出去的卡片标题却是「田稼禾的个人网站」——两个 title 来源不同步(hugo.yaml 和语言配置各管一个)。统一成同一个值,分享出去的第一印象才一致。

内容扩充:实习经历从 6 条到 11 条 #

把 obsidian 里两段实习的 70+ 篇笔记重新翻了一遍, 安全研究页的实习经历做了内容扩充,每条都有真实笔记出处:

  • 安全运营方向:零信任办公自动化、告警降噪规则治理、密钥治理、CI/CD 部署链路、SOAR 剧本开发
  • AI 安全研究方向:CVE 跟踪、指纹规则逆向、漏洞复现与 PoC 编写、AI Agent 安全框架调研

后来又按隐私考虑把实习板块做了匿名化——公开页面不出现具体单位名称和内部系统组合,细节留在简历和面试里讲。

体会是:简历素材不在记忆里,在笔记里。当时觉得琐碎的记录,两个月后就是现成的 bullet。

全站 AI 助手悬浮入口 #

AI 简历助手原来只有首页有入口,其他页面要回首页才能找到。这次在右下角加了一个全站悬浮按钮:

  • 复用主题渐变配色 + 呼吸光环动画(@keyframes + prefers-reduced-motion 降级)
  • 点击跳转 /ai/,落地自动弹出对话窗——零新增 JS,复用页面已有的自动弹窗逻辑
  • /ai/ 页自身通过 Hugo 模板条件判断隐藏按钮(那里已有完整入口),打印时也不显示

实现思路:全站注入点用 extend-footer.html partial,样式进 custom.css。悬浮按钮这种小功能,最容易犯的错是为此引入一坨 JS——其实 Hugo 的模板条件 + CSS 动画就够了。


第二轮:基础设施与 SEO #

RSS 从摘要升级为全文 #

Hugo 内置的 RSS 模板输出的是 .Summary,订阅者只能看到 218 字摘要。覆盖 layouts/_default/rss.xml 后:

  • 每篇文章输出全文 content:encoded(实测 20 篇全部 7千~3万字)
  • 每条 item 带 enclosure 配图
  • 只输出真正的文章页——原版会把「随笔」「系列目录」这类列表页也混进去,是噪音

改的过程踩了个坑:第一版模板在无子页面的路由上 $pages 为空,first 函数直接报错。兜底逻辑要显式处理边界。

头像 LCP 优先级修正 #

首页头像是首屏最大的图片元素(LCP),之前却标着 loading="lazy" + fetchpriority="low"——等于告诉浏览器「这个最不着急」。对 LCP 元素这是反向优化。改法:

<!-- 前: loading="lazy" fetchpriority="low" -->
<!-- 后: fetchpriority="high"(去掉 lazy) -->

一行属性,移动端首屏出图更快。lazy loading 不是万能优化,首屏元素用它就是负优化。

内容归类修补 #

《网站安全加固全记录》原来只归「网站建设」,导致 /research/(AI 安全研究专题)收不到它。补上双分类 ["网站建设", "安全研究"],专题页从 18 篇到 19 篇。双重身份的内容就该有两个入口。


体检中确认健康的部分 #

也有不少维度查过之后确认没问题,记下来避免以后重复怀疑:

  • 安全响应头全套在线(CSP / HSTS / X-Frame-Options / Permissions-Policy)
  • 静态资源 immutable 一年缓存 + gzip(60KB CSS 传输只 11KB)
  • robots / sitemap / JSON-LD / favicon 全套齐
  • AI 后端被 systemd 正规托管(enabled + Restart=on-failure + MemoryMax)
  • 内链抽查无死链,四个专题页内容都在

几点新体会 #

1. 先验证「问题是否存在」,再动手修 #

这轮最大的收获。两次「发现的问题」其实是我检测方式的问题,不是网站的问题。花 30 秒换个姿势验证,比写半小时无用代码划算。

2. 主题的覆盖点比想象中多 #

layout = "hybrid"、extend-footer.html、rss.xml 覆盖——这次用到的三个改动全部是 Hugo 的模板覆盖机制,一行主题代码都没改。升级依然无冲突。

3. 体检要换维度做 #

上轮查了 UI 和内容,这轮查响应头、RSS、结构化数据、进程托管——不重复的维度才有新发现。下次再体检,可以看看 Core Web Vitals 实测数据和 Lighthouse 跑分。


系列前篇: 个人博客全站优化记。这个系列还在继续,网站和我一样,都是边跑边修。