

# 如何在固定的必应关键词面板中比较竞品出现情况

在同一个固定的必应查询面板上，比较已检查的竞品域名。使用相同的所请求市场、语言和结果上限。每个有用查询对一个域名只计一次。在单独一列中保留其观察到的最佳排名。该结果是抽样的搜索出现情况。它不是市场份额。它也不是每个本地用户的结果。

Actor 是托管的数据采集程序。Task 是已保存的输入预设。Actor 采集源数据行。比较由你在本文中完成。

## 你在比较什么

域名是你选择要计数的网站主机。查询面板是一份精确短语的短列表。固定是指你在看到结果之前写好该列表，之后不再更改。上限是你要求为一条精确查询保留的最多结果数。

自然结果是指该行不是付费广告。对于自然结果行，isSponsored 为 false。出现是指该域名出现在该查询所保留的样本中。

not_seen_within_cap 表示该查询成功，且该域名在上限内没有出现。source_failed 表示该查询的覆盖情况未知。不要把失败的查询存成 0。unresolved_identity 表示你仍不能把该主机对应到该公司。该主机不是已知的未出现。

排名是该精确采集样本中的顺序。它不是对每个人都成立的排名。

## 设置必应输入

当前公开的 Google Search Scraper 版本是 1.0.15。该版本可以使用 Google、必应、Brave 和 DuckDuckGo。这些步骤只接受必应。已保存的 Task 是起始输入。它不会替你完成这次比较。

当前已保存的输入如下。你将替换整个查询列表和整个引擎列表。

```json
{
  "queries": ["competitor brand", "product category", "best product alternatives"],
  "engines": ["google", "bing", "brave", "duckduckgo"],
  "maxResultsPerExecutedQuery": 20,
  "country": "US",
  "language": "en",
  "safeSearch": true,
  "includeSponsoredResults": false
}
```

设置必应输入

第一次检查时，只使用 one intended phrase 和必应。把上限设为 2。已检查的验收使用国家 US 和语言 en。safeSearch true 会打开安全搜索筛选。includeSponsoredResults false 表示要求排除付费广告。不存在扩展设置。不要添加 page-limit 字段。已检查的两行试点正好读取了一页。

在运行此输入之前，把词语 one intended phrase 换成你的真实短语。

```json
{
  "queries": ["one intended phrase"],
  "engines": ["bing"],
  "maxResultsPerExecutedQuery": 2,
  "country": "US",
  "language": "en",
  "safeSearch": true,
  "includeSponsoredResults": false
}
```

设置必应输入

对于之后的面板，为每条精确查询选择同一个上限。保持相同的国家、语言、安全搜索和赞助结果设置。之后的上限由你选择。它不是隐藏字段。国家和语言是所请求的设置。它们不能证明读者住在哪里。它们也不保证地图结果或本地结果包。

## 阅读一行结果

一行是一个引擎、一条查询、一页和一个位置上的一条结果。Actor 可以在一次运行中保留许多查询。它不会为世界上的每个网站各生成一行。

把这些行字段用作源证据：

- runId 是该次采集运行的 id。
- country 是所请求的国家。
- language 是所请求的语言。
- safeSearch 记录安全搜索筛选是开还是关。
- engine 是该行的搜索引擎。
- executedQuery 是实际运行的精确短语。
- page 是结果页码。
- rankOnPage 是该页上的位置。
- rank 是所采集样本中的位置。
- title 是结果标题。
- canonicalUrl 是 Actor 清理后的地址。保持该字符串不变。它不是从页面 HTML 读取的 canonical 标签。它也不是原始链接的完整副本。
- resultDomain 是该地址中的主机。
- snippet 是搜索结果上的短文本。它不是从页面抓取的文本。它不能证明某项说法。
- 当该行是付费广告时，isSponsored 为 true。
- 当该行是广告时，advertiserDomain 是广告主主机。
- observedAt 是采集时间。
- schemaVersion 是行格式的名称。

如果某一行的 isSponsored 为 true，不要把它计入自然排名。Actor 不会打开目标页面。它不会去除全部额外页面文本。它不会检查引用。它不会给业务成功打分。它不会安排重复运行。与你的决定有关的页面，由你自己打开。

## 阅读运行摘要

OUTPUT 是运行摘要。它与单条结果行不是同一事物。在把一条查询标为有用之前，先阅读 OUTPUT。

