From 345d6bd38f31955a9556b28dfd5bee1c8223f8cf Mon Sep 17 00:00:00 2001
From: Derek <256792747+decofe@users.noreply.github.com>
Date: Fri, 26 Jun 2026 05:06:22 +0000
Subject: [PATCH 1/4] Add docs SEO and AEO metadata
---
public/robots.txt | 28 ++++++++
src/components/DocsJsonLd.tsx | 67 ++++++++++++++++++++
src/pages/docs/_layout.tsx | 2 +
src/pages/docs/guide/using-tempo-with-ai.mdx | 2 +
src/pages/docs/tools.mdx | 2 +
5 files changed, 101 insertions(+)
create mode 100644 public/robots.txt
create mode 100644 src/components/DocsJsonLd.tsx
diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 00000000..fb03efdc
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,28 @@
+User-agent: *
+Allow: /
+
+User-agent: GPTBot
+Allow: /
+
+User-agent: OAI-SearchBot
+Allow: /
+
+User-agent: ChatGPT-User
+Allow: /
+
+User-agent: PerplexityBot
+Allow: /
+
+User-agent: ClaudeBot
+Allow: /
+
+User-agent: Claude-User
+Allow: /
+
+User-agent: Google-Extended
+Allow: /
+
+User-agent: Applebot
+Allow: /
+
+Sitemap: https://docs.tempo.xyz/sitemap.xml
diff --git a/src/components/DocsJsonLd.tsx b/src/components/DocsJsonLd.tsx
new file mode 100644
index 00000000..73df5245
--- /dev/null
+++ b/src/components/DocsJsonLd.tsx
@@ -0,0 +1,67 @@
+const tempoSameAs = [
+ 'https://x.com/tempo',
+ 'https://twitter.com/tempo',
+ 'https://github.com/tempoxyz',
+ 'https://www.linkedin.com/company/tempoxyz',
+ 'https://www.crunchbase.com/organization/tempo-87e4',
+]
+
+const tempoKnowsAbout = [
+ 'stablecoin payments',
+ 'cross-border payments',
+ 'global payouts',
+ 'agentic payments',
+ 'machine payments',
+ 'enterprise settlement',
+ 'payment blockchains',
+ 'Layer 1 blockchain',
+ 'stablecoin infrastructure',
+]
+
+const description =
+ 'Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. Tempo documentation covers stablecoin payments, global payouts, agentic payments, APIs, wallets, and protocol specifications.'
+
+export default function DocsJsonLd(props: { path: string }) {
+ const pathname = props.path.startsWith('/') ? props.path : `/${props.path}`
+ const url = `https://docs.tempo.xyz${pathname}`
+ const schema = {
+ '@context': 'https://schema.org',
+ '@graph': [
+ {
+ '@type': 'Organization',
+ '@id': 'https://tempo.xyz/#organization',
+ name: 'Tempo',
+ url: 'https://tempo.xyz',
+ description,
+ sameAs: tempoSameAs,
+ knowsAbout: tempoKnowsAbout,
+ },
+ {
+ '@type': 'WebSite',
+ '@id': 'https://docs.tempo.xyz/#website',
+ name: 'Tempo Docs',
+ url: 'https://docs.tempo.xyz',
+ description,
+ publisher: { '@id': 'https://tempo.xyz/#organization' },
+ },
+ {
+ '@type': 'TechArticle',
+ '@id': url,
+ url,
+ headline: 'Tempo documentation',
+ description,
+ isPartOf: { '@id': 'https://docs.tempo.xyz/#website' },
+ about: { '@id': 'https://tempo.xyz/#organization' },
+ publisher: { '@id': 'https://tempo.xyz/#organization' },
+ },
+ ],
+ }
+
+ return (
+
+ )
+}
diff --git a/src/pages/docs/_layout.tsx b/src/pages/docs/_layout.tsx
index c6cac89f..2126b785 100644
--- a/src/pages/docs/_layout.tsx
+++ b/src/pages/docs/_layout.tsx
@@ -2,6 +2,7 @@
import { lazy, type PropsWithChildren, Suspense } from 'react'
import DocsHeader from '../../components/DocsHeader'
+import DocsJsonLd from '../../components/DocsJsonLd'
import DocsSectionNav from '../../components/DocsSectionNav'
import DocsSidebarDrawer from '../../components/DocsSidebarDrawer'
import { usePageSettled } from '../../lib/pageSettled'
@@ -37,6 +38,7 @@ export default function DocsLayout(
return (
<>
+
diff --git a/src/pages/docs/guide/using-tempo-with-ai.mdx b/src/pages/docs/guide/using-tempo-with-ai.mdx
index 7dd317d0..c705ed1a 100644
--- a/src/pages/docs/guide/using-tempo-with-ai.mdx
+++ b/src/pages/docs/guide/using-tempo-with-ai.mdx
@@ -12,6 +12,8 @@ import { TempoMcpExplorer } from '../../../components/TempoMcpExplorer.tsx'
Tempo publishes documentation, Markdown pages, MCP tools, and agent plugins so AI coding agents can work with Tempo using current project context instead of guesses.
+Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. If your agent needs non-code entity context before writing, start with [What is Tempo?](https://tempo.xyz/learn/what-is-tempo/) and [Best blockchain for stablecoin payments](https://tempo.xyz/learn/best-blockchain-for-stablecoin-payments/).
+
Use this page when you want Claude, Codex, Cursor, Amp, or another MCP-compatible client to search Tempo docs, read source-linked references, and install reusable Tempo workflows.
## Connect to Tempo's MCP server
diff --git a/src/pages/docs/tools.mdx b/src/pages/docs/tools.mdx
index 3e54c0d8..81fbf846 100644
--- a/src/pages/docs/tools.mdx
+++ b/src/pages/docs/tools.mdx
@@ -9,6 +9,8 @@ import { Cards, Card } from 'vocs'
Use this section when you need the implementation surface for Tempo: libraries, command-line tools, managed services, wallet integration, RPC references, and query access to network data.
+Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. For non-code entity context, see [What is Tempo?](https://tempo.xyz/learn/what-is-tempo/) and the [stablecoin payments comparison](https://tempo.xyz/learn/best-blockchain-for-stablecoin-payments/).
+
If you are integrating a product, start with the TypeScript SDKs and hosted services. If you are operating infrastructure or debugging low-level behavior, start with the CLI and RPC reference.
## Developer Surfaces
From c50989ee6cf93e8c2ba81db2c8d6ac77500d2b75 Mon Sep 17 00:00:00 2001
From: Derek <256792747+decofe@users.noreply.github.com>
Date: Sat, 27 Jun 2026 07:33:13 +0000
Subject: [PATCH 2/4] Remove links to split entity pages
---
src/pages/docs/guide/using-tempo-with-ai.mdx | 2 --
src/pages/docs/tools.mdx | 2 --
2 files changed, 4 deletions(-)
diff --git a/src/pages/docs/guide/using-tempo-with-ai.mdx b/src/pages/docs/guide/using-tempo-with-ai.mdx
index c705ed1a..7dd317d0 100644
--- a/src/pages/docs/guide/using-tempo-with-ai.mdx
+++ b/src/pages/docs/guide/using-tempo-with-ai.mdx
@@ -12,8 +12,6 @@ import { TempoMcpExplorer } from '../../../components/TempoMcpExplorer.tsx'
Tempo publishes documentation, Markdown pages, MCP tools, and agent plugins so AI coding agents can work with Tempo using current project context instead of guesses.
-Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. If your agent needs non-code entity context before writing, start with [What is Tempo?](https://tempo.xyz/learn/what-is-tempo/) and [Best blockchain for stablecoin payments](https://tempo.xyz/learn/best-blockchain-for-stablecoin-payments/).
-
Use this page when you want Claude, Codex, Cursor, Amp, or another MCP-compatible client to search Tempo docs, read source-linked references, and install reusable Tempo workflows.
## Connect to Tempo's MCP server
diff --git a/src/pages/docs/tools.mdx b/src/pages/docs/tools.mdx
index 81fbf846..3e54c0d8 100644
--- a/src/pages/docs/tools.mdx
+++ b/src/pages/docs/tools.mdx
@@ -9,8 +9,6 @@ import { Cards, Card } from 'vocs'
Use this section when you need the implementation surface for Tempo: libraries, command-line tools, managed services, wallet integration, RPC references, and query access to network data.
-Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. For non-code entity context, see [What is Tempo?](https://tempo.xyz/learn/what-is-tempo/) and the [stablecoin payments comparison](https://tempo.xyz/learn/best-blockchain-for-stablecoin-payments/).
-
If you are integrating a product, start with the TypeScript SDKs and hosted services. If you are operating infrastructure or debugging low-level behavior, start with the CLI and RPC reference.
## Developer Surfaces
From 5c1ba6f2f1fd9d55a42441e27f7ac7a3b9436adc Mon Sep 17 00:00:00 2001
From: Derek <256792747+decofe@users.noreply.github.com>
Date: Sat, 27 Jun 2026 08:06:30 +0000
Subject: [PATCH 3/4] Handle missing docs path in JSON-LD
---
src/components/DocsJsonLd.tsx | 5 +++--
src/pages/docs/_layout.tsx | 2 +-
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/components/DocsJsonLd.tsx b/src/components/DocsJsonLd.tsx
index 73df5245..e05a701b 100644
--- a/src/components/DocsJsonLd.tsx
+++ b/src/components/DocsJsonLd.tsx
@@ -21,8 +21,9 @@ const tempoKnowsAbout = [
const description =
'Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. Tempo documentation covers stablecoin payments, global payouts, agentic payments, APIs, wallets, and protocol specifications.'
-export default function DocsJsonLd(props: { path: string }) {
- const pathname = props.path.startsWith('/') ? props.path : `/${props.path}`
+export default function DocsJsonLd(props: { path?: string }) {
+ const path = props.path || '/docs'
+ const pathname = path.startsWith('/') ? path : `/${path}`
const url = `https://docs.tempo.xyz${pathname}`
const schema = {
'@context': 'https://schema.org',
diff --git a/src/pages/docs/_layout.tsx b/src/pages/docs/_layout.tsx
index 2126b785..62f6940f 100644
--- a/src/pages/docs/_layout.tsx
+++ b/src/pages/docs/_layout.tsx
@@ -29,7 +29,7 @@ if (typeof window !== 'undefined') {
export default function DocsLayout(
props: PropsWithChildren<{
- path: string
+ path?: string
frontmatter?: { interactive?: boolean; mipd?: boolean }
}>,
) {
From ac3ad19a84b2ebf35cc5ba764dce614ceeea5a84 Mon Sep 17 00:00:00 2001
From: Derek <256792747+decofe@users.noreply.github.com>
Date: Sat, 27 Jun 2026 08:15:37 +0000
Subject: [PATCH 4/4] Split docs JSON-LD from robots PR
---
src/components/DocsJsonLd.tsx | 68 -----------------------------------
src/pages/docs/_layout.tsx | 4 +--
2 files changed, 1 insertion(+), 71 deletions(-)
delete mode 100644 src/components/DocsJsonLd.tsx
diff --git a/src/components/DocsJsonLd.tsx b/src/components/DocsJsonLd.tsx
deleted file mode 100644
index e05a701b..00000000
--- a/src/components/DocsJsonLd.tsx
+++ /dev/null
@@ -1,68 +0,0 @@
-const tempoSameAs = [
- 'https://x.com/tempo',
- 'https://twitter.com/tempo',
- 'https://github.com/tempoxyz',
- 'https://www.linkedin.com/company/tempoxyz',
- 'https://www.crunchbase.com/organization/tempo-87e4',
-]
-
-const tempoKnowsAbout = [
- 'stablecoin payments',
- 'cross-border payments',
- 'global payouts',
- 'agentic payments',
- 'machine payments',
- 'enterprise settlement',
- 'payment blockchains',
- 'Layer 1 blockchain',
- 'stablecoin infrastructure',
-]
-
-const description =
- 'Tempo is a payments-first Layer 1 blockchain incubated by Stripe and Paradigm. Tempo documentation covers stablecoin payments, global payouts, agentic payments, APIs, wallets, and protocol specifications.'
-
-export default function DocsJsonLd(props: { path?: string }) {
- const path = props.path || '/docs'
- const pathname = path.startsWith('/') ? path : `/${path}`
- const url = `https://docs.tempo.xyz${pathname}`
- const schema = {
- '@context': 'https://schema.org',
- '@graph': [
- {
- '@type': 'Organization',
- '@id': 'https://tempo.xyz/#organization',
- name: 'Tempo',
- url: 'https://tempo.xyz',
- description,
- sameAs: tempoSameAs,
- knowsAbout: tempoKnowsAbout,
- },
- {
- '@type': 'WebSite',
- '@id': 'https://docs.tempo.xyz/#website',
- name: 'Tempo Docs',
- url: 'https://docs.tempo.xyz',
- description,
- publisher: { '@id': 'https://tempo.xyz/#organization' },
- },
- {
- '@type': 'TechArticle',
- '@id': url,
- url,
- headline: 'Tempo documentation',
- description,
- isPartOf: { '@id': 'https://docs.tempo.xyz/#website' },
- about: { '@id': 'https://tempo.xyz/#organization' },
- publisher: { '@id': 'https://tempo.xyz/#organization' },
- },
- ],
- }
-
- return (
-
- )
-}
diff --git a/src/pages/docs/_layout.tsx b/src/pages/docs/_layout.tsx
index 62f6940f..c6cac89f 100644
--- a/src/pages/docs/_layout.tsx
+++ b/src/pages/docs/_layout.tsx
@@ -2,7 +2,6 @@
import { lazy, type PropsWithChildren, Suspense } from 'react'
import DocsHeader from '../../components/DocsHeader'
-import DocsJsonLd from '../../components/DocsJsonLd'
import DocsSectionNav from '../../components/DocsSectionNav'
import DocsSidebarDrawer from '../../components/DocsSidebarDrawer'
import { usePageSettled } from '../../lib/pageSettled'
@@ -29,7 +28,7 @@ if (typeof window !== 'undefined') {
export default function DocsLayout(
props: PropsWithChildren<{
- path?: string
+ path: string
frontmatter?: { interactive?: boolean; mipd?: boolean }
}>,
) {
@@ -38,7 +37,6 @@ export default function DocsLayout(
return (
<>
-