= {};
-
-for (const entry of entries) {
- for (const tag of entry.data.tags!) {
- byTag[tag] ??= [];
- byTag[tag].push(entry.id);
- }
-}
-
-const flattened = Object.values(allowedTags).flat();
----
-
-{
- Object.entries(byTag)
- .sort()
- .map(([tag, pages]) => {
- const pretty = flattened.find(
- (x) =>
- x.label.toLowerCase() === tag.toLowerCase() ||
- x.variants?.find((v) => v.toLowerCase() === tag.toLowerCase()),
- );
-
- if (!pretty) {
- throw new Error(
- `[TagsUsage] Tag ${tag} not found in /src/schemas/tags.ts`,
- );
- }
-
- return (
- <>
-
- {pretty.variants && pretty.variants.length > 0 && (
-
- Variants:
-
-
- {pretty.variants?.map((variant) => (
- -
-
{variant}
-
- ))}
-
- )}
-
- Used on {pages.length}{" "}
- pages.
-
-
-
-
- >
- );
- })
-}
diff --git a/src/components/index.ts b/src/components/index.ts
index f99215e898a3558..8265b8bdb5fa12a 100644
--- a/src/components/index.ts
+++ b/src/components/index.ts
@@ -58,7 +58,6 @@ export { default as ResourcesBySelector } from "./ResourcesBySelector.astro";
export { default as RSSButton } from "./RSSButton.astro";
export { default as RuleID } from "./RuleID.astro";
export { default as Stream } from "./Stream.astro";
-export { default as TagsUsage } from "./TagsUsage.astro";
export { default as TunnelCalculator } from "./TunnelCalculator.astro";
export { default as Type } from "./Type.astro";
export { default as TypeScriptExample } from "./TypeScriptExample.astro";
diff --git a/src/components/overrides/Head.astro b/src/components/overrides/Head.astro
index f82482b1643f919..3dc7772de790ecb 100644
--- a/src/components/overrides/Head.astro
+++ b/src/components/overrides/Head.astro
@@ -272,7 +272,6 @@ metaTags.map((attrs) => {
});
---
-
diff --git a/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx b/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx
index e9b76decdc4697d..b256783f6f644e7 100644
--- a/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx
+++ b/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx
@@ -79,16 +79,6 @@ Every time you commit new code to your Hono site, Cloudflare Pages will automati
## Related resources
-### Tutorials
-
-For more tutorials involving Hono and Cloudflare Pages, refer to the following resources:
-
-
-
### Demo apps
For demo applications using Hono and Cloudflare Pages, refer to the following resources:
diff --git a/src/content/docs/pages/framework-guides/deploy-a-nuxt-site.mdx b/src/content/docs/pages/framework-guides/deploy-a-nuxt-site.mdx
index 8c91a367a090b1c..d26165c7dabc5a0 100644
--- a/src/content/docs/pages/framework-guides/deploy-a-nuxt-site.mdx
+++ b/src/content/docs/pages/framework-guides/deploy-a-nuxt-site.mdx
@@ -177,12 +177,6 @@ export default defineEventHandler(({ context }) => {
## Related resources
-### Tutorials
-
-For more tutorials involving Nuxt, refer to the following resources:
-
-
-
### Demo apps
For demo applications using Nuxt, refer to the following resources:
diff --git a/src/content/docs/rules/examples.mdx b/src/content/docs/rules/examples.mdx
index fdeaff01be1be2e..fb9036e451017a7 100644
--- a/src/content/docs/rules/examples.mdx
+++ b/src/content/docs/rules/examples.mdx
@@ -22,5 +22,5 @@ We have a separate listing for [Cache rules examples](/cache/how-to/cache-rules/
diff --git a/src/content/docs/rules/snippets/examples/index.mdx b/src/content/docs/rules/snippets/examples/index.mdx
index dc36eaabd58f84d..622ded327f04fca 100644
--- a/src/content/docs/rules/snippets/examples/index.mdx
+++ b/src/content/docs/rules/snippets/examples/index.mdx
@@ -17,8 +17,4 @@ Refer to the following examples to get started creating your snippet code.
Refer to [How Snippets work](/rules/snippets/how-it-works/) and [Create a snippet in the dashboard](/rules/snippets/create-dashboard/) for overall guidance.
-
+
diff --git a/src/content/docs/rules/transform/examples/index.mdx b/src/content/docs/rules/transform/examples/index.mdx
index a0bddccc51845e0..a2200ef9d61a49b 100644
--- a/src/content/docs/rules/transform/examples/index.mdx
+++ b/src/content/docs/rules/transform/examples/index.mdx
@@ -15,5 +15,4 @@ import { ResourcesBySelector } from "~/components";
diff --git a/src/content/docs/style-guide/components/external-resources.mdx b/src/content/docs/style-guide/components/external-resources.mdx
index a682de4fc91c1cc..24a6d2a9c0a47a2 100644
--- a/src/content/docs/style-guide/components/external-resources.mdx
+++ b/src/content/docs/style-guide/components/external-resources.mdx
@@ -21,9 +21,11 @@ import { ExternalResources } from "~/components";
import { ExternalResources } from "~/components";
## Demo apps
+
## Videos
+
```
@@ -43,8 +45,6 @@ The type of resources to show, apps or videos.
Filter resources down to those where the `tags` property contains any of these strings.
-To see a list of the available tags, and which pages are associated with them, refer to [this list](/style-guide/frontmatter/tags/).
-
### `products`
**type:** `string[]`
diff --git a/src/content/docs/style-guide/components/index.mdx b/src/content/docs/style-guide/components/index.mdx
index 9482bdc1f46022b..542526879c1994d 100644
--- a/src/content/docs/style-guide/components/index.mdx
+++ b/src/content/docs/style-guide/components/index.mdx
@@ -83,7 +83,7 @@ To choose the right component for your use case, browse this table which contain
| [`PackageManagers`](/style-guide/components/package-managers) | Command switcher tabs. Display equivalent installation or execution commands for different package managers.
 |
| [`Plan`](/style-guide/components/plan/) | Product plan availability badge. Show the plan required for a product or specific feature.
 |
| [`RelatedProduct`](/style-guide/components/related-product/) | Formatted product reference. Visually highlight and link to a specific, complementary Cloudflare product, also featuring the product's logo.
 |
-| [`ResourcesBySelector`](/style-guide/components/resources-by-selector/) | Filterable code example library. Pull and display lists of code examples and resources based on tags and content type.
 |
+| [`ResourcesBySelector`](/style-guide/components/resources-by-selector/) | Filterable code example library. Pull and display lists of code examples and resources based on content type or products.
 |
| [`Stream`](/style-guide/components/stream/) | Embeddable video player. Display a video player optimized for Cloudflare Stream.
 |
| [`Tabs` and `TabItem`](/style-guide/components/tabs/) | Switchable content tabs. Allow easy switching between content views for different code languages or configuration methods.
 |
| [`Type` and `MetaInfo`](/style-guide/components/type-highlighting/) | Pill-shaped data type badge and metadata annotation about a field or property. `Type` indicates API parameter data types (`String`, `Integer`) and `MetaInfo` indicates metadata constraints (`Required`, `Optional`, `Read-only`).
 |
diff --git a/src/content/docs/style-guide/components/resources-by-selector.mdx b/src/content/docs/style-guide/components/resources-by-selector.mdx
index 204f9e370c57ea1..4ad6d1f7cde56dd 100644
--- a/src/content/docs/style-guide/components/resources-by-selector.mdx
+++ b/src/content/docs/style-guide/components/resources-by-selector.mdx
@@ -9,7 +9,7 @@ products:
import { Type, MetaInfo } from "~/components";
-The `ResourcesBySelector` component allows you to pull in documentation resources based on the `pcx_content_type`, `tags` and `products` frontmatter properties.
+The `ResourcesBySelector` component allows you to pull in documentation resources based on the `pcx_content_type` and `products` frontmatter properties.
## Component
@@ -19,7 +19,7 @@ import { ResourcesBySelector } from "~/components";
```
@@ -31,18 +31,12 @@ import { ResourcesBySelector } from "~/components";
- `filterables`
- An array of frontmatter properties to show in the frontend filter dropdown. For example, `filterables={["tags"]}` will allow users to filter based on each pages' `tags` frontmatter.
+ An array of frontmatter properties to show in the frontend filter dropdown. For example, `filterables={["products"]}` will allow users to filter based on each pages' `products` frontmatter.
- `types`
An array of `pcx_content_type` values to filter which content gets pulled into the component. For example, `types={["example"]}`.
-- `tags`
-
- An array of `tags` values to filter which content gets pulled into the component. For example, `tags={["AI"]}`.
-
- To see a list of the available tags, and which pages are associated with them, refer to [this list](/style-guide/frontmatter/tags/).
-
- `products`
An array of `products` values to filter which content gets pulled into the component. For example, `products={["D1"]}`.
diff --git a/src/content/docs/style-guide/frontmatter/tags.mdx b/src/content/docs/style-guide/frontmatter/tags.mdx
deleted file mode 100644
index 95cf2d2120a08ed..000000000000000
--- a/src/content/docs/style-guide/frontmatter/tags.mdx
+++ /dev/null
@@ -1,36 +0,0 @@
----
-title: Tags
-description: Use validated tags in documentation frontmatter.
-products:
- - style-guide
----
-
-import { TagsUsage } from "~/components";
-
-Tags are currently used to filter content in the [`ExternalResources`](/style-guide/components/external-resources/) and the [`ResourcesBySelector`](/style-guide/components/resources-by-selector/) components.
-
-## Example
-
-```mdx
----
-title: Example
-products:
- - product-a
-tags:
- - foo
- - bar
----
-```
-
-## Allowed tags and where they are being used
-
-Tags are validated against an allowlist in [`/src/schemas/tags.ts`](https://github.com/cloudflare/cloudflare-docs/blob/production/src/schemas/tags.ts) which defines the user-facing representation (`label`) and any associated variants.
-
-The matching is case-insensitive. For example, all of the following values are accepted in the `tags` frontmatter array and will be transformed into `Node.js`:
-
-- `node.js`
-- `NoDe.JS`
-- `node`
-- `nodejs`
-
-
diff --git a/src/content/docs/style-guide/how-we-docs/metadata.mdx b/src/content/docs/style-guide/how-we-docs/metadata.mdx
index 329d388c94c9efe..88a42e32eed962b 100644
--- a/src/content/docs/style-guide/how-we-docs/metadata.mdx
+++ b/src/content/docs/style-guide/how-we-docs/metadata.mdx
@@ -34,7 +34,6 @@ At Cloudflare, we track the following information about different pages:
| **Description** | A 1-2 sentence summary that populates the `` tag. Required for all pages with a `pcx_content_type`. | Refer to [frontmatter guidance](/style-guide/frontmatter/#writing-a-description). |
| **Product** | The top-level subfolder of the page. | `dns`, `bots` |
| **Product Group** | The primary area that each product falls into. | `Application Performance`, `Developer Platform` |
-| **Tags** | Specific [attributes](/style-guide/frontmatter/tags/) related to a page's content or purpose. | `AI`, `JavaScript`, `Headers` |
| **Content type** | The primary purpose of the page, which corresponds to our listed [content types](/style-guide/documentation-content-strategy/content-types/). | `how-to`, `faq` |
| **Last modified** | How many days ago was this page last updated? | `63` |
| **Last reviewed** (optional) | How many days ago was this page last reviewed? | `100` |
diff --git a/src/content/docs/workers/examples/index.mdx b/src/content/docs/workers/examples/index.mdx
index ddb61bdb288b6e0..1f5fd31b95f178c 100644
--- a/src/content/docs/workers/examples/index.mdx
+++ b/src/content/docs/workers/examples/index.mdx
@@ -13,8 +13,4 @@ import { GlossaryTooltip, ResourcesBySelector } from "~/components";
Explore the following examples for Workers.
-
+
diff --git a/src/plugins/starlight/route-data.ts b/src/plugins/starlight/route-data.ts
deleted file mode 100644
index a5dc83885317a00..000000000000000
--- a/src/plugins/starlight/route-data.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { defineRouteMiddleware } from "@astrojs/starlight/route-data";
-import { tags as allowedTags } from "~/schemas/tags";
-
-const tagValues = Object.values(allowedTags).flat();
-
-export const onRequest = defineRouteMiddleware(({ locals }) => {
- const { entry } = locals.starlightRoute;
- const { tags } = entry.data;
-
- if (tags) {
- const transformed = tags.map((tag) => {
- const match = tagValues.find(
- (val) =>
- val.label.toLowerCase() === tag.toLowerCase() ||
- val.variants?.find((v) => v.toLowerCase() === tag.toLowerCase()),
- );
-
- if (!match) {
- throw new Error(
- `Invalid tag on ${entry.id}: ${tag}, please refer to the style guide: https://developers.cloudflare.com/style-guide/frontmatter/tags/`,
- );
- }
-
- return match.label;
- });
-
- entry.data.tags = transformed;
- }
-});
diff --git a/src/schemas/base.ts b/src/schemas/base.ts
index 72920a701effd43..09fc6446ee2f2fa 100644
--- a/src/schemas/base.ts
+++ b/src/schemas/base.ts
@@ -16,7 +16,7 @@ export const baseSchema = (_context: SchemaContext) =>
.array()
.optional()
.describe(
- "A group of related keywords relating to the purpose of the page. Refer to [Tags](/style-guide/frontmatter/tags/).",
+ "A group of related keywords relating to the purpose of the page.",
),
external_link: z
.string()
diff --git a/src/schemas/tags.ts b/src/schemas/tags.ts
deleted file mode 100644
index 83282c241185749..000000000000000
--- a/src/schemas/tags.ts
+++ /dev/null
@@ -1,186 +0,0 @@
-/* This is the allowlist for the tags we allow
-in our page frontmatter. Refer to https://developers.cloudflare.com/style-guide/frontmatter/custom-properties/#tags
-and https://developers.cloudflare.com/style-guide/frontmatter/tags/ for more details.
-*/
-
-type Tag = { label: string; variants?: string[] };
-
-const data_structures: Array = [
- { label: "JSON" },
- { label: "TOML" },
- { label: "XML" },
- { label: "YAML" },
-];
-
-const frameworks: Array = [
- { label: "Angular" },
- { label: "Astro" },
- { label: "Hono" },
- { label: "Next.js", variants: ["nextjs"] },
- { label: "Node.js", variants: ["node", "nodejs"] },
- { label: "Nuxt" },
- { label: "REST API" },
- { label: "Remix" },
- { label: "Ruby", variants: ["rb", "ruby on rails"] },
- { label: "Svelte" },
- { label: "SvelteKit" },
- { label: "Vue.js", variants: ["vue", "vuejs"] },
- { label: ".NET" },
-];
-
-const integrations: Array = [
- { label: "Azure", variants: ["Microsoft Azure", "MS Azure"] },
- { label: "AWS", variants: ["Amazon Web Services"] },
- { label: "Docker" },
- { label: "GCP", variants: ["Google Cloud", "Google Cloud Platform"] },
- { label: "Google" },
- { label: "G Suite Group", variants: ["gsuite", "g suite"] },
- { label: "CrowdStrike" },
- { label: "GitHub" },
- { label: "Gitlab" },
- { label: "Grafana" },
- { label: "Kubernetes", variants: ["K8s"] },
- {
- label: "Microsoft Entra ID",
- variants: ["AzureAD", "Azure Active Directory", "MS Entra ID", "Entra ID"],
- },
- { label: "Microsoft" },
- { label: "OpenAI" },
- { label: "MongoDB" },
- { label: "MotherDuck" },
- { label: "PlanetScale" },
- { label: "Postgres", variants: ["PostgreSQL"] },
- { label: "S3" },
- { label: "Salesforce" },
- { label: "SentinelOne", variants: ["Sentinel One"] },
- { label: "Sentry" },
- { label: "Splunk" },
- { label: "ServiceNow", variants: ["Service Now"] },
- { label: "Slack" },
- { label: "Stripe" },
- { label: "Sumo Logic", variants: ["sumo"] },
- { label: "Terraform" },
- { label: "Okta" },
- { label: "WordPress" },
-];
-
-const languages: Array = [
- { label: "Go" },
- { label: "GraphQL" },
- { label: "Java" },
- { label: "JavaScript", variants: ["js"] },
- { label: "Markdown", variants: ["md"] },
- { label: "MySQL" },
- { label: "NoSQL" },
- { label: "PowerShell", variants: ["ps"] },
- { label: "Python", variants: ["py"] },
- { label: "Rust", variants: ["rs"] },
- { label: "Shell", variants: ["sh"] },
- { label: "SQL" },
- { label: "TypeScript", variants: ["ts"] },
- { label: "WebAssembly", variants: ["Web Assembly", "wasm"] },
-];
-
-const operating_systems: Array = [
- { label: "Android", variants: ["ChromeOS"] },
- { label: "iOS" },
- { label: "Linux" },
- { label: "MacOS", variants: ["OS X"] },
- { label: "Windows", variants: ["ms windows"] },
-];
-
-const presentation: Array = [{ label: "Video" }];
-
-const product_features: Array = [
- { label: "Web Crypto", variants: ["webcrypto"] },
- { label: "RPC" },
-];
-
-const protocols: Array = [
- { label: "FTP", variants: ["file transfer protocol", "ftps"] },
- { label: "ICMP" },
- { label: "IPsec" },
- { label: "IPv4" },
- { label: "IPv6" },
- { label: "JSON web token (JWT)", variants: ["jwt"] },
- { label: "MASQUE" },
- { label: "mTLS" },
- { label: "NetFlow" },
- { label: "MQTT" },
- { label: "OIDC", variants: ["OpenID Connect", "oidc"] },
- { label: "Post-quantum", variants: ["pqc", "post-quantum cryptography"] },
- { label: "QUIC" },
- { label: "RDP" },
- { label: "SAML" },
- { label: "SCIM" },
- { label: "SMTP" },
- { label: "SFTP" },
- { label: "SSH" },
- { label: "SSO" },
- { label: "TCP" },
- { label: "TLS" },
- { label: "UDP" },
- { label: "WebSockets", variants: ["websocket"] },
- { label: "Wireguard" },
-];
-
-const use_cases: Array = [
- { label: "A11y", variants: ["accessibility"] },
- { label: "Account takeover" },
- { label: "AI" },
- { label: "AI Agents", variants: ["agentic"] },
- { label: "Analytics" },
- { label: "Authentication", variants: ["auth"] },
- { label: "Automation", variants: ["automations"] },
- { label: "A/B testing", variants: ["ab test"] },
- { label: "Bindings", variants: ["binding"] },
- { label: "Caching", variants: ["cache"] },
- { label: "CLI" },
- { label: "CMS" },
- { label: "Compliance" },
- { label: "Cookies" },
- { label: "CORS" },
- { label: "CSP" },
- { label: "Debugging", variants: ["debug", "troubleshooting"] },
- { label: "DNS" },
- { label: "Forms" },
- { label: "Full stack", variants: ["full-stack"] },
- { label: "Geolocation" },
- { label: "Headers", variants: ["header"] },
- { label: "Integration" },
- { label: "LLM", variants: ["llms"] },
- { label: "Localization" },
- { label: "Logging" },
- { label: "Middleware" },
- { label: "Migration" },
- { label: "MCP" },
- { label: "Phishing" },
- { label: "Playback" },
- { label: "Posture", variants: ["security posture", "device posture"] },
- { label: "Prisma ORM" },
- { label: "Privacy" },
- { label: "Proxying" },
- { label: "Private networks" },
- { label: "Redirects", variants: ["redirect"] },
- { label: "Request modification", variants: ["request"] },
- { label: "Response modification", variants: ["response"] },
- { label: "Scraping" },
- { label: "Security" },
- { label: "SIEM" },
- { label: "SPA" },
- { label: "SSG" },
- { label: "URL rewrite", variants: ["rewrite"] },
- { label: "Voice" },
-];
-
-export const tags = {
- data_structures,
- frameworks,
- integrations,
- languages,
- presentation,
- product_features,
- protocols,
- operating_systems,
- use_cases,
-};