example-petstore.com

示例域名 · 并非真实服务 · 浏览器访问显示此页面 · API 请求返回 410 Gone

示例域名 · 并非真实服务

example-petstore.com

example-petstore.com 是 Google 在 Google Analytics、Search Console 和结构化数据相关文档中使用的示例域名,用来代指您自己的网站。此域名上没有商店、API 或搜索功能。如果您的代码或设置中出现此名称,请将其替换为您自己的网域。

曾将密钥、令牌或密码发送到此处?请立即轮换。

指向 example-petstore.com 的代码所发出的请求会到达此服务器,而不是真实服务,其中携带的 API 密钥、访问令牌、密码或会话 Cookie 也会一并送达。请将这些凭据视为已泄露:

  1. 在签发该密钥、令牌或密码的服务中将其撤销。
  2. 签发新的凭据,并将其保存在配置或密钥管理工具中,而不是代码中。
  3. 更正代码中的地址,确保新凭据只发送到真实服务。
  4. 检查该服务的访问日志,查找您无法识别的活动。

在 GitHub、AWS、Google Cloud、Stripe 等平台撤销密钥的位置

此名称的来源

以下每个示例都列出了当初发布的过时代码段,以及应改用的内容。突出显示的部分是您需要替换的内容。完整历史中列有日期和存档来源。

Google Analytics · 2009–2024

使用 Classic Analytics 进行跨网域跟踪

Google 关于使用 Classic Analytics(ga.js)跟踪多个网域的指南中,使用了位于example-petstore.com 的宠物商店、dogs.example-petstore.com 等子网域,以及位于 example-commerce-host.com 的购物车。

过时的示例

_gaq.push(['_setAccount', 'UA-12345-1']);
_gaq.push(['_setDomainName', 'example-petstore.com']);
_gaq.push(['_setAllowLinker', true]);

<a href="http://dogs.example-petstore.com/intro.html"
   onclick="_gaq.push(['_link', 'http://dogs.example-petstore.com/intro.html']); return false;">See my pet store</a>

Classic Analytics 和 Universal Analytics 已不再收集数据。请删除这段代码(包括示例链接),然后安装适用于Google Analytics 4 的 Google 代码。之后即可在管理界面中设置跨网域衡量。

请改用

<!-- Google tag (gtag.js) for Google Analytics 4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>

完整指南:从 Classic Analytics 迁移到 Google Analytics 4

Search Console · 2015–2019

迁移网站

Search Console 关于“地址更改”工具的帮助文档中,以从 http://fish.example-petstore.com 迁移到 http://example.com 或 http://example-petstore.com 为例。该工具只能在您已验证的网域资源之间使用,因此必须将示例地址替换为您自己的地址,包括规范网址、站点地图和 hreflang 中的地址。

完整指南:在 Search Console 中迁移网站

API · 脚本

API 客户端和脚本

发往 api.example-petstore.com/v2/pet 等地址的请求,来自将此域名用作基础网址的代码。这些请求会收到 410 Gone 以及 JSON 格式的说明。此域名与 petstore.swagger.io 上的 Swagger Petstore 示例 API 无关。

请改用:从配置中读取地址

# Python: read the address from configuration, not from the code
import os
BASE_URL = os.environ["API_BASE_URL"]

// JavaScript / Node.js
const baseURL = process.env.API_BASE_URL;

完整指南:配置 API 客户端和 SDK

快速检查清单

  • 在您的代码、模板、主题和代码管理工具中搜索 example-petstore 和 example-commerce-host。
  • 删除 Classic Analytics 和 Universal Analytics 代码;在 Google Analytics 4 中只列出您自己的网域。
  • 在结构化数据中使用您自己的首页和网站名称,并使用 Schema Markup Validator 进行检查。
  • 将 API 客户端和脚本指向真实服务,并轮换所有曾发送到此处的凭据。
  • 当所有内容都指向正确的位置后,您的网站或代码将不会再向此域名发送任何内容。

分步指南

请打开与出现示例域名的平台对应的指南。

