外链建设的主要工作是研究。在发出第一封外联邮件之前,必须有人去搜索潜在目标,把真正的发布方和链接农场区分开,查看谁在链接竞争对手,之后还要检查每一条已获得的链接是否仍然存在。几十个网站时,这是手工活。几千个网站时,就会遇到 CAPTCHA、速率限制以及因国家而异的结果,这正是住宅代理发挥作用的地方。
本指南介绍外链建设人员会自动化的四项研究工作、每项工作需要收集哪些数据,以及如何配置代理以确保数据完整准确。
为什么外链研究会碰壁
当你只用一条办公室网络来扩大外链研究规模时,会出现两个问题。
数量。 一轮挖掘可能包含数百次搜索查询,每次查询有好几页结果,之后还要逐一抓取每个结果进行筛选。Google 会用”异常流量”页面回应来自同一 IP 的重复自动化查询,许多发布方网站也部署了机器人防护,会对快速的重复访问发起验证。这一轮要么中断,要么更糟:继续运行,把验证页面当作真实结果记录下来。
位置。 搜索结果是本地化的。搜索 “guest post” 加上某个主题,在美国、德国和印度返回的网站各不相同,而本地商家需要来自本地网站的链接。如果你从自己的国家搜索,就只能看到自己的市场。我们在本地化 Google 搜索结果指南中解释了结果会因位置变化多少。
带国家定位的轮换住宅 IP 可以同时解决这两个问题:每个请求都来自你所选市场中的不同家庭网络连接,看起来就像当地的普通搜索用户。
工作一:用搜索 footprint 挖掘目标
大多数潜在目标列表都从搜索运算符开始,这些运算符被称为 footprint,用来找出可能接受投稿或链接的页面:
"write for us" + topic和intitle:"guest post" + topic,用于寻找客座文章目标。inurl:resources + topic和intitle:"useful links",用于寻找资源页面。"best tools for" + topic,用于寻找可能适合放入产品的汇总文章和榜单文章。- 竞争对手的品牌名并排除其自有域名,用于寻找提到他们、也可能提到你的页面。
需要收集的数据: 结果 URL、标题、排名位置以及找到它的查询。为每个结果保存对应的查询,之后就能看出哪些 footprint 能带来优质目标,并淘汰效果不好的。
代理配置: 每次请求都轮换 IP,并定位到你正在建设外链的市场所在国家。让每个 worker 保持低速,并行运行多个,而不是只用一个高速 worker。在保存一页结果之前,先确认它确实是结果页面,而不是同意弹窗或 CAPTCHA。
工作二:筛选潜在目标
一份包含 2,000 个 URL 的原始列表中,可能只有 200 个网站值得发邮件。逐一抓取并打分,可以省去大部分人工审核。
每个网站需要收集的数据:
- 网站是否在线并返回正常页面。
- 网站面向的语言和国家(
lang属性、hreflang 标签、货币、地址)。 - 是否发布近期内容,可根据博客索引页或站点地图中的日期判断。
- 链接农场的迹象:数百个互不相关的主题、“赞助文章”价目表、所有出站链接都标记为 sponsored。
- 联系页面或编辑部邮箱(如果有公开)。
代理配置: 每次请求都轮换。大多数发布方网站规模较小,不会拦截,但列表中较大的媒体网站往往会拦截,而一个被评为”在线网站”的验证页面会毁掉整个列表。我们的识别被拦截或伪造的内容指南介绍了如何在这些响应进入数据之前将其拦下。
工作三:竞争对手反向链接研究
反向链接工具会告诉你谁链接了竞争对手。但它们不会告诉你那个页面今天是否仍然有这条链接、锚文本和周围段落现在是什么样子,也不会告诉你链接是否为 follow。
从反向链接工具中导出竞争对手的引荐页面,然后自己逐一抓取每个页面并记录:
- 链接是否仍在页面上。
- 锚文本和
rel值(nofollow、sponsored、ugc或无)。 - 页面本身是否可被索引:robots meta 标签和
X-Robots-Tag响应头中都没有noindex,并且 canonical 指向页面自身。
仍然保留链接、为 follow 且可被索引的页面就是你最好的目标:发布方已经表明它会链接像你这样的网站。
代理配置: 每次请求都轮换;如果链接方网站的内容会因位置而变化(例如地区新闻网站),则定位到该网站所在国家。
工作四:核实你建设的链接
已放置的链接会消失。页面会改版,文章会下线,有些发布方会在收款后悄悄加上 nofollow,或把链接换成跳转。如果你为客户做外链建设,每月检查是工作的一部分,而且这是客户读得最仔细的报告。
一个小脚本就能完成大部分工作。下面这个脚本通过轮换住宅 IP 抓取页面,并报告页面上是否有指向你域名的链接、它的 rel 值以及页面是否可被索引:
import requests
from html.parser import HTMLParser
PROXY = "http://customer-USERNAME-country-us:PASSWORD@p.shifter.io:443"
PROXIES = {"http": PROXY, "https": PROXY}
class LinkFinder(HTMLParser):
def __init__(self, domain):
super().__init__()
self.domain = domain
self.links = []
self.noindex = False
def handle_starttag(self, tag, attrs):
a = dict(attrs)
if tag == "a" and self.domain in (a.get("href") or ""):
self.links.append({"href": a["href"], "rel": a.get("rel", "")})
if tag == "meta" and (a.get("name") or "").lower() == "robots":
self.noindex = "noindex" in (a.get("content") or "").lower()
def check(page_url, domain):
r = requests.get(page_url, proxies=PROXIES, timeout=30,
headers={"User-Agent": "Mozilla/5.0"})
finder = LinkFinder(domain)
finder.feed(r.text)
header = r.headers.get("X-Robots-Tag", "").lower()
return {
"status": r.status_code,
"links": finder.links,
"indexable": not finder.noindex and "noindex" not in header,
}
print(check("https://example.com/some-guest-post", "yourdomain.com"))
对已放置链接的列表运行这个脚本,与上个月的结果对比,并标记三种变化:链接消失、rel 值改变,或页面变得不可索引。在把某条链接报告为丢失之前,先加一步检查,确认响应是真实页面而不是验证页面。
代理配置: 每次请求都轮换;如果发布方网站会因位置显示不同内容,则定位到发布方所在国家。
选择轮换方式和定位
| 工作 | 轮换 | 定位 |
|---|---|---|
| 搜索挖掘 | 每次请求 | 目标市场所在国家,本地 SEO 则定位到城市 |
| 筛选潜在目标 | 每次请求 | 通常不需要 |
| 竞争对手链接检查 | 每次请求 | 内容因位置而变化时定位到国家 |
| 核实已放置的链接 | 每次请求 | 内容因位置而变化时定位到国家 |
对于本地外链建设,例如需要来自本市网站链接的牙科诊所或律师事务所,城市定位在挖掘阶段最为重要,因为本地结果是按搜索者的位置排名的。我们的 SEO 监测页面介绍了团队如何在同一网络上将这些检查与排名跟踪一起运行。
保持合规
在这里,代理是一种研究工具,这也正是它应有的用途。Google 的垃圾内容政策将购买传递排名权重的链接、大规模交换链接和自动化放置链接视为链接垃圾。用代理来寻找机会和检查结果;用值得引用的内容和真诚的外联来赢得链接。绝不要用它们发布评论、批量创建账户或运营链接网络。
在小型发布方网站上保持适度的请求频率,只读取公开页面,并遵守每个网站的条款。
总结
大规模外链建设是一个数据问题:数千次搜索用来寻找目标,数千次抓取用来筛选目标,还有持续不断的检查来确保你赢得的链接仍然有效。具备轮换功能以及国家或城市定位的住宅代理能让这些研究持续运行,并以当地搜索者的视角呈现每个市场。为众多客户开展这项工作的代理机构通常会把它放在同一个网络上,并为每个客户单独跟踪,详见我们的代理机构页面。