Skip to content

Commit 30953e7

Browse files
Merge branch 'production' into rebecca/dns-proxy-status-review
2 parents 4421053 + 17dcccf commit 30953e7

File tree

67 files changed

+465
-158
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+465
-158
lines changed

astro.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@ import starlightLinksValidator from "starlight-links-validator";
88
import icon from "astro-icon";
99
import sitemap from "@astrojs/sitemap";
1010
import react from "@astrojs/react";
11+
1112
import { readdir } from "fs/promises";
13+
import { fileURLToPath } from "url";
1214

1315
import rehypeTitleFigure from "rehype-title-figure";
1416
import rehypeMermaid from "./src/plugins/rehype/mermaid.ts";
1517
import rehypeAutolinkHeadings from "./src/plugins/rehype/autolink-headings.ts";
1618
import rehypeExternalLinks from "./src/plugins/rehype/external-links.ts";
1719
import rehypeHeadingSlugs from "./src/plugins/rehype/heading-slugs.ts";
18-
import { fileURLToPath } from "url";
1920

2021
async function autogenSections() {
2122
const sections = (

public/_redirects

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -454,12 +454,12 @@
454454
/fundamentals/get-started/google-analytics/ /fundamentals/reference/google-analytics/ 301
455455
/fundamentals/get-started/http-request-headers/ /fundamentals/reference/http-headers/ 301
456456
/fundamentals/get-started/network-ports/ /fundamentals/reference/network-ports/ 301
457-
/fundamentals/get-started/basic-tasks/improve-seo/ /fundamentals/basic-tasks/improve-seo/ 301
457+
/fundamentals/get-started/basic-tasks/improve-seo/ /fundamentals/performance/improve-seo/ 301
458458
/fundamentals/get-started/basic-tasks/allow-cloudflare-ip-addresses/ /fundamentals/concepts/cloudflare-ip-addresses/ 301
459459
/fundamentals/get-started/basic-tasks/account-setup/ /fundamentals/setup/account/ 301
460460
/fundamentals/get-started/concepts/cdn-cgi-endpoint/ /fundamentals/reference/cdn-cgi-endpoint/ 301
461461
/fundamentals/get-started/concepts/how-cloudflare-works/ /fundamentals/concepts/how-cloudflare-works/ 301
462-
/fundamentals/get-started/origin-health/ /fundamentals/basic-tasks/protect-your-origin-server/ 301
462+
/fundamentals/get-started/origin-health/ /fundamentals/security/protect-your-origin-server/ 301
463463
/fundamentals/get-started/reference/cloudflare-cookies/ /fundamentals/reference/policies-compliances/cloudflare-cookies/ 301
464464
/fundamentals/get-started/task-guides/secure-your-website/ /learning-paths/application-security/ 301
465465
/fundamentals/get-started/task-guides/optimize-site-speed/ /speed/ 301
@@ -535,37 +535,37 @@
535535
/fundamentals/get-started/setup/add-site/ /fundamentals/setup/manage-domains/add-site/ 301
536536
/fundamentals/get-started/get-started-external-link/ /learning-paths/get-started/ 301
537537
/fundamentals/get-started/task-guides/prevent-ddos-attacks-external/ /learning-paths/prevent-ddos-attacks/ 301
538-
/fundamentals/get-started/task-guides/origin-health/free/ /fundamentals/basic-tasks/protect-your-origin-server/ 301
539-
/fundamentals/get-started/task-guides/origin-health/business/ /fundamentals/basic-tasks/protect-your-origin-server/ 301
540-
/fundamentals/get-started/task-guides/origin-health/pro/ /fundamentals/basic-tasks/protect-your-origin-server/ 301
541-
/fundamentals/get-started/task-guides/origin-health/enterprise/ /fundamentals/basic-tasks/protect-your-origin-server/ 301
542-
/fundamentals/get-started/task-guides/origin-health/ /fundamentals/basic-tasks/protect-your-origin-server/ 301
538+
/fundamentals/get-started/task-guides/origin-health/free/ /fundamentals/security/protect-your-origin-server/ 301
539+
/fundamentals/get-started/task-guides/origin-health/business/ /fundamentals/security/protect-your-origin-server/ 301
540+
/fundamentals/get-started/task-guides/origin-health/pro/ /fundamentals/security/protect-your-origin-server/ 301
541+
/fundamentals/get-started/task-guides/origin-health/enterprise/ /fundamentals/security/protect-your-origin-server/301
542+
/fundamentals/get-started/task-guides/origin-health/ /fundamentals/security/protect-your-origin-server/ 301
543543
/fundamentals/get-started/task-guides/ /fundamentals/basic-tasks/ 301
544544
/fundamentals/get-started/setup/ /fundamentals/setup/ 301
545-
/fundamentals/get-started/setup/minimize-downtime/ /fundamentals/basic-tasks/minimize-downtime/ 301
545+
/fundamentals/get-started/setup/minimize-downtime/ /fundamentals/performance/minimize-downtime/ 301
546546
/fundamentals/get-started/concepts/what-is-cloudflare/ /fundamentals/concepts/what-is-cloudflare/ 301
547547
/fundamentals/get-started/concepts/cloudflare-challenges/ /waf/reference/cloudflare-challenges/ 301
548548
/fundamentals/get-started/concepts/accounts-and-zones/ /fundamentals/setup/accounts-and-zones/ 301
549549
/fundamentals/get-started/concepts/cloudflare-ip-addresses/ /fundamentals/concepts/cloudflare-ip-addresses/ 301
550550
/fundamentals/get-started/concepts/network-layers/ /fundamentals/reference/network-layers/ 301
551551
/fundamentals/get-started/concepts/ /fundamentals/concepts/ 301
552552
/fundamentals/get-started/basic-tasks/find-account-and-zone-ids/ /fundamentals/setup/find-account-and-zone-ids/ 301
553-
/fundamentals/get-started/basic-tasks/maintenance-mode/ /fundamentals/basic-tasks/maintenance-mode/ 301
553+
/fundamentals/get-started/basic-tasks/maintenance-mode/ /fundamentals/performance/maintenance-mode/ 301
554554
/fundamentals/get-started/basic-tasks/access-cloudflare-resources/ /fundamentals/ 301
555555
/fundamentals/get-started/basic-tasks/manage-domains/remove-domain/ /fundamentals/setup/manage-domains/remove-domain/ 301
556556
/fundamentals/get-started/basic-tasks/manage-domains/pause-cloudflare/ /fundamentals/setup/manage-domains/pause-cloudflare/ 301
557557
/fundamentals/get-started/basic-tasks/manage-domains/move-domain/ /fundamentals/setup/manage-domains/move-domain/ 301
558558
/fundamentals/get-started/basic-tasks/manage-domains/ /fundamentals/setup/manage-domains/ 301
559559
/fundamentals/get-started/basic-tasks/manage-domains/redirect-domain/ /fundamentals/setup/manage-domains/redirect-domain/ 301
560560
/fundamentals/get-started/basic-tasks/cloudflare-without-changing-nameservers/ /fundamentals/setup/use-cloudflare-without-changing-nameservers/ 301
561-
/fundamentals/get-started/basic-tasks/interact-with-cloudflare/ /fundamentals/basic-tasks/interact-with-cloudflare/ 301
561+
/fundamentals/get-started/basic-tasks/interact-with-cloudflare/ /fundamentals/setup/interact-with-cloudflare/ 301
562562
/fundamentals/get-started/basic-tasks/manage-subdomains/ /fundamentals/setup/manage-domains/manage-subdomains/ 301
563563
/fundamentals/get-started/basic-tasks/report-abuse/provide-specific-urls/ /fundamentals/reference/report-abuse/provide-specific-urls/ 301
564564
/fundamentals/get-started/basic-tasks/report-abuse/complaint-types/ /fundamentals/reference/report-abuse/complaint-types/ 301
565565
/fundamentals/get-started/basic-tasks/report-abuse/ /fundamentals/reference/report-abuse/ 301
566566
/fundamentals/get-started/basic-tasks/access-compliance-docs/ /fundamentals/reference/policies-compliances/compliance-docs/ 301
567-
/fundamentals/get-started/basic-tasks/under-ddos-attack/ /fundamentals/basic-tasks/under-ddos-attack/ 301
568-
/fundamentals/get-started/basic-tasks/test-speed/ /fundamentals/basic-tasks/test-speed/ 301
567+
/fundamentals/get-started/basic-tasks/under-ddos-attack/ /fundamentals/security/under-ddos-attack/ 301
568+
/fundamentals/get-started/basic-tasks/test-speed/ /fundamentals/performance/test-speed/ 301
569569
/fundamentals/get-started/basic-tasks/ /fundamentals/basic-tasks/ 301
570570
/fundamentals/get-started/basic-tasks/account-security/securing-a-compromised-account/ /fundamentals/setup/account/account-security/secure-a-compromised-account/ 301
571571
/fundamentals/get-started/basic-tasks/account-security/review-audit-logs/ /fundamentals/setup/account/account-security/review-audit-logs/ 301
@@ -609,6 +609,14 @@
609609
/fundamentals/basic-tasks/login/ /fundamentals/setup/account/login/ 301
610610
/fundamentals/concepts/redirects/ /fundamentals/reference/redirects/ 301
611611
/fundamentals/reference/changelog/ /fundamentals/reference/ 302
612+
/fundamentals/basic-tasks/optimize-speed-external-link/ /fundamentals/performance/optimize-speed-external-link/ 301
613+
/fundamentals/basic-tasks/prevent-ddos-attacks-external/ /fundamentals/security/prevent-ddos-attacks-external/ 301
614+
/fundamentals/basic-tasks/protect-your-origin-server/ /fundamentals/security/protect-your-origin-server/ 301
615+
/fundamentals/basic-tasks/pci-scans/ /fundamentals/security/pci-scans/ 301
616+
/fundamentals/basic-tasks/trace-request/ /fundamentals/security/trace-request/ 301
617+
/fundamentals/basic-tasks/trace-request/how-to/ /fundamentals/security/trace-request/how-to/ 301
618+
/fundamentals/basic-tasks/trace-request/limitations/ /fundamentals/security/trace-request/limitations/ 301
619+
/fundamentals/basic-tasks/trace-request/changelog/ /fundamentals/security/trace-request/changelog/ 301
612620

613621
# gateway
614622
/gateway/about/ /cloudflare-one/policies/gateway/ 301
@@ -1181,7 +1189,7 @@
11811189
/support/more-dashboard-apps/cloudflare-scrape-shield/what-is-email-address-obfuscation/ /waf/tools/scrape-shield/email-address-obfuscation/ 301
11821190
/support/more-dashboard-apps/cloudflare-scrape-shield/why-doesnt-my-rss-feed-show-images/ /waf/tools/scrape-shield/hotlink-protection/ 301
11831191
/support/more-dashboard-apps/cloudflare-scrape-shield/ /waf/tools/scrape-shield/ 301
1184-
/support/about-cloudflare/attack-preparation-and-response/recovering-from-a-hacked-site/ /fundamentals/basic-tasks/recovering-from-hacked-site/ 301
1192+
/support/about-cloudflare/attack-preparation-and-response/recovering-from-a-hacked-site/ /fundamentals/security/recovering-from-hacked-site/ 301
11851193
/support/firewall/learn-more/configuring-token-authentication/ /waf/custom-rules/use-cases/configure-token-authentication/ 301
11861194
/support/firewall/learn-more/ /waf/troubleshooting/ 301
11871195
/support/firewall/ /waf/troubleshooting/ 301
@@ -1202,8 +1210,8 @@
12021210
/support/ssl-tls/faq-and-reference/ /ssl/reference/ 301
12031211
/support/account-management-billing/account-privacy-and-security/understanding-samesite-cookie-interaction-with-cloudflare/ /waf/troubleshooting/samesite-cookie-interaction/ 301
12041212
/support/account-management-billing/account-privacy-and-security/ /support/account-management-billing/ 301
1205-
/support/troubleshooting/general-troubleshooting/troubleshooting-surges-or-spikes-in-web-traffic/ /fundamentals/basic-tasks/preparing-for-surges-or-spikes-in-web-traffic/ 301
1206-
/support/troubleshooting/general-troubleshooting/preparing-for-surges-or-spikes-in-web-traffic/ /fundamentals/basic-tasks/preparing-for-surges-or-spikes-in-web-traffic/ 301
1213+
/support/troubleshooting/general-troubleshooting/troubleshooting-surges-or-spikes-in-web-traffic/ /fundamentals/performance/preparing-for-surges-or-spikes-in-web-traffic/ 301
1214+
/support/troubleshooting/general-troubleshooting/preparing-for-surges-or-spikes-in-web-traffic/ /fundamentals/performance/preparing-for-surges-or-spikes-in-web-traffic/ 301
12071215
/support/third-party-software/others/configuring-an-amazon-web-services-static-site-to-use-cloudflare/ /rules/cloud-connector/providers/ 301
12081216
/support/third-party-software/others/enabling-cloudflare-ssl-on-azure-storage-static-web-hosting-applications/ /rules/cloud-connector/providers/ 301
12091217

src/components/Render.astro

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,49 @@ const props = z.object({
1313
let { file, product, params } = props.parse(Astro.props);
1414
1515
if (!product) {
16-
product = Astro.params.slug?.split("/")[0];
17-
}
16+
const fromSlug = Astro.params.slug?.split("/")[0];
1817
19-
if (!product) {
20-
throw new Error(
21-
`[Render] Unable to infer which folder ${file} is in, please provide a "product" input with your "file" input.`,
22-
);
18+
if (!fromSlug) {
19+
throw new Error(
20+
`[Render] Unable to infer which folder ${file} is in, please provide a "product" input with your "file" input.`,
21+
);
22+
}
23+
24+
product = fromSlug;
2325
}
2426
25-
const partial = await getEntry("partials", `${product}/${file}`);
27+
const id = `${product}/${file}`;
28+
const partial = await getEntry("partials", id);
2629
2730
if (!partial) {
2831
throw new Error(
29-
`[Render] Couldn't find partial: ${file}. Included on ${Astro.params.slug}`,
32+
`[Render] Couldn't find "${id}" included on "${Astro.url.pathname}"`,
3033
);
3134
}
3235
36+
// We currently only enforce parameters if `params` is set in the frontmatter,
37+
// until we can migrate existing `inputParameters` frontmatter to `params`.
3338
if (partial.data.params) {
34-
const expected = partial.data.params;
35-
if (!params)
39+
const expected = partial.data.params.sort();
40+
const optional = expected.filter((p) => p.endsWith("?"));
41+
const received = Object.keys(params ?? {}).sort();
42+
43+
const maximum = expected.length;
44+
const minimum = maximum - optional.length;
45+
46+
if (
47+
received.length < minimum ||
48+
received.length > maximum ||
49+
expected.some((p: string) => {
50+
if (p.endsWith("?")) return false;
51+
52+
return !received.includes(p);
53+
})
54+
) {
3655
throw new Error(
37-
`${file} included on ${Astro.params.slug} expected parameters: ${expected}, got none`,
56+
`[Render] Expected parameters ${JSON.stringify(expected)} but received parameters ${JSON.stringify(received)} for "${file}" included on "${Astro.url.pathname}"`,
3857
);
58+
}
3959
}
4060
4161
const { Content } = await render(partial);

src/components/overrides/Head.astro

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ if (currentSection) {
6868
const group = product.data.product.group.toLowerCase();
6969
7070
let ogImage = "https://developers.cloudflare.com/cf-twitter-card.png";
71-
let changelogImage =
72-
"https://developers.cloudflare.com/changelog-preview.png";
71+
7372
const images: Record<string, string> = {
7473
"cloudflare essentials":
7574
"https://developers.cloudflare.com/core-services-preview.png",
@@ -88,10 +87,6 @@ if (currentSection) {
8887
ogImage = images[group];
8988
}
9089
91-
if (currentSection === "changelog") {
92-
ogImage = changelogImage;
93-
}
94-
9590
const tags = [
9691
{
9792
tag: "meta",
@@ -142,6 +137,40 @@ if (currentSection) {
142137
content: "",
143138
});
144139
}
140+
141+
if (currentSection === "changelog") {
142+
let changelogImage =
143+
"https://developers.cloudflare.com/changelog-preview.png";
144+
145+
const tags = [
146+
{
147+
tag: "meta",
148+
attrs: {
149+
name: "image",
150+
content: changelogImage,
151+
},
152+
content: "",
153+
},
154+
{
155+
tag: "meta",
156+
attrs: {
157+
name: "og:image",
158+
content: changelogImage,
159+
},
160+
content: "",
161+
},
162+
{
163+
tag: "meta",
164+
attrs: {
165+
name: "twitter:image",
166+
content: changelogImage,
167+
},
168+
content: "",
169+
},
170+
] as const;
171+
172+
Astro.props.entry.data.head.push(...tags);
173+
}
145174
}
146175
147176
// Add noindex tag if present in frontmatter

src/content.config.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { z, defineCollection } from "astro:content";
1+
import { defineCollection } from "astro:content";
22

33
import { docsLoader, i18nLoader } from "@astrojs/starlight/loaders";
44
import { docsSchema, i18nSchema } from "@astrojs/starlight/schema";
@@ -20,6 +20,7 @@ import {
2020
warpReleasesSchema,
2121
changelogsNextSchema,
2222
fieldsSchema,
23+
partialsSchema,
2324
} from "~/schemas";
2425

2526
function contentLoader(name: string) {
@@ -36,10 +37,6 @@ function dataLoader(name: string) {
3637
});
3738
}
3839

39-
const partialSchema = z.object({
40-
params: z.string().array().optional(),
41-
});
42-
4340
export const collections = {
4441
docs: defineCollection({
4542
loader: docsLoader(),
@@ -61,7 +58,7 @@ export const collections = {
6158
}),
6259
partials: defineCollection({
6360
loader: contentLoader("partials"),
64-
schema: partialSchema,
61+
schema: partialsSchema,
6562
}),
6663
glossary: defineCollection({
6764
loader: dataLoader("glossary"),
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
title: Expanded AI insights in Cloudflare Radar
3+
description: Expanded AI insights with new API endpoints for Internet services rankings, robots.txt, and inference data
4+
products:
5+
- radar
6+
date: 2025-02-04T11:00:00Z
7+
---
8+
9+
[**Radar**](/radar/) has expanded its AI insights with new API endpoints for Internet services rankings, robots.txt analysis, and AI inference data.
10+
11+
#### Internet services ranking
12+
13+
Radar now provides [rankings for Internet services](/radar/glossary/#internet-services-ranking), including Generative AI platforms, based on anonymized 1.1.1.1 resolver data.
14+
Previously limited to the annual Year in Review, these insights are now available daily via the [API](/api/resources/radar/subresources/ranking/subresources/internet_services/), through the following endpoints:
15+
16+
- [`top`](/api/resources/radar/subresources/ranking/subresources/internet_services/methods/top/) show service popularity at a specific date.
17+
- [`timeseries_groups`](/api/resources/radar/subresources/ranking/subresources/internet_services/methods/timeseries_groups/) track ranking trends over time.
18+
19+
#### Robots.txt
20+
21+
Radar now analyzes [robots.txt](/radar/glossary/#robotstxt) files from the top 10,000 domains, identifying AI bot access rules.
22+
AI-focused user agents from [ai.robots.txt](https://github.com/ai-robots-txt/ai.robots.txt) are categorized as:
23+
24+
- **Fully allowed/disallowed** if directives apply to all paths (`*`).
25+
- **Partially allowed/disallowed** if restrictions apply to specific paths.
26+
27+
These insights are now available weekly via the [API](/api/resources/radar/subresources/robots_txt/), through the following endpoints:
28+
29+
- [`top/user_agents/directive`](/api/resources/radar/subresources/robots_txt/subresources/top/subresources/user_agents/methods/directive/) to get the top AI user agents by directive.
30+
- [`top/domain_categories`](/api/resources/radar/subresources/robots_txt/subresources/top/methods/domain_categories/) to get the top domain categories by robots.txt files.
31+
32+
#### Workers AI
33+
34+
Radar now provides insights into public AI inference models from [Workers AI](/workers-ai/), tracking usage trends across **models** and **tasks**.
35+
These insights are now available via the [API](/api/resources/radar/subresources/ai/subresources/inference/), through the following endpoints:
36+
37+
- [`summary`](/api/resources/radar/subresources/ai/subresources/inference/subresources/summary/) to view aggregated `model` and `task` popularity.
38+
- [`timeseries_groups`](/api/resources/radar/subresources/ai/subresources/inference/subresources/timeseries_groups/) to track changes over time for `model` or `task`.
39+
40+
Learn more about the new Radar AI insights in our [blog post](https://blog.cloudflare.com/expanded-ai-insights-on-cloudflare-radar/).

0 commit comments

Comments
 (0)