Skip to content
Oday Bakkour
Back to Knowledge Hub

Daily SEO Note — November 5, 2026: Cloudflare Splits Personal Agents From AI Crawlers

Part of Daily SEO Notes, a daily series.

Oday Bakkour profile photo
Oday Bakkour
12 min read
Share
Daily SEO Note — November 5, 2026: Cloudflare Splits Personal Agents From AI Crawlers

Window for this edition: the 24 hours to 06:00 UTC on November 5, 2026. Today is a Thursday, so the weekend extension does not apply. Every timestamp below is UTC unless a source states otherwise.

Start with what did not move. Google's Search Status Dashboard shows no incidents across Crawling, Indexing, Ranking and Serving, last updated 22:03 PST on November 4, 2026, so there is still no ranking update in flight. The Search Central documentation changelog has published nothing since October 26, 2026, and the Search Central blog and Bing Webmaster blog were both silent in the window. Everything below arrived from somewhere other than Google's own announcement channels.

1. SEO for Content Writers

The most consequential editorial change today is not from a search engine at all. Cloudflare has made the AI assistants your readers use into a per-assistant setting on your own CDN, which means the question "can ChatGPT read this article when a reader asks it to" now has an answer that lives in your infrastructure settings rather than in your content. If you publish with ads on the page, the default answer may already be no.

Your CDN now answers, per assistant, whether a reader's agent may read your article

Cloudflare's AI Crawler and Agent access policies changed on November 4, 2026 so that the broad Agents policy can now be overridden for individual Personal Agents — the assistants that fetch a page in real time because a person asked them something, as distinct from crawlers that index or train. Each one can be set to Allow, Block, or Block on pages with ads. Rollout status: live in the dashboard now, under Security then Settings. Cloudflare's accompanying post is dated the same day.

This affects all content, but it lands hardest on ad-supported editorial. Read the Block on pages with ads option from the reader's side: a person asks an assistant to summarise or compare something, the assistant tries to fetch your article, and the fetch is refused because the page carries advertising. The reader does not see a block. They see an answer assembled from whoever did let the agent in. For a comparison piece, a review, or a buying guide — the formats people most often delegate to an assistant — that is the whole visibility question, decided by a setting no editor was consulted on.

What to do differently: before you commission another round of comparison tables and "best X for Y" articles aimed at assistant visibility, ask whoever owns the CDN what the Agents policy is set to and whether any Personal Agent is overridden. Cloudflare's own documentation recommends Allow for Personal Agents, which tells you the ad-supported preset is a deliberate trade rather than a safe default. Get the answer in writing and attach it to the brief, because the editorial strategy and the infrastructure setting have to agree or the work is wasted.

What to stop doing: stop treating robots.txt as the file that governs assistant access. Both OpenAI and Perplexity state plainly that their user-triggered fetchers — ChatGPT-User and Perplexity-User — do not follow general crawl rules the way their indexing bots do. Edge enforcement is where that decision is actually made now, in both directions.

Google emailed EEA site owners that their reputation manual actions no longer bite

On November 4, 2026, Google began sending a notice titled "New Site Reputation Policy Change" to site owners, with a matching message in the Search Console manual actions viewer. The email states that for pages previously subject to a manual action under the site reputation policy, that action will no longer impact search results shown to users within the EEA. The wave was surfaced on November 4; the policy behind it is Google's Update to the Site Reputation Policy of August 28, 2026, effective August 30. Rollout status: the policy has been live since August; what is new today is the notification reaching affected owners.

So this is not a new rule, and that is the point worth holding onto. The spam policies documentation still describes the same split: outside the EEA a manual action directly affects the relevant portion of the site, and inside the EEA the affected section "may be separated in our systems so that, over time, it ranks independently." Separation is not amnesty. A third-party section that no longer borrows the host domain's signals has to earn its rankings on its own, which for most hosted-content deals is a worse outcome than a demotion they were already pricing in.

Who it affects: EEA publishers running third-party or hosted-content sections, and anyone whose placements live on those sections. The editorial instruction is to audit what you have on other people's domains. If a placement was justified by the host's authority, that justification may be gone for EEA queries whether or not the manual action notice arrived. Rewrite those pages to stand up as independent content, with real authorship and something a reader cannot get from the host's own coverage, or stop paying for the placement.

What to stop doing: stop reading the email as a clean bill of health. It says the manual action's impact is lifted for EEA users. It does not say the section is back to inheriting the domain's reputation, and it does not change anything for searchers outside the EEA.

Search Console will combine several devices into one filtered view

Google's Performance report advanced filtering documentation now states that you can "Select multiple devices or countries to see their combined data," alongside the comparison mode that evaluates two devices side by side. The device half of this was observed arriving in the interface on November 4, 2026, completing the filter work Google announced for countries and devices in early October. Rollout status: live in the documentation and reported in the interface; Google has published no changelog entry for it.

This affects anyone who reports organic performance, and it is small but genuinely useful. Until now, a mobile-plus-tablet view meant two queries and arithmetic, which is exactly the kind of friction that stops people from segmenting at all. Combining them in one filtered view makes "how does this cluster perform for people not on a desktop" a question you can answer in the interface while you are deciding what to rewrite.

