From 56d18b8f28337a8bc00af88419e0b81c02d16dce Mon Sep 17 00:00:00 2001 From: Nicolai Bohn Date: Mon, 23 Mar 2026 18:33:10 +0000 Subject: [PATCH 1/2] feat(docs): improve SEO across docs site - Fix robots meta to respect ROBOTS_NOINDEX env var on all MDX routes - Fix sitemap lastModified to use real file mtimes instead of new Date() - Support page-level keywords in frontmatter merged with sitewide defaults - Add explicit title/description/keywords frontmatter to top 10 pages: docs/index, getting-started, connecting-application, concepts, tracing, endpoints, test-execution, guides/index, sdk/installation, sdk/client --- docs/content/docs/concepts.mdx | 6 ++++++ docs/content/docs/endpoints/index.mdx | 6 ++++++ .../connecting-application.mdx | 6 ++++++ docs/content/docs/getting-started/index.mdx | 6 ++++++ docs/content/docs/index.mdx | 6 ++++++ docs/content/docs/test-execution/index.mdx | 6 ++++++ docs/content/docs/tracing/index.mdx | 6 ++++++ docs/content/guides/index.mdx | 6 ++++++ docs/content/sdk/client.mdx | 6 ++++++ docs/content/sdk/installation.mdx | 6 ++++++ docs/src/app/sitemap.js | 9 +++++++- docs/src/lib/metadata.js | 21 +++++++++++++------ 12 files changed, 83 insertions(+), 7 deletions(-) diff --git a/docs/content/docs/concepts.mdx b/docs/content/docs/concepts.mdx index 6367612930..16a26ed702 100644 --- a/docs/content/docs/concepts.mdx +++ b/docs/content/docs/concepts.mdx @@ -1,3 +1,9 @@ +--- +title: Core Concepts – Rhesis +description: Understand the core concepts behind Rhesis — test sets, behaviors, metrics, endpoints, and the end-to-end AI testing workflow. +keywords: [AI testing concepts, test sets, LLM behaviors, AI metrics, test workflow] +--- + # Core Concepts This guide walks you through the core concepts of Rhesis. diff --git a/docs/content/docs/endpoints/index.mdx b/docs/content/docs/endpoints/index.mdx index 277c6207e4..36634bf47e 100644 --- a/docs/content/docs/endpoints/index.mdx +++ b/docs/content/docs/endpoints/index.mdx @@ -1,3 +1,9 @@ +--- +title: Endpoints – Rhesis +description: Configure and manage API endpoints that Rhesis tests execute against. Connect single-turn and multi-turn LLM applications for automated evaluation. +keywords: [AI endpoint configuration, LLM API endpoint, test endpoint, AI application testing] +--- + import { CodeBlock } from "@/components/CodeBlock"; # Endpoints diff --git a/docs/content/docs/getting-started/connecting-application.mdx b/docs/content/docs/getting-started/connecting-application.mdx index 52246ba03d..c6cbbaabb6 100644 --- a/docs/content/docs/getting-started/connecting-application.mdx +++ b/docs/content/docs/getting-started/connecting-application.mdx @@ -1,3 +1,9 @@ +--- +title: Connect Your Application – Rhesis +description: Connect your Generative AI application to Rhesis via REST endpoints or the Python SDK. Rhesis orchestrates test prompts and records responses for evaluation. +keywords: [connect AI application, Rhesis integration, LLM API integration, Python SDK integration] +--- + import { CodeBlock } from '@/components/CodeBlock' # Connect Application diff --git a/docs/content/docs/getting-started/index.mdx b/docs/content/docs/getting-started/index.mdx index f34d848384..5cc1cbd9cf 100644 --- a/docs/content/docs/getting-started/index.mdx +++ b/docs/content/docs/getting-started/index.mdx @@ -1,3 +1,9 @@ +--- +title: Getting Started with Rhesis +description: Set up your Rhesis environment, connect your Gen AI application, and run your first automated evaluations in minutes. +keywords: [getting started, AI testing setup, LLM evaluation quickstart, connect AI application] +--- + import { NextStepCard, NextStepCardGrid } from '@/components/NextStepCard' # Getting Started diff --git a/docs/content/docs/index.mdx b/docs/content/docs/index.mdx index 6ab2036d80..bef0d3207d 100644 --- a/docs/content/docs/index.mdx +++ b/docs/content/docs/index.mdx @@ -1,3 +1,9 @@ +--- +title: Rhesis Documentation +description: The AI testing platform for Gen AI teams. Connect your LLM apps, generate test sets, simulate adversarial conversations, and trace every failure to its root cause. +keywords: [AI testing platform, LLM testing, Gen AI evaluation, AI quality assurance] +--- + import { ButtonGroup } from '@/components/ButtonGroup' import { CommunitySupport } from '@/components/CommunitySupport' diff --git a/docs/content/docs/test-execution/index.mdx b/docs/content/docs/test-execution/index.mdx index a62d73d6cc..14d81c0ad1 100644 --- a/docs/content/docs/test-execution/index.mdx +++ b/docs/content/docs/test-execution/index.mdx @@ -1,3 +1,9 @@ +--- +title: Test Execution – Rhesis +description: Execute test sets against your AI endpoints to evaluate model performance, safety, and reliability. Configure execution options and analyse results. +keywords: [test execution, AI test runner, LLM evaluation, model safety testing, automated AI testing] +--- + import { YouTubeEmbed } from "@/components/YouTubeEmbed"; # Test Execution diff --git a/docs/content/docs/tracing/index.mdx b/docs/content/docs/tracing/index.mdx index d9f105a43e..e61c53863b 100644 --- a/docs/content/docs/tracing/index.mdx +++ b/docs/content/docs/tracing/index.mdx @@ -1,3 +1,9 @@ +--- +title: Tracing – Rhesis +description: OpenTelemetry-based observability for AI applications. Trace LLM calls, agent steps, and tool use to debug failures and understand model behaviour. +keywords: [AI tracing, OpenTelemetry LLM, AI observability, LLM tracing, agent tracing] +--- + import { CodeBlock } from "@/components/CodeBlock"; # Tracing diff --git a/docs/content/guides/index.mdx b/docs/content/guides/index.mdx index 7d027a6412..9fdc436e72 100644 --- a/docs/content/guides/index.mdx +++ b/docs/content/guides/index.mdx @@ -1,3 +1,9 @@ +--- +title: Guides – Rhesis +description: Step-by-step guides for testing AI applications with Rhesis — from a 10-minute quickstart to building custom metrics and CI/CD integration. +keywords: [AI testing guides, LLM testing tutorial, custom metrics, CI/CD AI testing] +--- + import { NextStepCard, NextStepCardGrid } from '@/components/NextStepCard' # Guides diff --git a/docs/content/sdk/client.mdx b/docs/content/sdk/client.mdx index 51d896c91d..828b78a935 100644 --- a/docs/content/sdk/client.mdx +++ b/docs/content/sdk/client.mdx @@ -1,3 +1,9 @@ +--- +title: RhesisClient – Rhesis Python SDK +description: The RhesisClient is the central entry point for the Rhesis SDK. Initialize telemetry, manage connectors for remote testing, and access the Rhesis API. +keywords: [RhesisClient, Rhesis Python SDK, SDK API client, AI testing client] +--- + import { CodeBlock } from "@/components/CodeBlock"; # RhesisClient diff --git a/docs/content/sdk/installation.mdx b/docs/content/sdk/installation.mdx index 1bc5f13c00..94f25f550d 100644 --- a/docs/content/sdk/installation.mdx +++ b/docs/content/sdk/installation.mdx @@ -1,3 +1,9 @@ +--- +title: SDK Installation & Setup – Rhesis +description: Install the Rhesis Python SDK, configure authentication, and learn the core concepts — models, synthesizers, and metrics — to start testing your AI applications. +keywords: [Rhesis SDK, Python SDK install, AI testing SDK, SDK setup, pip install rhesis] +--- + import { CodeBlock } from '@/components/CodeBlock' # Installation & Setup diff --git a/docs/src/app/sitemap.js b/docs/src/app/sitemap.js index 79369e650f..9582c67bfc 100644 --- a/docs/src/app/sitemap.js +++ b/docs/src/app/sitemap.js @@ -160,9 +160,16 @@ export default async function sitemap() { const url = urlPath ? `${baseUrl}/${urlPath}` : baseUrl if (urlSet.has(url)) continue urlSet.add(url) + const fullPath = path.join(contentDir, filePath) + let lastModified + try { + lastModified = fs.statSync(fullPath).mtime + } catch { + lastModified = new Date() + } sitemapEntries.push({ url, - lastModified: new Date(), + lastModified, changeFrequency: 'weekly', priority: getPriority(urlPath), }) diff --git a/docs/src/lib/metadata.js b/docs/src/lib/metadata.js index 23cf144738..6dbeddee39 100644 --- a/docs/src/lib/metadata.js +++ b/docs/src/lib/metadata.js @@ -87,13 +87,22 @@ export function generatePageMetadata( description = config.siteDescription } + // Merge page-level keywords (from frontmatter) with sitewide defaults + const pageKeywords = baseMetadata?.keywords + const keywords = pageKeywords + ? [...new Set([...(Array.isArray(pageKeywords) ? pageKeywords : [pageKeywords]), ...config.keywords])] + : config.keywords + const canonicalUrl = getCanonicalUrl(urlPath, config) const imageUrl = getOpenGraphImage(urlPath, config.defaultImage) + // Respect ROBOTS_NOINDEX env var (e.g. staging deployments) + const noIndex = process.env.ROBOTS_NOINDEX === 'true' + return { title, description, - keywords: config.keywords, + keywords, authors: [{ name: config.author.name, url: config.author.url }], creator: config.author.name, publisher: config.organization.name, @@ -131,13 +140,13 @@ export function generatePageMetadata( images: [imageUrl], }, - // Robots + // Robots — respect ROBOTS_NOINDEX for staging/preview environments robots: { - index: true, - follow: true, + index: !noIndex, + follow: !noIndex, googleBot: { - index: true, - follow: true, + index: !noIndex, + follow: !noIndex, 'max-video-preview': -1, 'max-image-preview': 'large', 'max-snippet': -1, From 8687abe7fd072fe5eed006cc0fab34da51af1070 Mon Sep 17 00:00:00 2001 From: Nicolai Bohn Date: Mon, 23 Mar 2026 19:18:26 +0000 Subject: [PATCH 2/2] style(docs): fix prettier formatting in metadata.js --- docs/src/lib/metadata.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/src/lib/metadata.js b/docs/src/lib/metadata.js index 6dbeddee39..3926bea655 100644 --- a/docs/src/lib/metadata.js +++ b/docs/src/lib/metadata.js @@ -90,7 +90,12 @@ export function generatePageMetadata( // Merge page-level keywords (from frontmatter) with sitewide defaults const pageKeywords = baseMetadata?.keywords const keywords = pageKeywords - ? [...new Set([...(Array.isArray(pageKeywords) ? pageKeywords : [pageKeywords]), ...config.keywords])] + ? [ + ...new Set([ + ...(Array.isArray(pageKeywords) ? pageKeywords : [pageKeywords]), + ...config.keywords, + ]), + ] : config.keywords const canonicalUrl = getCanonicalUrl(urlPath, config)