Google Analytics 4:跨网域衡量
  1. 在 Google Analytics 中,打开 Admin,然后转到 Data streams。选择您的网站数据流。
  2. 打开 Configure tag settings › Configure your domains。删除 example-petstore.com 和 example-commerce-host.com,然后添加您实际拥有或使用的网域,例如您的商店和结账服务提供商。
  3. 返回 Configure tag settings,打开 List unwanted referrals,添加不应开始新会话的引荐来源,例如您的支付服务提供商。最多可添加 50 个。
  4. 保存。更改将应用于使用此数据流的所有网页上的 Google 代码。

更喜欢用代码而不是管理界面?

// Only if you configure cross-domain measurement in code instead of in the admin
gtag('set', 'linker', {
  'domains': ['www.example.com', 'checkout.example.net']
});

检查: 点击从您的一个网域指向另一个网域的链接。目标网页的地址中应包含 _gl=。在 Admin › DebugView 中(开启 Tag Assistant 或调试模式),该访问应作为同一个会话继续。

文档: Set up cross-domain measurement · 阅读完整指南

Google Tag Manager
  1. 在 Tag Manager 中,打开 Google tags,选择您的 Google 代码,然后选择 Show all。
  2. 在 Configure your domains 下,只保留您自己的网域。对于应忽略的引荐来源,请使用 List unwanted referrals。
  3. 在 Tags 和 Variables 中搜索 example-petstore、example-commerce-host、_gaq 和 pageTracker。删除包含 Classic 或 Universal Analytics 代码的旧自定义 HTML 代码。
  4. 使用 Preview 进行测试,然后点击 Submit 发布新的容器版本。

检查: 在 Preview 中,Google 代码在每个网页上都会触发,且没有任何代码引用示例域名。您的网域之间的链接带有 _gl=。

文档: Google tag settings in Tag Manager · 阅读完整指南

旧版 Classic 或 Universal Analytics 代码
  1. 在您的模板中搜索 _gaq、pageTracker、ga.js、analytics.js、ga('create' 和 urchin。
  2. 删除整个代码块,包括带有 _link 或 _linkByPost 的 onclick 和 onsubmit 处理程序。将“See my pet store”或“Continue Shopping”等示例链接指向您自己的网页,或将其删除。
  3. 安装适用于 Google Analytics 4 的 Google 代码(见下方代码段),或通过 Google Tag Manager 添加。
<!-- Google tag (gtag.js) for Google Analytics 4 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>

检查: 查看网页源代码:其中不再包含 ga.js、analytics.js 或示例域名。在 Google Analytics 4 中,Reports › Realtime 会显示您自己的访问。

文档: Universal Analytics has been replaced · 阅读完整指南

WordPress 和 SEO 插件
  1. Yoast SEO、Rank Math 和 All in One SEO 根据您自己的地址生成网站架构,不会使用示例域名。如仍需删除搜索操作:Yoast add_filter( 'disable_wpseo_json_ld_search', '__return_true' );,Rank Math rank_math/json_ld/disable_search,All in One SEO 在 Search Appearance › Advanced 中关闭 Enable Sitelinks Search Box。
  2. SEOPress 已在 8.1 版(2024年9月)中移除搜索框标记。请更新该插件。
  3. 示例域名通常来自手动粘贴的代码块:请检查主题的 header.php、“自定义 head 代码”或“header 脚本”字段,以及向网页 head 中插入代码的插件。
  4. 将该代码块替换为正确的 WebSite 标记(见下方代码段);如果您的 SEO 插件已输出该标记,则直接删除。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Your site name",
  "url": "https://www.example.com/"
}
</script>

检查: 查看首页源代码:只有一个 WebSite 代码块,其中包含您自己的名称和地址。请使用 Schema Markup Validator 进行检查。

文档: Yoast: SearchAction · 阅读完整指南

