域名抢注这事儿,圈外人总觉得带点灰色。圈内人明白它就是拼手速、拼眼光。到了现在这个节点,.com 里能读能记的组合早就被扫过无数轮了。
新站上线冷启动三个月,能有个位数自然流量都算运气好。团队手里同时跑五六个项目,域名库存见底的时候,谁还等得起那半年收录期?
过期域名到底值在哪
老域名自带“历史包袱”,但这个包袱恰恰是别人想要的。一个域名如果之前做过正经站,搜索引擎里可能还挂着几百条收录记录,外链哪怕断了一半,也比新域名从零开始强太多。
上次抢到一个过期两年的 .com,放上去第三天百度就抓了首页。同期注册的新域名等了快三周才进索引。更别提那些行业关键词域名,比如“shanghaifood.com”这种——你注册新域名得靠竞价排名才能让人搜到,老域名直接白嫖当年积累的品牌词流量。
执行门槛这几年确实降了很多。以前你得盯着 WHOIS 过期时间、手动算赎回期、再找抢注平台下单。现在脚本批量扫一遍,把历史外链、页面快照、垃圾内容风险打几个标签,出价策略就能自动生成。但反过来,门槛越低,坑越多。历史污染严重的域名——被黑过、挂过菠菜页面、被谷歌人工降权过的——抢过来不但没权重,还可能连累你主站被连带惩罚。你买的不是“一个网址”,而是这个网址过去几年积累的信任分。信用分高的,值几千块;信用分烂的,白送你都别要。
我是怎么用脚本批量扫域名的
最早的做法很原始:跑一圈 whois,把状态为 PENDING_RELEASE 的拉出来,再去搜索引擎 site: 一下,看还剩多少收录。够用吗?不够。光靠这俩指标,我把一个看起来“外链十万”的域名抢到手,结果一半是色情站链过来的,上线当天就被风控标记。
那之后我把流程拆成三步:抓取、打分、出价。
市面上不少平台提供“即将释放”列表,但格式千奇百怪。与其一个个下载再合并,不如让脚本直接调它们的查询接口。以 GoDaddy 为例,它的 expired domain search API 支持按后缀、长度、删除日期过滤。关键参数是 domainStatus,你得盯着 pendingDelete 和 redemptionPeriod 这两个值。下面这段 Python 代码演示了如何用 requests 去拉取一批 .com 待释放域名。
import requests, json, time
API = "https://api.godaddy.com/v1/domains/search"
headers = {"Authorization": "sso-key YOUR_KEY:YOUR_SECRET"}
params = {"limit": 1000, "sort": "expiryDate", "type": "expired", "suffix": ".com"}
resp = requests.get(API, headers=headers, params=params)
for hit in resp.json()["domains"]:
if hit["status"] == "pendingDelete":
print(hit["domainName"], hit["expiryDate"])
拿到名单只是第一步。真正麻烦的是判断“值不值得抢”。我不打算训练模型,于是走了个巧招:把每个域名的历史快照丢给 GPT-4,让它帮我读页面内容,判断是不是正经网站。具体做法是先用 archive.org 的 CDX 接口抓回所有快照,再用 urllib 模拟浏览器请求,把 HTML 正文提取出来。GPT-4 的任务很简单——“这段话讲的是什么行业?有没有敏感词?”返回的结果我转成向量存起来,方便后续做相似度匹配。
这么做最大的好处是能筛掉“伪相关”域名。比如有个叫“healthpills.net”的,标题全是减肥药,但正文其实是机器生成的乱码。这种站点即使有外链也白搭,因为搜索引擎早就把它拉黑了。我的脚本会在评分表里给它打个大大的红叉。
最后输出的不是一堆 JSON,而是一张带颜色的 Excel。每一行包括五个字段:域名、行业标签、历史外链数、收录量趋势、风险等级。其中风险等级由三个子项决定——是否被谷歌人工干预过、是否有大量垃圾外链、是否涉及商标词汇。分数低于 60 的直接忽略,高于 85 的进入“自动出价”队列。中间那截留给人工复核,毕竟机器还没法完全理解人类的玄学审美。
出价引擎:从数据到报价
评分表筛完,手里剩下一堆“可以抢”的域名。但下一个问题更棘手:出多少钱?
聚名网和 Godaddy 的竞拍机制不一样。国内平台偏向一口价加价模式,老外的拍卖行则是纯竞价,最后几秒还能 snipe。你不可能每个域名都手动盯盘,更不可能靠直觉报价——那跟扔骰子没区别。
我写了一个出价引擎,输入是评分系统输出的那五个字段,输出是一个具体的竞拍价。域名价格不是玄学,至少在我这套逻辑里不是。我把它拆成三块:基础估值、热度系数、利润底线。
基础估值靠外链数和收录量来算。每条历史外链我给它估 0.5 元,但仅限于来自教育机构(.edu)和政府(.gov)的链接——商业站的垃圾外链我不认,甚至要倒扣分。收录量则看百度站长平台的数据,过去 90 天还有索引的,每条加 2 元。这部分算下来其实很少,一个中等质量的域名基础估值大概在 80 到 300 块之间。
真正拉高价格的是热度系数。我会用 requests 去抓聚名和 NameJet 上同后缀、同长度区间的域名历史成交价,算一个中位数,然后跟当前在拍域名的出价人数做加权。如果某个 .com 域名有 5 个人在抢,热度系数就乘 1.8;要是只有 1 个,乘 0.6 就行。
def calc_bid(domain_score, history_prices, bidder_count):
base = domain_score['edu_links'] * 0.5 + domain_score['gov_links'] * 0.5 + domain_score['indexed_pages'] * 2
heat_factor = 1.0
if bidder_count >= 5:
heat_factor = 1.8
elif bidder_count >= 3:
heat_factor = 1.3
elif bidder_count <= 1:
heat_factor = 0.6
median_price = np.median(history_prices) if history_prices else base
raw = max(base * heat_factor, median_price * 0.7)
return raw
没用什么深度学习模型。一个简单的加权计算加上历史数据校准,就已经能跑赢大多数手动出价的人了。
出价引擎最后一步是检查利润率。我设了一个全局参数 PROFIT_MARGIN = 0.25,意思是任何域名的最终出价不能超过它预估转售价的 75%。预估转售价怎么来?我抓了 Sedo 和 Afternic 上同长度、同后缀、同行业的域名近半年成交价,做了个线性回归。虽然回归的 R² 只有 0.3 左右,但至少能划出一条“别瞎出”的红线。
举个例子: 这个域名基础估值 120 块,但因为它跟摄影器材相关,而那个品类在 Sedo 上溢价严重,回归模型给出的预估转售价是 900 块。那么我的出价上限就是 900 * 0.75 = 675。再加上热度系数 1.3(只有 2 个人在抢),最终报价是 675——而不是更高的数字。如果基础估值算出来是 500,但预估转售价只有 600,那出价引擎会直接跳过这个域名,因为利润率不够。
这条规则帮我挡掉了不少坑。有一次系统对 techbuzz.io 报了 450 块,结果竞拍结束只有我一个人出价,捡了个漏。后来查历史数据才发现,这个域名的外链全是中文垃圾站,但预估转售价算法没识别出语言特征——所以我又加了一个“语言一致性”惩罚因子,非英文内容的域名直接打折 40%。
出价逻辑写完后,提交就只是 API 调用了。Godaddy 的拍卖接口用的是 OAuth 2.0,聚名的接口则走签名认证。我会把待出价的域名先写入一个 SQLite 表,然后每分钟轮询一次,在竞拍结束前 30 秒才提交最高价——这叫 snipe 模式,能避免过早暴露意图导致别人跟价。
def place_bid(domain, amount, platform):
if platform == 'godaddy':
payload = {"offer": {"amount": amount, "currency": "USD"}}
resp = session.post(f"https://api.godaddy.com/v1/auctions/{domain}/bids", json=payload)
elif platform == 'juming':
ts = int(time.time())
sign = hashlib.md5(f"{API_KEY}{ts}{domain}{amount}".encode()).hexdigest()
resp = session.post("https://api.juming.com/auction/bid", data={
"domain": domain, "amount": amount, "timestamp": ts, "sign": sign
})
return resp.status_code == 200
脚本跑起来之后,我基本不用盯着屏幕了。每天早上看一眼 Telegram 通知——谁中标了、花了多少钱、预估利润率多少——就够了。这套流程跑了一个月,中标率从原来的 12% 升到了 34%。当然,不是每次都能赚钱。有个 花了我 200 块,挂了大半个月没人问,最后 80 块甩了。但整体算下来,扣除所有成本,利润率还是正的。
三个月利润翻倍的实战记录
跑通出价之后,真正拉开差距的是“挑货”。我把那三个月最赚钱的几类域名,按品类和信号做了分类,脚本每次扫到就自动打标签。
第一类最好赚,是带行业权重的老.com。脚本会先拉 Ahrefs API 取 backlink profile,再用 Lighthouse 跑一次站内技术审计,剔除软404和过度重定向。我把“单引号/双引号混排锚文本”当成危险特征,遇到这种多半早年灰产用过。筛完还剩 60+ 个,再让 AI 读 Whois 历史和首页快照,给“可信度分”。有次抢到某个工业传感器相关的 .com,成本 180,挂出去两周就被米农 540 收走。
第二类是 3-5 字母或两词组合,含义模糊反而好卖。我在 Ollama 上跑 smallish 7B,做英汉双语品牌联想,只要“读音顺、拼写无歧义、能注册社媒同名”就算合格。脚本还会查 ICANN 统一 whois 的最近变更,若过去两年频繁过户,直接弃。靠这套规则,我用 90-120 的注册/抢注价拿了 9 个,平均 3-4 个月出手,毛利在 1.8-2.6 倍之间。
第三类最容易踩雷。我现在会让脚本并行查 Google Search Console 清理记录(如果前任愿意留)、Wayback Machine 的 /__/ 重定向史,以及 VirusTotal 的域名信誉。一旦命中“分发过恶意软件”或“用户举报钓鱼”这类标签,就直接进拒绝池。还有个坑是“过期后被泛解析灌了黄赌毒页面”,肉眼看不出来,只有抓取返回码才露馅。脚本发现异常,会在 SQLite 表里标 red,并阻断后续出价。三张清单轮着跑,三个月下来,净利润比之前瞎拍脑袋高了一倍多。
有些坑 AI 也救不了
脚本跑得再欢,域名抢注这事也躲不开几个要命的坑。有些坑,AI 甚至替你挖得更快。
先说历史污染。我最早用脚本批量扫 backlink 时,发现有个 .com 外链数量漂亮得很,Ahrefs 显示 200+ 引用域,还带几个 .edu 的。结果脚本抓了 Wayback Machine 快照一看——首页是十年前某减肥产品的垃圾站,评论区全是机器刷的“有效!瘦了20斤”。更恶心的是,这域名过期后被某灰产拿去泛解析,给菠菜站导过三个月流量。Google Search Console 里被标注了 manual action,搜一下 site:域名,首页都没收录。这种域名你要来干嘛?新站挂上去,轻则排名迟迟不出,重则直接被沙盒。脚本后来加了一道:查 VirusTotal 域名信誉分,低于 70 直接拒,Wayback Machine 的最后三条快照内容用 NLP 做个“内容清洁度”打分,凡是有大量外链农场、弹窗广告、盗版影视资源的,标红。
外链质量这块更玄。脚本能拉 backlink profile,但分辨不出“十年前的高权重.edu 友情链接”和“某 Fiverr 外包商批量发的 blog comment 垃圾链”。后者权重早归零了,还可能触发 Penguin 算法。我后来在脚本里写了个小函数 assess_backlink_quality(domain),逻辑很简单:但凡锚文本里“buy”“cheap”“click here”占比超过 15%,或者引用域里超过 30% 是 .xyz/.top/.loan,直接降权标记。别信什么“外链数量多就好”,外链年龄分布、域名多样性、锚文本自然度,这三项有一项烂,整个 profile 就废了。脚本里我还加了条规则:如果域名的外链中,超过 50% 指向的是同一 IP 段,或者大量域名都注册在同一天,基本就是 PBN 的养料池,碰都别碰。
竞价陷阱最隐蔽。热门域名抢注时,聚名网、DropCatch 这些平台会有竞拍机制,你脚本出价 200,对手可能出 300,最后成交价翻到成本的三四倍。有次我看中一个 4 字母 .com,含义能拼成“早鸟”,脚本评估下来品牌联想分 82,AI 给的建议出价上限是 150。结果竞拍最后 10 秒,系统弹到 370。我没跟,后来查 Whois,那个域名被另一个米农拍了,挂了半年没卖掉。脚本里可以加个“冷静策略”:如果当前出价超过 AI 评分的 1.6 倍,自动放弃,别上头。预算有限的话,我建议把出价上限写死在配置文件里,脚本跑完只把价格变动的域名抓出来发邮件通知,你自己手动判断要不要加价——AI 不懂什么叫“拍下来砸手里”的痛。
还有个坑是泛解析。有些过期域名,在释放前被注册商或某些第三方灌了大量子域名,指向菠菜、色情、甚至钓鱼页面。肉眼查首页快照可能看不出来,因为首页也许是干净的,但脚本一爬 就露馅。我在脚本里加了一步:随机生成 5 个不存在的子域名前缀,用 带上随机 User-Agent 去抓,如果返回 200 且页面标题含“bet”“casino”“adult”等关键词,直接打上“polluted”标签。这步做完,过滤掉的域名里有一半是我之前觉得“看起来还行”的。
AI 脚本能替你筛掉 80% 的雷,但剩下的 20%,得靠你对行业的直觉。比如有些域名历史清白、外链优质、竞价也没人抢,但你一看就觉得“这词没人搜”,那就别买。数据是死的,判断是活的。当你的脚本能稳定输出“可注册/不可注册”的结论后,最自然的下一步,是把它变成一个每天自动运转的小系统:固定时间扫库、把高价值信号推送到你常用的 IM 或邮箱、并在每次抢注结束后把“预测 vs 实际”的差异写回日志,供后续调参用。
从脚本到自动化系统
别靠手动运行。我在一台小 VPS 上塞了条 cron,每天 03:00 拉取当天释放列表,调用 assess_backlink_quality(domain) 与品牌联想分一起跑,再把新增/变动写进 sqlite。为了不吵醒自己,我把重任务拆成队列:先生成“候选池”,再逐步计算外链年龄分布、锚文本自然度、以及是否疑似 PBN 养料池(同一 IP 段、同一天注册批量域名这类特征)。
0 3 * * * /opt/domain-scanner/cli.php --fetch-released --project=portfolio-v2 --db=/data/domains.sqlite
通知不是全量播报,而是把“异常”和“机会”打包。我用企业微信机器人发了两条固定格式:一条给“今天最值得看 5 个”,另一条给“价格波动/即将竞价结束”的短名单。邮件也类似,正文里放域名、核心分数、以及一句话理由,比如“.com 短词,外链干净,但竞价在最后 10 秒可能跳价”。如果你不想被平台竞价裹挟,就把“冷静策略”写进配置:当实时出价超过 AI 评分的 1.6 倍,通知只标黄,不强推。
每次抢注落锤之后,我会把成交价、对手数、转手周期、还有“那次为什么没跟”全写回表里。最笨也最有效的法子:一条 SQL 把“预测区间 vs 实际成交”算出差值,月底导出 CSV,用 Python 拉几个图——哪些后缀溢价明显、哪类锚文本占比反而更扛跌。你会发现那些“看起来便宜”的 .xyz 砸在手里,根本原因不是后缀烂,而是引用域来源太单一;光盯着总量看,十个有九个误判。
把域名倒卖这事儿干成流水线,核心就一条:别让机器替你思考,但让它替你跑腿。筛选交给脚本,报价让算法算个区间,你只管拍板——再说,机器连你的加价冲动都能记住,下次出价自然帮你收着点。
评论