The editorial use is narrower than the reporting use. Pull your top twenty article URLs, filter to mobile and tablet combined, and compare the query mix against desktop for the same pages. Where the non-desktop query set skews shorter and more question-shaped, the article's opening needs to answer the question in its first paragraph rather than building toward it. That is a concrete rewrite instruction you can act on today, and it does not require a single change to anything in a repository.

Nothing verified on the AI answer surfaces or the ranking systems today

No primary-source change appeared to AI Overviews, AI Mode, ChatGPT Search, Perplexity or Claude citation behaviour in this window. Google's AI features documentation is unchanged, still requiring only that a page be "indexed and eligible to be shown in Google Search with a snippet" with "no additional technical requirements." Google's data anomalies page carries nothing for October or November 2026, so yesterday's unconfirmed click spike remains unacknowledged — keep the footnote on any early-November figure.

Apply to your next brief

  • Before commissioning assistant-facing formats — comparisons, buying guides, definitions — get your CDN's Agents policy in writing and attach it to the brief.
  • Flag any brief whose visibility case depends on AI assistants if the site is ad-supported and the Block on pages with ads option is in force.
  • Drop robots.txt from the list of things you cite as controlling assistant access. Name the edge policy instead.
  • Audit third-party and hosted-content placements on EEA domains, and rewrite them to survive without the host domain's authority.
  • Read the site reputation email as a change in impact, not a clearance, and leave non-EEA strategy untouched.
  • Use the combined mobile-plus-tablet device filter on your top twenty URLs, and front-load answers where the non-desktop query mix is more question-shaped.
  • Keep yesterday's unconfirmed Search Console click spike footnoted and off summary slides.

2. SEO for Developers

The engineering change that matters today is a dashboard setting, not a release: Cloudflare's agent policy is now per-agent, and the category it governs does not respect robots.txt. Behind it, a CMS advisory that was fixed six weeks ago has only just reached the GitHub Advisory Database, which is a reminder that your scanner's silence in September was not evidence of anything.

Cloudflare's agent policy goes per-agent, and robots.txt is not the control surface

Identifier and date: Cloudflare changelog, granular access controls for the top Personal Agents, November 4, 2026. Non-breaking and additive, but it renames a setting you may have documented: "Configure AI bot policies" is now "AI Crawler and Agent access policies," found under Security then Settings, filtered by Bot traffic.

The structure is worth getting exactly right, because the three categories are separate decisions with different enforcement. Per the documentation: Search covers crawlers that collect or index content to answer later questions; Training covers crawlers collecting content to train or fine-tune models, including mixed-purpose crawlers; Agent covers real-time automated activity on a person's behalf, and Personal Agents sit inside it. Every category takes Allow, Block, or Block on pages with ads. Only Training additionally takes Disallow, which works through robots.txt — and the documentation is explicit that "robots.txt directives are voluntary." For new domains all three default to Allow. Personal Agents inherit the Agents policy until you override one, and changing the parent policy rewrites every child.

The symptom if you ignore this: your AI access policy is half-written. A robots.txt that disallows GPTBot says nothing about ChatGPT-User, because user-triggered fetchers do not treat it as binding — OpenAI's bot documentation says so for ChatGPT-User, and Perplexity's says the same for Perplexity-User. Training intent belongs in robots.txt; agent access belongs at the edge. Write both, keep them consistent, and verify from outside.

public/robots.txt
# Training intent. Advisory only - this is a request, not enforcement.
User-agent: GPTBot
Disallow: /

User-agent: ClaudeBot
Disallow: /

User-agent: CCBot
Disallow: /

# Search and retrieval. Keep these open if you want to be cited.
User-agent: OAI-SearchBot
Allow: /

User-agent: Claude-SearchBot
Allow: /

User-agent: PerplexityBot
Allow: /

# Note: ChatGPT-User and Perplexity-User are user-triggered fetchers.
# Their vendors state these do not follow general crawl rules.
# Decide those at the edge, under Cloudflare's Agents policy.
Sitemap: https://example.com/sitemap.xml
scripts/verify-agent-access.sh
#!/usr/bin/env bash
set -euo pipefail
# Confirm the edge policy matches intent. Run against production.
# An ad-supported page blocked for user-triggered agents is a deliberate
# choice - make sure it is the one you made.
BASE="${1:?usage: verify-agent-access.sh https://example.com}"
PATHS=("/" "/blog/some-article-with-ads")

AGENTS=(
  "Mozilla/5.0 (compatible; ChatGPT-User/1.0; +https://openai.com/bot)"
  "Mozilla/5.0 (compatible; Perplexity-User/1.0; +https://perplexity.ai/perplexity-user)"
  "Mozilla/5.0 (compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot)"
  "Mozilla/5.0 (compatible; PerplexityBot/1.0; +https://perplexity.ai/perplexitybot)"
)

for p in "${PATHS[@]}"; do
  for ua in "${AGENTS[@]}"; do
    code=$(curl -s -o /dev/null -w '%{http_code}' -A "$ua" "${BASE}${p}")
    printf '%s  %-56s  %s\n' "$code" "${ua:24:30}" "$p"
  done
