建站路上最常卡住的报错
404、502、无限重定向、证书到期、解析不生效、CDN 还是旧的、站点不收录、JSON-LD 报错、file:// 跨域…… 这些坑在建站时反复出现。每条给一句能听懂的原因和一个可操作的解决办法,可以搜索、按分类筛选。 下面是全部静态内容,关掉 JavaScript 也能查。
部署与上线
多半是文件没传到站点根目录,或文件名大小写不一致,或伪静态没配。先确认文件真在站点目录、大小写和链接完全一致,再检查 Nginx 的 try_files 是否指向正确入口。
目录里没有 index.html,或文件权限不对。补上默认首页文件,把站点目录属主交给 www 用户、权限设为目录 755、文件 644。
浏览器和 CDN 各缓存了一份。HTML 响应头设 no-cache,带版本号的静态资源用 ?v=日期 换新地址,缓存自然被击穿。
发布分支没设对,或构建 Action 还在跑 / 报红。去 Pages 设置确认源分支,再看 Actions 是否绿勾通过。
一段 JS 报错就中断了整页渲染。按 F12 看 Console 红字,通常是 fetch 的 JSON 路径写错,或改了字段名没同步数据文件。
域名与解析
要么 A 记录还没生效,要么解析到国内 IP 但没备案被拦。用 nslookup / dig 确认域名已指到服务器 IP,国内服务器需先完成备案。
只给 www 配了记录。给主机记录 @ 也加一条 A 记录指向同一 IP,或加一条 www 与裸域之间的 301 跳转统一入口。
各地运营商按 TTL 缓存旧解析,改完不会全球立刻生效,通常几分钟到几小时。本地可 ipconfig /flushdns,或换个网络交叉验证。
签发时验证域名的请求要打到这台服务器。签发前先确认 A 记录已生效、80 端口可访问,再去申请证书。
未备案域名解析到国内 IP 会被接入商阻断。审核期可先把域名指到海外节点,或暂停国内解析,等备案号下来再切回。
HTTPS 与证书
页面里还引着 http:// 的图片、脚本或链接。把这些资源全改成 https 或相对协议 //,浏览器才会给小锁。
Let's Encrypt 证书有效期 90 天,没配自动续期就会过期。在面板里开自动续期并保留 cron,确保续期时 80 端口能被访问验证。
证书只是「能用 https」,没强制走 https。在 Nginx 加 80 到 443 的 301 跳转,或在面板勾选「强制 HTTPS」。
源站强制 https,CDN 却用 http 回源,两边来回踢。把 CDN 回源协议改成 https(或跟随协议),只保留一层跳转。
https 页面里塞了 http 资源,被浏览器拦下。全局搜 http:// 换成 https,重点查旧图床和第三方脚本。
Nginx 与配置
花括号或分号没配对,常见于复制粘贴多出一段。按报错行号往上找最近的 server{} 块,补齐缺的括号、去掉多余的分号。
要么没重载,要么改的不是实际加载的那份。先 nginx -s reload,确认改的是 sites-enabled 里真正被引入的配置。
反向代理的上游(PHP / Node / 某服务)没运行或端口不对。先确认后端进程在跑、proxy_pass 的端口一致,面板里看服务状态。
没指定兜底站点,或多个 server_name 撞车。给兜底站点加 default_server,保证每个站 server_name 唯一。
响应没压缩,白耗带宽。开启 gzip,设 gzip_min_length,对 text/css/js 压缩,纯静态站提速很明显。
CDN 与缓存
CDN 命中了旧缓存。按 URL / 目录提交刷新,或给资源加版本号让地址变化、旧缓存自然失效,比手动刷全站省事。
HTML 被长缓存、静态资源反而没缓存,导致频繁回源。改成 HTML 短缓存或不缓存、带版本号的静态资源长缓存,命中率立刻上来。
CNAME 没指向 CDN 分配的域名,或和原 A 记录冲突。先删掉同名旧 A 记录,再加 CNAME 指向 CDN 给的接入域名。
被盗刷或缓存没命中导致海量回源计费。开防盗链、设单 IP 频率限制、把静态资源长缓存,先止血再排查来源。
收录与 SEO
robots.txt 里一句 Disallow: / 就能把全站挡在门外。检查 robots、提交 sitemap、确保关键内容能被静态抓取。
sitemap 是旧的、把已删除页面也写了进去。用构建脚本按磁盘真实文件重新生成,删页后重生成再提交搜索引擎。
hreflang 缺自指或三向不成对,搜索引擎把两版当重复内容。zh、en、x-default 三向互指,canonical 各自指向自己。
canonical 写成别的 URL,权重被分流到不存在或非规范的地址。让 canonical 精确指向当前页规范地址,https 与结尾斜杠保持一致。
富结果测试报错,多为缺字段或用了单引号 / 尾逗号。字段名和值都用双引号、补齐 name / url,提交前先用结构化数据校验工具过一遍。
内容全靠前端 fetch 后渲染,爬虫抓到的是空标签。把关键文字静态写进 HTML(本页就这么做),JS 只负责搜索 / 交互等增强。
静态站与 JS
用 file:// 直接打开时浏览器禁止本地 fetch。起个本地服务再访问,比如 python -m http.server 8080,然后开 localhost。
字段名写错,或浏览器用了缓存。F12 的 Network 看那份 JSON 是否 200、内容对不对,再硬刷新绕过缓存确认。
路径写成绝对路径,或文件名大小写对不上。用相对路径引用,并确保大小写和真实文件名严格一致。
线上引用的是压缩版,改了源文件没重新生成。跑一遍压缩脚本重出 .min.*,再换 cache-bust 版本号刷新。
备份与恢复
远程目标目录不存在,或部署用户没有写权限。先在服务器上建好目录并授权给部署用户,配好 key 免密再同步。
计划任务里用了相对路径,cron 的工作目录和你以为的不一样。crontab 里一律写绝对路径,并把日志重定向出来方便排查。