- queriesRequested 是你发送的短语数量。
- searchesCompiled 是已准备的搜索数量。
- executionsPlanned 是已计划的引擎运行数量。
- enginesSuccessful 是成功的引擎数量。
- enginesFailed 是失败的引擎数量。
- pagesAttempted 是已尝试的页面数量。
- pagesParsed 是已读取的页面数量。
- resultsSaved 是已保留的结果行数量。
- engineStatusCounts 按引擎汇总状态。
- engineResultCounts 按引擎汇总已保存的行。
- queryResultCounts 按查询汇总已保存的行。
- stopReason 说明该次运行停止的原因。

一次当前的必应对照使用了短语 Python asyncio documentation，以及 US 和 en。它返回了两个直接的 docs.python.org URL。引擎是 bing。所执行的查询就是该同一短语。两行都在第 1 页。排名是 1 和 2。每一行都有 observedAt。OUTPUT 报告了一个成功的引擎、一个已读取的页面，以及 stopReason result_caps_reached。

该对照显示，必应对 URL、排名和采集时间的支持有限。它不是竞品面板测试。它不验证 Google、Brave 或 DuckDuckGo。它不验证每个运算符、每个国家，也不验证重复的排名测试。一条失败的 Google 路径含有重定向链接，其最终页面不明确。不要把这些链接当作已验收的页面地址。

达到上限的成功查询可以支持 not_seen_within_cap。失败的查询不能。上限或空结果并不表示你看到了整个索引。

## 进行比较

1. 先选择一个目标市场和一种语言。选择你需要作出的网站决定。写下查询列表。写下竞品列表。在看到谁出现之前完成这些工作。看到结果之后，不要增加或删除查询。看到结果之后，不要增加或删除公司。
2. 打开每家公司当前的公开网站。在运行之前写下精确的主机规则。说明子域是否计数。名称相似的博客、目录或联盟网站不会自动算作该公司。此身份检查由你完成。Actor 不验证公司。如果主机仍然不明确，标为 unresolved_identity。不要把该单元格当作已知的未出现。
3. 先用上面的必应输入运行一个短语。使用 maxResultsPerExecutedQuery 2。使用你所请求的国家和语言。已检查的验收只使用了 US 和 en。把 safeSearch 设为 true。把 includeSponsoredResults 设为 false。没有 page-limit 字段，也没有扩展字段。只有首次必应测试成功完成后，才运行完整的固定列表。对每条精确查询使用同一个上限。保持相同的市场设置。
4. 保留每一条有用的行。保存地址、引擎、排名和 observedAt。为每条已计划的查询阅读 OUTPUT。如果查询失败，覆盖情况未知。如果查询成功，且一个已知域名在上限内缺失，标为 not_seen_within_cap。不要用 0 填充失败的查询。
5. 制作一张竞品按查询的表。只使用 present、not_seen_within_cap、source_failed 或 unresolved_identity。同一域名在同一查询中的多个已验收页面仍只计为一次出现。保留页面行。这些行显示哪些地址和排名支持该单元格。不要按标题合并行。不要丢弃一条不同的查询字符串。
6. 对每个已知域名，用出现的查询数除以有用查询数。有用查询是在相同上限和设置下成功的查询。同时报告你计划了多少条查询。这个分数不是全部搜索的份额。它不是搜索量。它不是广告需求。它不是客户需求。如果许多已计划的查询失败，不要给出该面板比较，或者将其标为部分。不要隐藏失败的查询。
7. 对每个域名，在它出现的每条查询上保留最佳自然排名。条件均值只是这些最佳排名的平均值。排除没有看到该域名的查询。不要把缺失的排名记为 0。不要把它记为上限加 1。不要把缺失的排名当作已经看到后再取平均。出现查询数量不同的域名，可能仅因这一原因而看起来更强或更弱。本文比较的是各查询之间的出现情况。它不[按天追踪同一个排名](/zh-Hans/articles/%E5%BF%85%E5%BA%94%E5%85%B3%E9%94%AE%E8%AF%8D%E6%8E%92%E5%90%8D%E5%BF%AB%E7%85%A7%E5%AF%B9%E6%AF%94/)。
8. 检查这些缺口。然后选择你要阅读的页面。在此样本中没有出现的域名，以后仍可能出现。它可能在另一条查询中出现。它也可能对另一个人出现。该表不说明某个页面为何出现。它不预测流量或销售额。此必应方法得出的结论不能用于说明 Google 或其他国家的搜索结果。