done
# Unverified traffic can be classified by behaviour, so a 403 here is a
# signal about policy, not proof of how a verified agent is treated.

A Payload CMS upload advisory reaches the GitHub database six weeks after the fix

Identifier and date: GHSA-mc8m-rr6c-r5qr / CVE-2026-93363, published to the GitHub Advisory Database on November 4, 2026. The fix is older: Payload v3.90.0, released September 18, 2026 and described in its own notes as "a set of critical security fixes." Rollout status: patched since September, newly visible to tooling as of yesterday.

Non-breaking to fix, and narrow in scope. The flaw is missing authorization (CWE-862) in @payloadcms/storage-vercel-blob, rated Moderate at CVSS v4.0 5.3 with low integrity impact and no confidentiality or availability impact. Affected ranges are 3.25.0 up to 3.90.0, and 4.0.0-canary.0 up to 4.0.0-canary.34. The advisory states that "client upload access does not consistently align with the associated collection's access configuration," so an authenticated user who can reach the client-upload route may be able to upload outside the permissions their collection grants. You are only exposed if you use client uploads with this adapter. The fix makes client uploads require authentication and the matching collection-level access.

Why it is on this beat rather than just a security one: the media library of a content CMS is the origin of the images Google indexes and of whatever your LCP element points at. An upload path that does not enforce collection permissions is a content-integrity problem on your crawlable surface, and the integrity-only CVSS profile says exactly that. The setting to change is the adapter version; the workaround, if you cannot ship the bump, is to disable clientUploads or put explicit access control on the upload route.

src/payload.config.ts
import { vercelBlobStorage } from '@payloadcms/storage-vercel-blob'

export default buildConfig({
  plugins: [
    vercelBlobStorage({
      collections: { media: true },
      token: process.env.BLOB_READ_WRITE_TOKEN,

      // Workaround for CVE-2026-93363 if you cannot upgrade today.
      // On >= 3.90.0 client uploads enforce collection access themselves.
      clientUploads: false,
    }),
  ],
})
scripts/check-payload-blob.sh
#!/usr/bin/env bash
set -euo pipefail
# Resolve what is installed, not what package.json asks for.
npm ls @payloadcms/storage-vercel-blob --all --depth=3 2>/dev/null \
  | grep -E 'storage-vercel-blob@' || echo "adapter not installed"

# Patched: 3.90.0 (3.x) / 4.0.0-canary.34 (4.x canary line).
npm install @payloadcms/storage-vercel-blob@^3.90.0
npm audit --omit=dev

Unconfirmed: server-side GTM said to move IP redaction from container to tag

Flagged as unconfirmed and kept out of the Ship today list. Reports circulating on November 3 and 4, 2026 describe a change to server-side Google Tag Manager in which IP redaction moves from the container level to individual tags, with Google's advertising tags receiving full addresses by default from January 2027. There is no primary source: the Tag Manager documentation carries no such notice, and no Google changelog entry covers it. Rollout status: unverified, nothing to ship.

The reason to log it anyway is that container-level IP redaction is a configuration many teams set once, years ago, and have not revisited. If the redaction boundary genuinely moves from the container to the tag, a setting that currently covers everything would stop covering anything by default. Put a reminder on it for when a primary source appears, and resist reconfiguring anything on the strength of secondary reporting.

Framework, performance and structured data surfaces were quiet

Nothing shipped in the window on the surfaces this section usually tracks. The newest Next.js stable releases remain 16.4.5 and 15.5.29 from November 3, with only canaries since. Nuxt's latest is 4.6.4 from November 2, SvelteKit's is 3.1.1 from October 29, and Astro's is 7.4.5 from November 2. Lighthouse is unchanged at v13.6.0 from October 27, and Schema.org is unchanged at version 30.1 from September 16, 2026. Google's common crawlers documentation is also unchanged, still stating that support for the AIPREF __usage_ai-training token is intended for early 2027.

Ship today

  1. Open Security then Settings in Cloudflare and read the AI Crawler and Agent access policies screen as three separate decisions. Record what Search, Training and Agent are set to, and whether any Personal Agent is overridden.
  2. If your pages carry ads, confirm whether Block on pages with ads is active for Agents, and confirm with whoever owns editorial strategy that this is intended. Cloudflare's own recommendation for Personal Agents is Allow.
  3. Reconcile robots.txt with the edge policy so training intent and agent access do not contradict each other, and remember that only the Training category has a robots.txt-backed action.
  4. Run an external check with user-triggered agent user agents against both an ad-bearing URL and a clean one, so the policy is verified from outside rather than assumed from the dashboard.
  5. Resolve the installed version of @payloadcms/storage-vercel-blob per workspace and upgrade to 3.90.0 or later. If you cannot, set clientUploads: false as a temporary measure.
  6. Update any internal runbook that still says "Configure AI bot policies." The setting is now "AI Crawler and Agent access policies," and a stale runbook sends people looking for a screen that no longer has that name.

Comments

Share your thoughts and join the conversation

Leave a Comment

Loading comments...
RELATED