360站长平台自动提交接口配置:别手动点了,搞定360站长提交接口
干了6年运维和SEO,我经手过的独立站少说也有上百个。做外贸站的朋友平时眼里只有Google、Bing,但只要你的业务线或者部分镜像站吃国内流量,那360和百度这两个“地头蛇”就绕不开。很多新手站长每天守着后台,文章一更新就去后台手动粘链接,这种纯体力活纯属浪费生命。搞定360站长平台自动提交接口配置,用几行脚本配合Linux定时任务,才是正规军该干的事。今天不扯那些虚头巴脑的收录玄学,直接把接口配置、提交流程和线上跑的自动化脚本给你们扒开看。
一、 第一步:拿到360的入场券(Token与接口地址)
360的接口说实话没Google Search Console那么现代化,但胜在逻辑粗暴。在配接口前,默认你已经搞定了域名所有权验证(建议走DNS TXT解析验证,省得以后换Nginx配置把验证文件给干丢了)。
- 登录 360站长平台(
zhanzhang.so.com),进到管理控制台。 - 找到左侧菜单栏的 “数据提交” -> “接口提交”(有时叫API提交或链接提交)。
- 这时候你会看到官方给出的两个关键信息:
- 接口调用地址:通常长成这样:
http://data.zz.baidu.com/...抱歉串台了,360的是:http://zhanzhang.so.com/push?site=你的域名&token=一串32位的密钥。 - Token(密钥):系统随机生成的,千万别泄露,谁拿到都能往你的站长后台灌垃圾数据。
- 接口调用地址:通常长成这样:
老站长提醒:如果你的站点启用了全站HTTPS,注意看接口协议说明。虽然官方接口有时写着
http,但实测现在直接POST到它的HTTP接口也是通的,会自动在服务端处理,不需要纠结协议头。
二、 接口的数据格式长什么样?
360的API接收方式极其原始:纯文本的HTTP POST请求。
你不能传JSON,也不能传XML,它要的是每行一条URL的纯文本(text/plain)。比如你要提交3个新页面,请求体的内容就是:
https://www.yourdomain.com/post-1.html
https://www.yourdomain.com/post-2.html
https://www.yourdomain.com/post-3.html
别加逗号,别加引号,一行一个回车。单次提交上限一般在几十到几百条之间,但听我一句劝,别一次性怼上万条,360的服务端接口很容易直接超时给你甩个502。
三、 线上环境实测:自动化推送脚本(Python版本)
既然要做自动化,就别用什么现成的破插件了,尤其是跑WordPress或者自建站的,插件装多了又慢又有安全隐患。
我服务器上一般跑这套Python脚本:自动抓取网站最新的sitemap.xml,比对上次提交记录,只把新增的URL通过接口推给360。你可以直接扔在Linux服务器的/data/scripts/目录下。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 360站长平台自动提交脚本 - 生产环境实操版
import requests
import xml.etree.ElementTree as ET
import os
# ====== 配置区域 ======
SITEMAP_URL = "https://www.yourdomain.com/sitemap.xml"
API_URL = "http://zhanzhang.so.com/push?site=www.yourdomain.com&token=你的32位TOKEN"
RECORD_FILE = "/data/scripts/pushed_360.log"
# =====================
def get_current_urls(sitemap_url):
"""拉取并解析Sitemap"""
try:
headers = {'User-Agent': 'Mozilla/5.0 (compatible; PushBot/1.0)'}
resp = requests.get(sitemap_url, headers=headers, timeout=10)
if resp.status_code != 200:
print(f"[Error] Sitemap拉取失败,状态码: {resp.status_code}")
return []
root = ET.fromstring(resp.content)
# 处理带命名空间的标准Sitemap
namespace = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
urls = [elem.text.strip() for elem in root.findall('ns:url/ns:loc', namespace)]
return urls
except Exception as e:
print(f"[Error] 解析Sitemap异常: {str(e)}")
return []
def get_history_urls(record_file):
"""读取已提交的历史记录"""
if not os.path.exists(record_file):
return set()
with open(record_file, 'r', encoding='utf-8') as f:
return set(line.strip() for line in f if line.strip())
def push_to_360(urls, api_url):
"""推送URL到360接口"""
if not urls:
print("[Info] 没有检测到新URL,跳过推送。")
return
# 360要求纯文本,一行一个
payload = "\n".join(urls)
headers = {'Content-Type': 'text/plain'}
try:
response = requests.post(api_url, data=payload, headers=headers, timeout=15)
print(f"[Result] 360响应状态码: {response.status_code}")
print(f"[Result] 360响应内容: {response.text}")
# 只要不是5xx/4xx,记录日志避免重复推
if response.status_code == 200:
with open(RECORD_FILE, 'a', encoding='utf-8') as f:
for url in urls:
f.write(url + "\n")
print(f"[Success] 成功处理 {len(urls)} 条新URL。")
except Exception as e:
print(f"[Error] 推送失败: {str(e)}")
if __name__ == "__main__":
current = get_current_urls(SITEMAP_URL)
history = get_history_urls(RECORD_FILE)
# 差集计算:找出未推送的新URL
new_urls = [u for u in current if u not in history]
push_to_360(new_urls, API_URL)
四、 挂到Linux系统调度(Crontab)
脚本写完,在本地测通(看到errno: 0类似的回执)之后,剩下的就是让系统自己去跑。别一天推八百次,360对频次敏感,一般内容站每天或者每半天跑一次足够了。
在服务器终端执行:
crontab -e
追加一行定时任务(以每天凌晨4点自动抓取推送为例):
0 4 * * * /usr/bin/python3 /data/scripts/push_360.py >> /var/log/360_push.log 2>&1
把输出重定向到/var/log/360_push.log,过两周回来看一眼日志。如果有报错,查日志清清楚楚,没必要天天盯盘。
五、 踩坑总结与运维大实话
关于360的收录,我多说两句行业里的现状:
- 别迷信JS自动推送代码:早几年各家站长平台都推过那种嵌入前端的
<script>自动推送,用户访问一次就暗中推一次。现在主流浏览器安全策略越来越严,加上360自家的JS服务经常抽风超时、拖慢TTFB(首字节响应时间),严重影响海外访问国内站的加载体验。早就该弃用了,踏踏实实走服务端API。 - 接口返回报错排查:
- 报
400或 认证失败:检查Token对不对,还有URL里的site参数是否与你在平台验证的域名完全一致(带不带www是两个站点)。 - 报 超限:降级单次提交的条数,一次截取50条发一次,加个
sleep(2)。
- 报
- 提交了≠会收录:API提交的作用,仅仅是把你的URL“塞进爬虫抓取队列”,省去了它爬你首页再层层寻路的时间。收录的根本,还是看你的页面内容质量、服务器在大陆节点的响应速度(别套海外烂CDN)以及TTFB表现。
把上面这套接口配置顺下来,建好属于你自己站点的推送流水线,以后不管是更几百篇产品页还是文章,系统都在后台静默干活,这才是运维该有的摸鱼修养。