## 虚构的逐步演算示例

本节中的所有数值都是虚构的。它们不是产品结果。该面板是固定的必应、国家 US、语言 en、仅自然结果，以及前五名上限。公司域名是 A、B 和 C。主机规则只计精确的公司主机。子域只有在同一公司主机上才计数。同名博客不计。此虚构内容中没有主机是 unresolved_identity。

已计划的查询是 Q1、Q2、Q3 和 Q4。Q1、Q2 和 Q3 成功。Q4 在源处失败。以下是页面观察结果。

| 查询 | 域名 | 页面 | 最佳自然排名 | 其他自然排名 | 状态 |
| --- | --- | --- | --- | --- | --- |
| Q1 | A | 1 | 2 | 4 | present |
| Q1 | B | 1 | 1 | 无 | present |
| Q1 | C | 1 | 无 | 无 | not_seen_within_cap |
| Q2 | A | 1 | 无 | 无 | not_seen_within_cap |
| Q2 | B | 1 | 2 | 无 | present |
| Q2 | C | 1 | 3 | 无 | present |
| Q3 | A | 1 | 3 | 无 | present |
| Q3 | B | 1 | 1 | 无 | present |
| Q3 | C | 1 | 无 | 无 | not_seen_within_cap |
| Q4 | A | 无 | 无 | 无 | source_failed |
| Q4 | B | 无 | 无 | 无 | source_failed |
| Q4 | C | 无 | 无 | 无 | source_failed |

A 有两个 Q1 页面，排名分别为 2 和 4。这两个页面仍是一次 Q1 出现。它们不会把 A 从 2/3 改成 3/3。

有三条查询是有用的。已计划的查询有四条。出现表如下。

| 域名 | Q1 | Q2 | Q3 | Q4 | 在有用查询上出现 |
| --- | --- | --- | --- | --- | --- |
| A | present | not_seen_within_cap | present | source_failed | 2/3 |
| B | present | present | present | source_failed | 3/3 |
| C | not_seen_within_cap | present | not_seen_within_cap | source_failed | 1/3 |

最佳自然排名只使用出现的查询。

| 域名 | 最佳排名 | 条件均值 | 平均值中的查询数 |
| --- | --- | --- | --- |
| A | 2 和 3 | 2.5 | 2 |
| B | 1、2 和 1 | 4/3，约 1.33 | 3 |
| C | 3 | 3 | 1 |

A 的条件均值是 (2 + 3) / 2 = 2.5。B 的条件均值是 (1 + 2 + 1) / 3 = 4/3，约 1.33。C 的条件均值是 3 / 1 = 3。这些平均值使用的查询数量不相同。它们不能代替出现表。它们并不表示某个域名在每次搜索中都领先。

每个 not_seen_within_cap 单元格的结论仅限于前 5 个自然结果行。在这部分样本中未出现，并不能证明该域名在整个索引中都不存在。

对 A、B 和 C，Q4 都是 source_failed。该单元格是未知的。它不是已知的未出现。不要说 B 在 4 条查询中的 3 条上出现。不要把 3/3 称为全部四条已计划查询的覆盖。两个计数都要保留：四条已计划，三条有用。此处的面板说法只覆盖这三条成功的查询。如果失败的已计划查询太多，不要给出该比较，或者将其标为部分。

## 下一步

在你所请求的市场中，用一条查询检查一个竞品域名，并记录源链接和一个有范围限定的出现状态。从 [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper) Actor 和已保存的 [Competitor SERP Research](https://apify.com/chronometrica/google-search-scraper/examples/competitor-serp-research) Task 开始。在使用更大的面板之前，把该 Task 改为仅必应、一个真实短语和一个较小的上限。

## 来源和延伸阅读

- [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper)
- [Competitor SERP Research Task](https://apify.com/chronometrica/google-search-scraper/examples/competitor-serp-research)
- [如何检查你是否在某个关键词上有排名](https://www.reddit.com/r/SEO/comments/1d5kve4/how_to_check_if_you_ranked_on_a_keyword/)
- [用于监测特定关键词排名的工具](https://www.reddit.com/r/SEO/comments/1dybuk8/any_tools_to_just_monitor_specific_keyword_ranking/)