如何让 Shoply AI 的爬虫通过你的防火墙

A brick firewall opens one gate so Shoply's crawler can carry website pages to the chat assistant

Shoply AI 会定期读取你的网站,以保持其回答的准确性。如果你的网站使用了 Cloudflare 或其他防火墙或机器人防护服务,这些服务可能会阻止 Shoply 的爬虫。一旦发生这种情况,聊天机器人就会继续根据你网站的旧副本进行回答。

解决方法通常只需要一条规则:允许 User-Agent 包含 ShoplyAIBot 的请求。 本指南将说明为什么需要这个爬虫、如何识别它,以及如何在 Cloudflare 和其他防火墙中放行它。

谁需要进行这项设置?

  • SiteChat 网站所有者。 SiteChat 是 Shoply 为任何非 Shopify 商店网站提供的聊天和搜索功能,包括 Magento 商店。
  • 代理商和开发人员,他们负责这些网站的主机、CDN(内容分发网络)或安全设置。

Shopify 应用商家通常不需要更改任何设置。 Shoply 通过 Shopify 的 API 获取 Shopify 产品数据,而不是通过爬取你的店面。不过,如果你添加了来自非 Shopify 网站的页面作为知识源,例如托管在其他地方的帮助中心或博客,该网站的防火墙仍然可能拦截 Shoply。有关这些页面列在何处,请参阅如何教会 Shoply 了解你的商店。

为什么 Shoply 需要读取我的网站?

Shoply 会读取你在爬取设置中列出的页面,以便聊天机器人的回答、价格和链接与你的实时网站保持一致。

对于 Magento 商店,Shoply 还会通过你商店的 GraphQL 端点(/graphql)读取公开的产品目录。它会发送只读的产品查询,以获取名称、SKU、价格、变体和产品 URL 等详细信息。

爬虫绝不会登录、绝不会下单,也绝不会提交表单。想了解 Shoply 如何使用这些内容,请阅读Shoply 使用哪些信息来回答客户问题。

如果爬虫被拦截,会发生什么?

  • 爬取失败。 Shoply 无法获取你的页面或产品数据。
  • AI 会继续根据上一次成功爬取的数据进行回答。 顾客可能会看到旧价格、你已经删除的产品,以及过时或错误的链接。一个真实案例是:某商店从开发站点迁移到了正式域名,但其防火墙拦截了爬虫,因此聊天机器人仍然持续把顾客链接到旧的开发站点。
  • 你的 Shoply 管理后台中的“Last updated … ago”停止更新。

爬虫被拦截的常见迹象

在 Shoply 管理后台中,爬取时间越来越滞后。 在控制面板上,Content crawled by Shoply AI 下方的 “Last updated at: … ago” 时间会持续增长,而不是每隔几小时重置一次,例如显示为“770 hours ago”(大约一个月)。即使你点击 Recrawl Now,它仍然不会恢复,因为被拦截的爬取永远无法完成。

如果你检查防火墙日志,通常会看到 Cloudflare 对 Shoply 的请求返回 HTTP 403,通常表现为以下形式之一:

  • Error 1010,表示网站所有者根据浏览器签名禁止了该请求。Cloudflare 对此错误给出的官方修复建议指向 Browser Integrity Check。
  • 一个 “Just a moment…” 质询页面,而爬虫无法完成这种质询。

我如何识别 Shoply 的爬虫?

Shoply 爬虫发出的每个请求都使用以下 User-Agent:

