两轮网站打磨记:从 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 跑分。
系列前篇: 个人博客全站优化记。这个系列还在继续,网站和我一样,都是边跑边修。