SvelteKit 静态站的几处坑
本地 pnpm dev 一切正常,一构建就出问题,是静态站最常见的落差。这里记下实际踩到的几处。
锚点必须写绝对地址
页头页脚出现在每一页上,里面的 #products 是相对链接:在首页指向首页的某个区块,到了文章列表页就变成「文章列表页上的 products 区块」,而那里根本没有这个元素。
预渲染的爬虫会逐一检查锚点,遇到无主的 # 会直接中断构建。
改成 /#products 就没有这个问题。
query 参数不会被预渲染
预渲染针对的是路径,不是查询串。?page=2、?tag=AI 都不会生成独立的 HTML 文件。
这意味着任何依赖 query 的内容都只能在浏览器里算,服务端给不出第二个答案。好处是翻页完全不发请求,代价是这类地址对爬虫不够友好。
404 要提前暴露
爬虫会跟着页面上的每个链接走。页脚里挂了一个尚未实现的路由,构建立刻失败。
这其实是好事:链接失效在构建期暴露,总比上线之后由访客发现强。
小结
把构建产物当成唯一的真相来源。开发服务器能跑起来,不等于能发布。