文章

SvelteKit 静态站的几处坑

本地 pnpm dev 一切正常,一构建就出问题,是静态站最常见的落差。这里记下实际踩到的几处。

锚点必须写绝对地址

页头页脚出现在每一页上,里面的 #products 是相对链接:在首页指向首页的某个区块,到了文章列表页就变成「文章列表页上的 products 区块」,而那里根本没有这个元素。

预渲染的爬虫会逐一检查锚点,遇到无主的 # 会直接中断构建。

改成 /#products 就没有这个问题。

query 参数不会被预渲染

预渲染针对的是路径,不是查询串。?page=2、?tag=AI 都不会生成独立的 HTML 文件。

这意味着任何依赖 query 的内容都只能在浏览器里算,服务端给不出第二个答案。好处是翻页完全不发请求,代价是这类地址对爬虫不够友好。

404 要提前暴露

爬虫会跟着页面上的每个链接走。页脚里挂了一个尚未实现的路由,构建立刻失败。

这其实是好事:链接失效在构建期暴露,总比上线之后由访客发现强。

小结

把构建产物当成唯一的真相来源。开发服务器能跑起来,不等于能发布。