手动添加的结构化数据
  1. 找到包含 example-petstore.com 的 <script type="application/ld+json"> 代码块(或微数据)。
  2. 将 url 替换为您自己的首页,并将 name 设为您的网站名称。potentialAction / SearchAction 部分可以删除:Google 已不再显示站点链接搜索框。
  3. 只在首页保留 WebSite 代码块。
  4. 在 Search Console 中,对您的首页使用 URL Inspection › Request indexing。
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "WebSite",
  "name": "Your site name",
  "url": "https://www.example.com/"
}
</script>

检查: Schema Markup Validator 显示一个 WebSite 项,其中包含您自己的 name 和 url。富媒体搜索结果测试不涵盖网站名称。

文档: Site names in Google Search · 阅读完整指南

Search Console:迁移网站
  1. 在同一个 Search Console 账号中,将旧网域和新网域都验证为 Domain properties(网域资源)。
  2. 使用 301 重定向将每个旧地址重定向到对应的新地址,并将重定向保留至少 180 天。
  3. 在旧资源中,打开 Settings › Change of address,然后选择新资源。
  4. 检查新网站上的规范网址、站点地图和 hreflang 中是否有示例地址,然后重新提交站点地图。

检查: 在 Search Console 中,地址更改请求显示为正在进行中,新资源开始获得展示次数。

文档: Change of Address tool · 阅读完整指南

API 客户端、SDK 和脚本
  1. 找到设置该地址的位置:代码中的基础网址或主机、配置文件、环境变量、Postman 环境或 SDK 构造函数。
  2. 将地址移至配置中(见下方代码段),并将其指向真实服务。
  3. 撤销所有曾发送到此域名的密钥、令牌或密码,并在创建它们的服务中重新签发。
  4. 添加一项检查:当配置的地址包含 example- 时即报错,以免再次发生。
# Python: read the address from configuration, not from the code
import os
BASE_URL = os.environ["API_BASE_URL"]

// JavaScript / Node.js
const baseURL = process.env.API_BASE_URL;

检查: 请求到达真实服务并成功完成。您的代码不再向此处发送任何内容:此域名会以 410 Gone 响应此类请求。

文档: OWASP Secrets Management · 阅读完整指南

概览:各平台的修复方法

位置您看到的内容处理方法
Classic Analytics(ga.js)或 Universal Analytics(analytics.js)_setDomainName、_setAllowLinker、_link、_linkByPost 或 ga('linker:autoLink', …) 中包含这些名称之一删除整段旧代码(包括 onclick/onsubmit 处理程序和示例链接),然后安装适用于 Google Analytics 4 的 Google 代码。Universal Analytics 已于 2023年7月1日停止处理数据。 Universal Analytics has been replaced
Google Analytics 4网域列表中出现这些名称,或报告中出现自我引荐Admin › Data streams › 您的网站数据流 › Configure tag settings › Configure your domains:只保留您自己的网域。将多余的引荐来源添加到 List unwanted referrals 下。 Set up cross-domain measurement
代码中的 Google 代码(gtag.js)gtag('set', 'linker', {'domains': ['example-petstore.com']}) 或硬编码的 cookie_domain在 linker.domains 中填写您自己的网域;省略 cookie_domain,或将其设为 'auto'。 Measure activity across multiple domains
Google Tag ManagerGoogle 代码中的网域列表,或旧的自定义 HTML 代码Google tags › 您的代码 › Show all › Configure your domains / List unwanted referrals;在自定义 HTML 代码和变量中搜索旧代码段;使用 Preview 进行测试。 Google tag settings in Tag Manager
您自行添加的结构化数据(JSON-LD、微数据)"url": "https://www.example-petstore.com/",或指向 query. 或 host.example-petstore.com 的 target将您自己的首页用作 url,将您自己的网站名称用作 name。SearchAction 可以删除。请使用 Schema Markup Validator 进行检查(富媒体搜索结果测试不涵盖网站名称)。 Site names in Google Search
Yoast SEO网站架构中的搜索操作Yoast 使用您自己的网站地址。如需删除:add_filter( 'disable_wpseo_json_ld_search', '__return_true' ); Yoast: SearchAction
Rank Math网站架构中的搜索操作Rank Math 使用您自己的网站地址。如需删除,请使用过滤器 rank_math/json_ld/disable_search。 Rank Math: sitelinks search box schema
All in One SEO网站架构中的搜索操作Search Appearance › Advanced › 关闭“Enable Sitelinks Search Box”。 AIOSEO: sitelinks search box
SEOPress—搜索框标记已在 8.1 版(2024年9月)中移除;请更新该插件。 SEOPress changelog
Search Console网站迁移、规范网址、站点地图或 hreflang 中使用了示例地址“地址更改”工具只能在您拥有的网域资源之间使用,且 301 重定向须保留至少 180 天。请更正您自己网站上的规范网址、站点地图和 hreflang,然后重新提交站点地图。 Change of Address tool
API 客户端、SDK 和脚本基础网址或主机使用了这些名称之一,通常还带有 Authorization 标头将基础网址移至配置(环境变量或配置文件)中,并将其指向真实服务。撤销所有曾发送到此处的密钥。 OWASP Secrets Management

