问题现象:博客搜索功能正常,但点击搜索结果后跳转链接丢失了站点域名,例如实际文章链接为 http://www.gloam.cn:4000/20260302020433.html,搜索后却指向 http://20260302020433.html,导致无法访问。
根本原因:Hexo 搜索插件在生成搜索数据时,只记录了文章的相对路径(即 permalink 配置值),没有自动补全站点的完整域名。
解决方案:修改主题中负责渲染搜索结果的 JavaScript 文件,将文章的相对路径拼接上站点的根路径(如 location.origin),生成绝对链接即可解决。
问题复现
根据 Hexo永久链接最佳实践:终极方案与优化指南 对文章的url进行了优化,但是优化后通过搜索无法跳转到正确的文章。
实际链接:
http://www.gloam.cn:4000/20260302020433.html
搜索后跳转链接:
http://20260302020433.html
修复指南
定位搜索功能相关文件
在主题目录中寻找负责搜索的脚本文件。以 hexo-theme-matery 主题为例,需要找到 /themes/matery/source/js/ 下的 **search.js**(或对应的 .ejs 模板文件)。
如果不确定文件名,可以搜索包含 searchFunc、local_search 或 $.ajax 加载 search.xml 的代码。
找到生成链接的代码段
在 search.js 中搜索 href 或 data.url,找到拼接搜索结果 HTML 的位置。典型代码如下:
str += "<li><a href='" + data.url + "' class='search-result-title'>" + data_title + "</a>";
此时 data.url 仅为相对路径(如 20260302020433.html)。
修改为绝对链接
将上述代码替换为使用 location.origin 拼接绝对路径,
var siteOrigin = location.origin;
str += "<li><a href='" + siteOrigin + data_url + "' class='search-result-title'>" + data_title + "</a>";
保存并验证
修改完成后,执行以下命令重新生成并预览:
hexo clean && hexo g && hexo s
打开本地预览,搜索任意文章,检查点击后的链接是否已恢复为完整域名。