{"id":537077,"date":"2026-04-18T03:10:10","date_gmt":"2026-04-18T03:10:10","guid":{"rendered":"https:\/\/www.newsbeep.com\/uk\/537077\/"},"modified":"2026-04-18T03:10:10","modified_gmt":"2026-04-18T03:10:10","slug":"redirects-for-ai-training-enforces-canonical-content","status":"publish","type":"post","link":"https:\/\/www.newsbeep.com\/uk\/537077\/","title":{"rendered":"Redirects for AI Training enforces canonical content"},"content":{"rendered":"<p>Cloudflare&#8217;s Wrangler CLI has published several major versions over the past six years, each containing at least some critical changes to commands, configuration, or how developers interact with the platform. Like any actively maintained open-source project, we keep documentation for older versions available. The <a href=\"https:\/\/developers.cloudflare.com\/workers\/wrangler\/migration\/v1-to-v2\/wrangler-legacy\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">v1 documentation<\/a> carries a deprecation banner, a <a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/block-indexing\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">noindex meta tag<\/a>, and canonical tags pointing to current docs. Every advisory signal says the same thing: this content is outdated, look elsewhere. AI training crawlers don\u2019t reliably honor those signals.\u00a0<\/p>\n<p>We use <a href=\"https:\/\/developers.cloudflare.com\/ai-crawl-control\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Crawl Control<\/a> on <a href=\"https:\/\/developers.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">developers.cloudflare.com<\/a>, so we know that bots in the <a href=\"https:\/\/radar.cloudflare.com\/bots\/directory?category=AI_CRAWLER\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Crawler Category<\/a> visited 4.8 million times over the last 30 days, and they consumed deprecated content at the same rate as current content. The advisory signals made no measurable difference. The effect is cumulative because AI agents don&#8217;t always fetch content live; they draw on trained models. When crawlers ingest deprecated docs, agents inherit outdated foundations.<\/p>\n<p>Today, we\u2019re launching <a href=\"https:\/\/developers.cloudflare.com\/ai-crawl-control\/reference\/redirects-for-ai-training\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Redirects for AI Training<\/a> to let you enforce that verified AI training crawlers are redirected to up-to-date content. Your existing canonical tags become HTTP 301 redirects for verified AI training crawlers, automatically, with one toggle, on all paid Cloudflare plans.<\/p>\n<p>And because status codes are ultimately how the web communicates policy to crawlers, <a href=\"https:\/\/radar.cloudflare.com\/ai-insights\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Radar&#8217;s AI Insights<\/a> page now includes <a href=\"https:\/\/radar.cloudflare.com\/ai-insights#response-status\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Response status code analysis<\/a> showing the various types (<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#successful_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">successful<\/a> (2xx), <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#redirection_messages\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">redirection<\/a> (3xx), <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#client_error_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">client error<\/a> (4xx), and <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#server_error_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">server error<\/a> (5xx) of status codes AI crawlers receive across all Cloudflare traffic as a view of how the web responds to AI crawlers today.<\/p>\n<p>      AI training crawlers face dead ends today<br \/>\n      <a href=\"#ai-training-crawlers-face-dead-ends-today\" aria-hidden=\"true\" class=\"relative sm:absolute sm:-start-5\"><\/p>\n<p>      <\/a><\/p>\n<p>For search engines, noindex functions as a rich signal system, but there\u2019s no equivalent inline directive a page can carry that says \u201cdon\u2019t train on this\u201d. Keeping a deprecated page live with a warning banner may work for humans, who read the notice and navigate on, but AI training crawlers ingest the full text and risk treating the banner as just one more paragraph, returning thousands of times even after the warning is visible.<\/p>\n<p>Blocking creates its own problem: it produces a void with no signal about what the crawler should learn instead. robots.txt offers limited protection, but as automated traffic grows, maintaining per-crawler, per-path, per-content-update directives requires hefty manual upkeep. What crawlers need is specific direction: \u201cHere is where the current content lives.\u201d<\/p>\n<p>The  tag is an HTML element defined in <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc6596\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">RFC 6596<\/a> that tells search engines and automated systems which URL represents the authoritative version of a page. It\u2019s already present on <a href=\"https:\/\/almanac.httparchive.org\/en\/2025\/seo#raw-versus-rendered-canonical-tags\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">65-69% of web pages<\/a> and is generated automatically by platforms like <a href=\"https:\/\/blog.cloudflare.com\/emdash-wordpress\/\" rel=\"nofollow noopener\" target=\"_blank\">EmDash<\/a>, WordPress, and Contentful. That infrastructure declares what the current version of your content is, and Redirects for AI Training enforces it.<\/p>\n<p>Redirects for AI Training operates on two inputs: Cloudflare&#8217;s <a href=\"https:\/\/developers.cloudflare.com\/ruleset-engine\/rules-language\/fields\/reference\/cf.verified_bot_category\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">cf.verified_bot_category<\/a> field and the  tags already in your HTML. The <a href=\"https:\/\/developers.cloudflare.com\/bots\/concepts\/bot\/verified-bots\/#categories\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Crawler category<\/a> covers bots that crawl for AI model training, including GPTBot, ClaudeBot, and Bytespider, and is distinct from the <a href=\"https:\/\/developers.cloudflare.com\/bots\/concepts\/bot\/verified-bots\/#categories\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Assistant<\/a> and <a href=\"https:\/\/developers.cloudflare.com\/bots\/concepts\/bot\/verified-bots\/#categories\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Search<\/a> categories that cover AI Agents.<\/p>\n<p>When a request arrives from a verified AI Crawler, Cloudflare reads the response HTML. If a non-self-referencing canonical tag is present, Cloudflare issues a 301 Moved Permanently to the canonical URL before returning the response. Human traffic, search indexing, and other automated traffic is unaffected.<\/p>\n<p>Here\u2019s what the exchange looks like for a GPTBot request to a deprecated path:<\/p>\n<p>            GET \/durable-objects\/api\/legacy-kv-storage-api\/<\/p>\n<p>Host: developers.cloudflare.com<\/p>\n<p>User-Agent: Mozilla\/5.0 (compatible; GPTBot\/1.1; +https:\/\/openai.com\/gptbot)<\/p>\n<p>            HTTP\/1.1 301 Moved Permanently<\/p>\n<p>Location: https:\/\/developers.cloudflare.com\/durable-objects\/api\/sqlite-storage-api\/<\/p>\n<p>It doesn&#8217;t retroactively correct training data already ingested or cover unverified crawlers outside the AI Crawler bot category. Humans and AI Agents visiting deprecated pages will not be redirected. We also exclude cross-origin canonicals by design (tags directing to preferred URLs on different domains), since they\u2019re often used for domain consolidation rather than content freshness. To avoid loops, self-referencing canonicals (a tag on a page pointing to its own URL) don&#8217;t trigger a redirect either.<\/p>\n<p>      Why not just use redirect rules?\u00a0<br \/>\n      <a href=\"#why-not-just-use-redirect-rules\" aria-hidden=\"true\" class=\"relative sm:absolute sm:-start-5\"><\/p>\n<p>      <\/a><\/p>\n<p><a href=\"https:\/\/developers.cloudflare.com\/rules\/url-forwarding\/single-redirects\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Single Redirect Rules<\/a> can target AI crawlers by user-agent string, and if a site has just a handful of known deprecated paths, that works. But it doesn&#8217;t scale: every new deprecated path requires a change to the rule, user-agents must be manually tracked, and it would contribute to <a href=\"https:\/\/developers.cloudflare.com\/rules\/url-forwarding\/#availability\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">plan limitations<\/a> that may otherwise be used for campaign URLs or domain migrations. Redirect rules also manually re-encode what canonical tags already declare and fall out of sync as content changes.<\/p>\n<p>      What we found on our own documentation site<br \/>\n      <a href=\"#what-we-found-on-our-own-documentation-site\" aria-hidden=\"true\" class=\"relative sm:absolute sm:-start-5\"><\/p>\n<p>      <\/a><\/p>\n<p>Our own experience shows that this problem is real. We run AI Crawl Control on <a href=\"https:\/\/developers.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">developers.cloudflare.com<\/a> using the same dashboard available to all Cloudflare customers. In March 2026, legacy Workers documentation was crawled around 46,000 times by OpenAI, 3,600 times by Anthropic, and 1,700 times by Meta.\u00a0<\/p>\n<p>That crawling of deprecated pages may be why when we asked a leading AI assistant in April 2026, &#8220;How do I write KV values using the Wrangler CLI?&#8221;, it gave an out-of-date answer: &#8220;You write to Cloudflare KV via the Wrangler CLI using the kv:key put command.&#8221;<\/p>\n<p>In fact, the correct syntax (as at April 2026) is wrangler kv key put; the colon syntax (kv:key put) was deprecated in Wrangler 3.60.0. Our documentation <a href=\"https:\/\/developers.cloudflare.com\/kv\/reference\/kv-commands\/#deprecations\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">carries an inline deprecation notice<\/a>, but it&#8217;s unclear how training pipelines interpret them.\u00a0\u00a0<\/p>\n<p>So we enabled Redirects for AI Training on developers.cloudflare.com and measured the response. In the first seven days, 100% of AI training crawler requests to pages with non-self-referencing canonical tags were redirected and were not served with deprecated content.\u00a0<\/p>\n<p>We expect that redirecting crawlers to current content eventually improves AI-generated answers about legacy tools. Given the closed nature of training pipelines and variability in recrawl timing, this is a hypothesis we will continue to verify. But what the crawler receives at the point of access has seen immediate improvement.<\/p>\n<p>If your site has canonical tags, your existing content hierarchy can now be enforced for verified AI training crawlers. Cloudflare&#8217;s <a href=\"https:\/\/developers.cloudflare.com\/bots\/concepts\/bot\/verified-bots\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">verified bot classification<\/a> handles crawler identification automatically.<\/p>\n<p>In the dashboard: on any domain, go to AI Crawl Control &gt; Quick Actions &gt; Redirects for AI training &gt; toggle on.\u00a0<\/p>\n<p>For path-specific control via Configuration Rules and Cloudflare for SaaS, see the <a href=\"https:\/\/developers.cloudflare.com\/ai-crawl-control\/reference\/redirects-for-ai-training\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">full documentation<\/a>.<\/p>\n<p>      How the web responds to AI crawlers<br \/>\n      <a href=\"#how-the-web-responds-to-ai-crawlers\" aria-hidden=\"true\" class=\"relative sm:absolute sm:-start-5\"><\/p>\n<p>      <\/a><\/p>\n<p>Redirects for AI Training turns one status code, 301 Moved Permanently, into an enforcement mechanism for your content policy. But 301 is one signal in a broader conversation between origins and crawlers. A 200 OK means content was served. A 403 Forbidden means access was blocked. A 402 Payment Required <a href=\"https:\/\/blog.cloudflare.com\/introducing-ai-crawl-control\/#using-http-402-to-help-publishers-license-content-to-ai-crawlers\" rel=\"nofollow noopener\" target=\"_blank\">tells the client it needs to pay for access<\/a>. Taken together, the distribution of status codes across AI crawler traffic reveals how the web is actually responding to crawlers at scale.<\/p>\n<p>Radar\u2019s <a href=\"https:\/\/radar.cloudflare.com\/ai-insights\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Insights page<\/a> now includes a <a href=\"https:\/\/radar.cloudflare.com\/ai-insights#response-status\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Response status code analysis<\/a> graph illustrating the distribution of the top response status codes or response status code <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">groupings<\/a> (selectable via a dropdown) for AI crawler traffic. The data can be filtered by industry set; the crawl purpose filter can also be applied in Data Explorer. Filtered analyses provide a perspective into whether certain types of crawlers behave differently, or if request patterns and distributions vary by industry.<\/p>\n<p>In the general example shown below, we can see that for the time period covered by the graph, just over 70% of requests were serviced successfully (200), while 10.1% of the requests were redirected (301, 302) to another URL, and 3.7% were for files that weren\u2019t found (404). Access to content was blocked for 8.3% of requests, receiving a 403 response status code. Grouped, we find that nearly 74% of requests received <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#successful_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">successful responses<\/a> (2xx), 13.7% received <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#client_error_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">client error responses<\/a> (4xx), 11.3% received <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#redirection_messages\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">redirection messages<\/a> (3xx), and 1.2% were sent <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#server_error_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">server error responses<\/a> (5xx).<\/p>\n<p>This analysis has also been added to <a href=\"https:\/\/radar.cloudflare.com\/bots\/directory\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">individual bot pages<\/a> to provide insight into this aspect of a crawler\u2019s behavior as well. In the GPTBot example shown below, we can see that for the time period covered by the graph, just over 80% of requests were serviced successfully (200), while 4.7% of the requests were redirected (301, 302) to another URL, and just 2.7% were for files that weren\u2019t found (404). Nearly 6% were blocked, with Cloudflare returning a 403 response status code. Grouped, we find that 83% of requests received <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#successful_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">successful responses<\/a> (2xx), nearly 10% received <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#client_error_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">client error responses<\/a> (4xx), 5.1% received <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#redirection_messages\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">redirection messages<\/a> (3xx), and the remaining 2.2% got <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Reference\/Status#server_error_responses\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">server error responses<\/a> (5xx).<\/p>\n<p>As noted above, Radar\u2019s Data Explorer enables users to drill down further into the data by applying additional filters. For example, we can look at things like <a href=\"https:\/\/radar.cloudflare.com\/explorer?dataSet=ai.bots&amp;groupBy=user_agent&amp;dt=28d&amp;filters=responseStatus%253D404\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">which crawlers<\/a> are requesting the most non-existent content (resulting in a 404 response status code), and how that request traffic trends over time, or <a href=\"https:\/\/radar.cloudflare.com\/explorer?dataSet=ai.bots&amp;groupBy=industry&amp;dt=28d&amp;filters=crawlPurpose%253DTraining%252CresponseStatusCategory%253DREDIRECTION\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">which industries<\/a> are sending the most Redirection (3xx) response status codes to Training crawlers, and how that activity trends over time.\u00a0<\/p>\n<p>Response status code data, both in aggregate and on a per-bot basis, is also available through the <a href=\"https:\/\/developers.cloudflare.com\/api\/resources\/radar\/subresources\/ai\/subresources\/bots\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Cloudflare Radar API<\/a>.<\/p>\n<p><a href=\"https:\/\/developers.cloudflare.com\/ai-crawl-control\/reference\/redirects-for-ai-training\/\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Redirects for AI Training<\/a> lets you shape what crawlers receive from your origin; Radar&#8217;s status code analysis lets you see how the rest of the web is doing the same. Enable Redirects for AI Training in <a href=\"https:\/\/dash.cloudflare.com\/?to=\/:account\/:zone\/ai\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">AI Crawl Control &gt; Overview &gt; Quick Actions<\/a> to start replacing advisory signals with enforced outcomes on your site today.<\/p>\n<p>Have questions or want to share what you&#8217;re seeing? Join the discussion on the <a href=\"https:\/\/community.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Cloudflare Community<\/a> or find us on <a href=\"https:\/\/discord.cloudflare.com\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Discord<\/a>.<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"Cloudflare&#8217;s Wrangler CLI has published several major versions over the past six years, each containing at least some&hellip;\n","protected":false},"author":2,"featured_media":537078,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[554,733,4308,86,56,54,55],"class_list":["post-537077","post","type-post","status-publish","format-standard","has-post-thumbnail","category-artificial-intelligence","tag-ai","tag-artificial-intelligence","tag-artificialintelligence","tag-technology","tag-uk","tag-united-kingdom","tag-unitedkingdom"],"_links":{"self":[{"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/posts\/537077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/comments?post=537077"}],"version-history":[{"count":0,"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/posts\/537077\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/media\/537078"}],"wp:attachment":[{"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/media?parent=537077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/categories?post=537077"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.newsbeep.com\/uk\/wp-json\/wp\/v2\/tags?post=537077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}