在您自己的代码中查找

在您的项目(包括模板和主题文件)中搜索这两个名称:

grep -rniE "example-(petstore|commerce-host)\.com" .

另请检查代码中看不到的地方:首页渲染后的 HTML(查看源代码并搜索)、Google Tag Manager 容器中的自定义 HTML 代码和变量、CMS 或主题中的“自定义 head 代码”字段,以及分析和 SEO 插件的设置。

常见问题解答

example-petstore.com 是什么?

一个示例域名。Google 在 Google Analytics、Search Console 和结构化数据相关文档中用它代指您自己的网站,各类教程又从中照搬了它。此域名上没有商店、API 或搜索功能。

example-petstore.com 是真实的宠物商店吗?

不是。这里不出售任何商品,也没有产品、账号或订单。此域名上的每个地址都显示本页面。

为什么我的网站或代码发出的请求会到达 example-petstore.com?

示例中的某个地址被复制后一直没有替换:可能是旧跟踪代码段中的链接、结构化数据、Search Console 设置,或 API 客户端的基础网址。请将其替换为您自己的网域或真实服务的地址。

我曾将 API 密钥、令牌或密码发送到 example-petstore.com,该怎么办?

请将其视为已泄露。在签发它的服务中将其撤销,签发新的凭据并将其保存在代码之外,更正地址,然后检查该服务的访问日志。只有签发密钥的服务才能撤销它。

query.example-petstore.com 有什么作用?

在 Google 2014–2015 年的站点链接搜索框示例中,它是虚构的宠物商店搜索结果页地址。Google 可以在网站的搜索结果下方显示一个搜索框;搜索字词会替换 {search_term_string},然后将搜索者引导至该地址。这个地址从未真实存在过,而 Google 已于 2024年11月停止显示该搜索框。

example-petstore.com 最早是什么时候开始使用的?

2009年3月。当时 Google 重新整理了 Classic Analytics 文档,关于跟踪多个网域的指南首次引入了这家宠物商店及其购物车。该指南的更早版本并未使用它。

为什么我在 Google Analytics 中看到重复用户或自我引荐?

跨网域衡量中列出的网域有误,或者根本没有设置。在 Google Analytics 4 中,请在 Configure your domains 下列出您自己的网域,并将多余的引荐来源添加到 List unwanted referrals 下。

在 _setDomainName 中应该使用前导点、"none" 还是 "auto"?

都不需要。_setDomainName 属于 Classic Analytics(ga.js),而后者已不再收集数据。请删除旧代码并改用 Google Analytics 4,它会自动设置 Cookie 网域。

这与 Swagger Petstore 有关吗?

无关。Swagger Petstore 是位于 petstore.swagger.io 的 OpenAPI 示例 API。example-petstore.com 则来自 Google 的分析和 SEO 文档。

example-commerce-host.com 是什么?

姊妹示例域名:在同一组跨网域示例中代表第三方购物车,例如 example-commerce-host.com/example-petstore。请参阅 example-commerce-host.com。

来源