text
ShoplyAIBot/1.0 (https://shoplyai.ai; support@shoplyai.ai; For sites installed Shoply AI Search & Chatbot)

编写规则时,请匹配较短的文本 ShoplyAIBot(例如,“User-Agent contains ShoplyAIBot”)。这样即使版本号发生变化,你的规则仍然有效。

请按 user agent 放行,而不是按 IP 地址。 Shoply 的爬虫不使用固定 IP 地址,因此 IP 允许列表并不可靠。

爬虫的行为方式

  • 它只会爬取你在 Shoply 中配置的网站。
  • 它遵守 robots.txt 来读取页面。如果你的 robots.txt 屏蔽了某个页面,Shoply 会跳过它,因此请检查不要屏蔽你希望 AI 学习的页面。
  • 它对你的服务器负载很轻: 同时最多 2 个请求,请求之间有 2 秒延迟。
  • 页面数量有上限,由你的 Shoply 套餐决定。

爬虫何时运行

  • 按计划自动运行。 频率取决于你的套餐。
  • 当你在 Shoply 管理后台点击 “Recrawl Now” 时。
  • 当爬取持续失败时,每 2 天运行一次。 Shoply 会自动重试,因此一旦你添加了放行规则,下一次自动重试或手动重新爬取就会重新抓取你的网站。

如何在 Cloudflare 中放行 Shoply?

在 Cloudflare 中,创建一个使用 Skip 操作的 custom rule。跳过规则会让匹配的请求绕过原本会阻止或质询它们的安全检查。

第 1 步:创建跳过规则

  1. 在 Cloudflare 控制台中,打开你的网站(zone),然后进入 Security rules。

  2. 选择 Create rule > Custom rules。

  3. 在 Rule name 中,输入一个清晰的名称,例如 Allow Shoply AI crawler。

  4. 在 When incoming requests match 下,设置:

    • Field: User Agent
    • Operator: contains
    • Value: ShoplyAIBot

    如果你更喜欢使用表达式编辑器,请使用:

    text
    (http.user_agent contains "ShoplyAIBot")
  5. 在 Then take action > Choose action 下,选择 Skip。

  6. 选择要跳过的内容(见下表)。

  7. 保持 Log matching requests 为开启状态。这样 Shoply 的请求就会显示在 Cloudflare 的 Security Events 中,这有助于排查问题。

  8. 选择 Deploy。

第 2 步:选择要跳过的内容

Cloudflare 中的跳过选项要跳过吗?原因
Browser Integrity Check是会导致爬虫出现 error 1010
Security Level是防止 Security Level 检查向爬虫发起质询
All Super Bot Fight Mode rules是,适用于 Pro 及以上套餐Super Bot Fight Mode 可能会质询或拦截爬虫
User Agent Blocking如果你启用了它仅当你创建了 user-agent 拦截规则时才相关
All rate limiting rules仅当 Security Events 显示某个 rate limiting 规则拦截了 Shoply 时Shoply 的请求频率很低,但严格的限制仍可能误拦截
All managed rules仅当 Security Events 显示某个 managed rule 拦截了 Shoply 时让 Cloudflare 的攻击模式规则继续对其他访问者生效
All remaining custom rules如果你有其他会拦截机器人的自定义规则防止你后面的自定义规则拦截 Shoply

先从标为“是”的行开始。如果 Cloudflare 的 Security Events 仍然显示 Shoply 的请求被拦截或被质询,事件会告诉你是哪个功能生效了。然后把该功能添加到跳过规则中。

第 3 步:把规则放到最前面

Cloudflare 会按顺序评估自定义规则,从上到下依次执行。如果在你的规则之上的某条规则先拦截或质询了请求,那么你的跳过规则就永远不会运行。请将 Shoply 规则移动到自定义规则列表的顶部。

如果你使用 Bot Fight Mode(Cloudflare 免费套餐)

Bot Fight Mode 不能通过跳过规则绕过。 Cloudflare 会将其与自定义规则分开运行,因此 skip 和 allow 规则对它都无效。你有两个选择:

  • 关闭 Bot Fight Mode: 前往 Security > Settings,按 Bot traffic 过滤,然后关闭 Bot fight mode。
  • 升级到 Pro 或更高套餐,并使用 Super Bot Fight Mode,它支持跳过规则。

如果开启了 Under Attack mode

Under Attack mode 会向每位访客显示质询页面,而爬虫无法通过它。Cloudflare 建议仅在遭受主动攻击期间启用它。在关闭之前,Shoply 将无法读取你的网站。

放行一个 user agent 安全吗?

任何客户端都可以声称自己是 ShoplyAIBot,因此这个规则会为任何发送该 User-Agent 的访问跳过部分机器人检查。为了尽量降低风险,只跳过那些确实会拦截爬虫的功能,并继续保留你的登录、结账和管理后台保护措施。Shoply 永远不需要访问这些区域。

如何在其他防火墙中放行 Shoply?

原理在任何地方都一样:允许 User-Agent 包含 ShoplyAIBot 的请求。 具体菜单会因产品而异,因此请参考你的厂商文档来创建 allow 或 exception 规则。常见需要检查的地方包括:

  • 云 Web 应用防火墙(WAF),例如 Sucuri、AWS WAF 和 Akamai:添加匹配 User-Agent 标头的 allow 或 exception 规则。
  • WordPress 安全插件,例如 Wordfence:查找机器人拦截、速率限制或 user-agent 拦截设置。
  • 服务器级过滤器,例如 ModSecurity 规则,以及主机服务商提供的机器人拦截器:将该 user agent 加入白名单,或请你的主机服务商代为操作。

Magento 商店: 请确保规则同样适用于对 /graphql 的 POST 请求。有些防火墙会将 API 请求与页面访问分开处理。如果页面已放行,但 /graphql 被拦截,你的产品目录仍然不会更新。

不要依赖 IP 允许列表。Shoply 的爬虫不使用固定 IP 地址。

我如何检查它是否生效?

  1. 在 Shoply 管理后台中,点击 Recrawl Now。
  2. 等待爬取完成,然后检查控制面板上的 “Last updated” 是否已重置为最近时间。
  3. 就你最近更改过的某个产品或页面向聊天机器人提问,并确认回答和链接与你的实时网站一致。

你也可以在自己的电脑上快速检查。将 https://your-site.com/ 替换为你的网站地址:

bash
curl -I -A "ShoplyAIBot/1.0 (https://shoplyai.ai; support@shoplyai.ai; For sites installed Shoply AI Search & Chatbot)" https://your-site.com/

返回 HTTP/2 200(或 HTTP/1.1 200 OK)表示你的规则允许该 user agent 通过。返回 403 则表示仍有某些东西在拦截它。

这个测试是从你电脑的 IP 地址发出的,而不是从 Shoply 的服务器发出的。某些防火墙会根据流量来源位置区别对待,因此在 Shoply 管理后台中执行重新爬取才是最终检查。

需要帮助?

请发送电子邮件到 support@shoplyai.ai,并附上你的网站地址、你使用的防火墙或主机服务商,以及防火墙日志中任何被拦截请求的截图。请不要发送密码或 API 密钥。