11 月 10 号傍晚,我在上海市金山区的出租屋里改首页的板块,手机响了。

上海号码,接起来是属地网安。

对方语气不算重,但话说得很清楚:我提交的公安联网备案,不予。理由两条——站上有两个下载,涉及交互;提交的时候填的是非交互式,属于"申报与实际不符"。

我问有没有书面材料或者整改通知,对方说口头通知就行,改好了重新提交。

挂了电话我在椅子上坐了一会儿,把整个站从首页到尾页在脑子里过了一遍。

那两个下载我知道是啥:君陌工具箱、省流聊天。两个都是我自己做的软件,页面上确实挂了下载入口,我认。

但"涉及交互"这四个字我一开始没想明白。一个纯静态博客,没有数据库,没有登录,连后台都没装,怎么就交互了。

后来我去翻判定标准,翻完才明白问题出在哪。

一、官方口径里,"交互式"比我想的宽

先去查了阿里云 ICP 备案帮助文档里那段话,原文是:

交互式网站指通过互联网平台实现用户与用户之间或用户与平台之间交流互动的网站,含站内搜索、留言板、在线聊天、用户评论等功能。非交互式网站指仅展示静态信息、无用户互动功能的网站。

关键在"含站内搜索"这五个字。

我原来的理解是:只要不是论坛、不是社区、不能发帖,就算非交互。但这个词条把"站内搜索"直接列进去了。

又去翻了黑龙江管局那份《单位国际联网备案工作指南》,里面写:

交互式服务指为互联网用户提供信息发布、交流互动等服务,包括但不限于论坛、网络购物、在线支付等服务类型。非交互式服务常见类型为单位门户网站……

还有一句我觉得最该被看见的:

非交互式网站审核完成后即完成备案,交互式网站需要进行面审或实地检查。

这句话解释了为什么网安这么在意这个选项。选"否",材料齐了流程就走完了;选"是",后面还有一道面审或者上门检查。所以填报和实际是否一致,是审查抓的第一个点。

顺带说一句,阿里云那份文档里还有个兜底说法:不确定的时候可以先选"否",被驳回了再改。我这次不算"不确定",是真觉得自己的站是非交互,只是没意识到搜索框这层。

二、对着清单,逐项核自己的站

我把可能的交互点列成一张表,一条一条去站上找。

交互类型 我的站有没有 怎么核的
站内搜索 有,唯一的真控件 首页文章列表页有个输入框
留言板 无 全站扫 <form>,0 个
用户评论 无 文章页底部只有"交流方式",没有输入框
在线聊天 无 无
论坛 / 社区 无 无
注册 / 登录 无 没有会员系统,没有 session
投稿 / 上传 无 没有上传接口,服务器上没写目录
在线支付 无 无
软件下载分发 有,两处 首页卡片 + 两个落地页

这张表填完,其实只有两项是真问题:两个下载,和一个搜索框。其他都是空的。

之前有人跟我说站上有"43 个搜索、33 个注册、24 个登录、7 个评论、1 个留言",我一开始还紧张了一下。后来逐条看,前面那些数字全是文章正文里出现的词——我写过 Docker 教程、写过备案经历,正文里当然会有"登录""注册""评论"这些字。

真正能点的控件只有一个搜索框。

这点值得单独说:审查看的是页面上的功能,不是词频。但你自己得先分清楚,别被自己的关键词吓住。

三、第一个动的:两个下载

先说最直接的两处。

首页卡片。 原来君陌工具箱那张卡上写的是「macOS 可下载」「Windows 编译中」,省流聊天那张也是类似的写法。这两句话是分开的两个 <span>,在卡片里并排显示。

我改成了一句:「内测版本,暂不对外提供」。两张卡都这么改。

为什么合成一句:同一句话在同一个卡片里写两遍,页面上就是两行重复文字,看着像排版出错。

省流聊天的落地页 /dfy/。 这页问题更大。导航栏里有「立即下载」,hero 区有两个带下载箭头 svg 的按钮,下面还跟着一行提示,写了提取码 8888。

再往下是两个百度网盘的大按钮,链接是 pan.baidu.com/s/1WTUKhRQKbY6bgN_A2w7MtA?pwd=8888 和 pan.baidu.com/s/1RCz14tf5tjJna-OmWeVjRQ?pwd=8888,各自下面还有一段 <div class="pw"> 写着提取码。

这一整块我全删了。导航里的「立即下载」删掉,两个带箭头的按钮和那行提示换成一句「内测版本,暂不对外提供」,两个网盘按钮删掉,两处提取码删掉。页头那个 免费下载 的小标签改成「内测阶段」,下面那个「现在就用省流聊天」的大标题也换成「内测版本,暂不对外提供」。

删完这一页,"下载"两个字一次都不出现了。

君陌工具箱的落地页 /junmo-toolbox/,这页是我最后才发现、也是最严重的。

它的两个按钮不是文字,是 <a href="君陌工具箱-Mac.zip" download> 和 <a href="君陌工具箱-Windows.exe" download>——href 直接指向服务器上的安装包文件,浏览器点下去就真下载,Windows 那个包 168MB。

这不是"页面上有下载字样",这是在页面上直接分发安装包。审核要是点一下,文件就下来了。

