我的编程技术分享 返回文章列表

境内上线一个网站,要办几份备案

备案合规 2026-10-12

去年做一个小程序,备案这件事我以为走一遍流程就完了。实际办下来才发现, 「备案」不是一件事,是至少三件事,分属两个部门,各有各的编号,互不通用。

这篇把三份备案的关系、个人主体的边界、以及一个我实际犯过的错误写清楚。

一、三份,不是一份

备案主管部门 办的地方时限
ICP 备案
域名
通信管理局
(工信部体系)
通过云厂商提交 7–20 个
工作日
小程序备案
应用
通信管理局 微信公众平台 1–20 个
工作日
公安联网备案
网站 + 应用
公安网安 beian.mps.gov.cn 联网运行起
30 日内

三者的关系不是「先 A 后 B」这种简单串行:

最容易被忽略的是第三份。它的法律依据在《计算机信息网络国际联网安全保护管理办法》第十二条, 逾期未办的处罚写在第二十三条——警告或者停机整顿不超过六个月。这不是可以拖的事。

二、备案信息必须和实际内容一致

这一条比流程本身重要。备案系统里填的「网站名称」和「服务内容」, 审核方会打开你的网站核对。不一致的后果是驳回或限期整改。

我见过三种典型的不一致:

  1. 名称写得很宽,内容做得很窄。填「技术分享」,打开是空白页或者「建设中」;
  2. 内容是产品介绍,名称却是个人博客。这种情况在个人主体上经常出现——想做产品的落地页,但备案时随手填了个名字;
  3. 服务内容选了「生活服务」但页面上有交易。个人主体不能做经营性内容,有购买按钮就已经越线。

处理方式只有两个:改备案信息,或者改网站内容。没有第三条路。

如果网站还没做完就去提交备案,最好先在域名上放一个最简的说明页——一页 HTML, 写清站点名称、大致内容和联系方式。审核员打开能看到东西, 比打开是「无法访问」或「403」要好得多。

三、API 型域名怎么处理

有一种常见情况:域名只用来给小程序提供接口,根路径不放任何面向用户的页面。 这类域名在备案时会有点尴尬——既没有内容可核对,又需要履行「首页底部悬挂备案号」的义务。

我的处理方式是根路径返回一页极简静态页,只有三行:

<!doctype html>
<title>服务说明</title>
<p>本域名仅提供某小程序的接口服务,不面向公众提供网页内容。</p>
<p><a href="https://beian.miit.gov.cn/">某ICP备XXXXXXXXXX号</a></p>

这样既满足悬挂义务,又不会让「纯接口域名」的定性变成「有面向公众的网页内容」。 页面里刻意不放任何业务介绍、联系方式、产品截图——多放一样,性质就变了。

Nginx 侧对应的配置是:

location = / {
    root /var/www/html;
    try_files /index.html =404;
}

location /api/ {
    proxy_pass http://127.0.0.1:3000;
}

location / {
    return 404;
}

四、个人主体的边界

个人备案能做的事,比很多人想的窄。几条硬边界:

最后一条对我影响最大。原本想做的是一个「云端备份」功能,后来把定位改成 「本地文件整理工具 + 可选的加密备份」,容量作为会员权益的一项而不是售卖的资源—— 同样的技术,表述方式不同,定性就不同。

五、一个真实的错误:备案号挂错了

这件事值得单独写一节。

域名备案通过后,我拿到了 ICP 号。过了一段时间,听说还有一份公安联网备案要办, 就去查了一下,在某处搜到一个「闽公网安备XXXXXXXXXXXXXX号」,看着格式对、地区对, 就直接挂到了首页上,以为这件事办完了。

后来才发现:那个号根本不是我的域名。

问题出在判断方式上。公安备案号的格式是「省简称 + 公网安备 + 区划码 + 序号」, 区划码只表示受理的区县,不能用来判断归属。用搜索引擎或者按规律猜,得到的号和你没有关系。

挂错号的后果比不挂更重:性质是虚假悬挂,会被要求立即整改, 情节严重时按第二十三条一并处理。而如果确实还没办,页面上就不该出现那一行。

正确的确认方式只有一个:登录 beian.mps.gov.cn,在「我的备案」里看那条记录 绑定的域名和主体是不是自己。系统里没有,就是没办。

顺带一个技术上的处理:如果是用脚本生成备案页,那么「没填就整行不渲染」比「显示待补充」要好。 后者等于在公网首页上对外宣告自己还没办完。

ICP_LINE=""
POLICE_LINE=""
[[ -n "$ICP_NO" ]]    && ICP_LINE="<p>$ICP_NO</p>"
[[ -n "$POLICE_NO" ]] && POLICE_LINE="<p>$POLICE_NO</p>"
# 模板里只放变量,值为空时那一行就不存在

六、几条实操经验

七、小结

备案这件事的难点不在流程,在于它约束的是产品定性,不是代码。 同样一个功能,叫「云端空间」还是叫「备份权益」,过一次审核的结果可能完全不同。

所以正确的顺序是:先想清楚要做什么,对照边界判断它属于哪一类,再决定怎么写文案、选什么类目、办哪几份备案。 反过来做——先写代码再补手续——几乎一定会返工。