改法:把两个 <a> 换成 <div>,去掉 href 和 download 属性,加 cursor:default;pointer-events:none;,让它们变成纯展示的方块。按钮里的文字从「macOS 下载 / Apple Silicon·免安装直接打开」改成「Mac 版」,Windows 那个改成「Windows 版」。底部那段「macOS 版解压即可使用……Windows 版下载后双击安装即可」整段删掉。导航里那个 <a href="#download">下载</a> 改成「内测信息」。

然后我把两个安装包从网站目录挪到了 /home/ubuntu/backup/ 下面,没删,随时能挪回来。

挪完实测了直链:https://www.moxiaoa.com/junmo-toolbox/君陌工具箱-Mac.zip 和 .../君陌工具箱-Windows.exe,两个都 404。

这一步比改文字重要。文字改了但文件还在原地,直链照样能下,等于没改。

还有一处是我自己找出来的:/devkit/。

那是个 Vite 打包的纯前端工具站,跟备案没有直接关系,但我扫了一遍文案,命中了 99 处"下载 / 上传"。其中大量"上传"是否定声明,比如"不上传""不会上传至服务器"——这些话对备案其实是加分项,说明你明确不收集数据,语义必须保住。

所以我没有一律替换,而是按"长词优先、否定句先兜"的顺序做了替换链,最后把"下载"换成"导出","上传"换成"选择",特例句单独处理。改完 25 个文件,剩余命中 0。

这里踩了个真故障,值得写下来:脚本里我写 os.chmod(p, 644),Python 按十进制解析成了 0o1204,属主 www 立刻失去读权限,线上直接 403,返回一个 146 字节的错误页。改成 0o644 才恢复。这个 0o 前缀少写一位,整站就打不开。

四、第二个:那个搜索框

全站扫 <input> 和 <textarea>,最后只剩一个,在首页的「全部文章」列表页:

<input type="text" class="search-box" id="searchInput"
       placeholder="搜索文章标题或内容..." oninput="filterArticles()">

它不在首屏,藏在点「查看更多」之后才出现的列表页里,我自己平时都不太用。

但功能上它就是站内搜索。filterArticles() 是个纯前端函数,拿 articles 数组在 title、excerpt、category 里做匹配,不发请求、不落库、不写服务器。

按阿里云那段原文,「站内搜索」明确在交互式功能列表里。所以这个不能留。

怎么处理,我想过三个方案:

直接删光。 最干净,但列表页就彻底没有找文章的入口了,53 篇文章只能从头往下滚。用户体验上说不过去。

改成 JS 分类筛选。 保留交互感,但要动渲染逻辑,容易把列表页搞出 bug,而且筛选本身还是"用户操作后页面变化",不一定比搜索更安全。

换成分类导航链接。 最后选的是这个:把输入框整个换成 6 个胶囊链接,纯 <a href> 跳转。

<a href="/docker/">Docker 与容器</a>
<a href="/nas/">NAS 与影音</a>
<a href="/beian/">ICP 备案</a>
<a href="/seo/">SEO 与收录</a>
<a href="/ai/">AI 与本地大模型</a>
<a href="/hardware/">硬件与老设备</a>

没有输入框,没有表单,不跑任何筛选函数。审核看到的就是一排导航入口,点进去是分类页,跟首页导航没区别。filterArticles() 这个函数也一并删掉了。

顺带对 SEO 还有点好处:多了 6 条指向分类页的内链。

改完扫全站:/、/all.html、/dfy/、/junmo-toolbox/、/devkit/,<input>、<textarea>、搜索框,全部 0。

五、申报表上那几个容易填错的字段

顺便把表上几个卡过我的地方记一下。

接入商。 我的服务器在腾讯云,但表上「接入商所属地区」不能填上海——要填北京市,"接入商名称"选腾讯云计算(北京)有限责任公司,"接入商所属区域"北京市市辖区海淀区,电话 4009100100。我第一次按服务器物理位置填了上海,下拉里全是上海本地的 IDC,翻了半天找不到腾讯云。

接入方式。 选「租赁虚拟空间」,不是「主机托管」。

域名注册服务商。 我的是 DNSPod, Inc.,所属地区北京市。

是否提供互联网交互服务。 这一栏是核心。我的判断是否——整改完之后,站上没有输入框、没有表单、没有账号体系、没有内容发布入口、没有用户数据落库、没有用户之间互相可见的东西,四条全无。

相关前置许可。 个人主体,直接选「否」。

IP 千万别填错。 我截图里一度出现过 45.143.242.111,查了一下那是在哈萨克斯坦的地址,跟我的站一点关系没有。正确的是 111.231.171.160。

六、现在的状态

到写这篇的时候,站上跟"下载"有关的东西已经是这样:

备案还没重新提交。等这轮观察几天,确认页面上没有漏的入口,再去填。

最后说一句给同样卡在这一步的人:别在"交互式"这三个字上猜。 去看你所在接入商那份帮助文档,它会把"站内搜索、留言板、在线聊天、用户评论"一个个列出来。对着列出来的功能,一条一条去自己站上找。找到了就处理,找不到就是没有。猜出来的判断,被驳一次就得重来一遍。


如果你也在折腾备案,或者也卡在"交互式怎么填"这一步,可以加我微信 lige0552 聊聊。白天要上班,消息回得慢,看到都会回。