starts with a digit. Covers current and archived
+ // versions listed in docusaurus.config.js onlyIncludeVersions.
+ const isVersionedDocsRoot =
+ /^\/docs\/\d[\w.-]*(?:\/index)?\/?$/.test(permalink);
+ const isDocsRoot =
+ permalink === "/docs/" ||
+ permalink === "/docs" ||
+ permalink.endsWith("/docs/index") ||
+ permalink.endsWith("/docs/") ||
+ isVersionedDocsRoot;
+ const isCategoryIndex =
+ frontMatter?.slug === "index" || /\/category\/|\/index\/?$/.test(permalink);
+ const suppressArticleSchema = isDocsRoot || isCategoryIndex;
+
const articleSchema =
- pageUrl && title
+ pageUrl && title && !suppressArticleSchema
? {
"@context": "https://schema.org",
"@type": schemaType,
@@ -187,6 +211,19 @@ export default function DocItem(props) {
{normalizedMetaKeywords && (
)}
+ {/* Per-page og:title and og:description override the
+ docusaurus.config.js site-level defaults, which would
+ otherwise emit the same og:title on every docs page
+ regardless of content. Social card previews now reflect
+ the actual page title. */}
+
+ {description && (
+
+ )}
+
+ {description && (
+
+ )}
{socialImage && }
{socialImage && }
{socialImage && (
@@ -288,7 +325,10 @@ export default function DocItem(props) {
href="https://join.slack.com/t/keploy/shared_invite/zt-357qqm9b5-PbZRVu3Yt2rJIa6ofrwWNg"
aria-label="Slack"
>
-
+
diff --git a/static/robots.txt b/static/robots.txt
index 35de0bb0a9..6310696561 100644
--- a/static/robots.txt
+++ b/static/robots.txt
@@ -1,12 +1,98 @@
-# Block specific bot
+# Keploy docs robots.txt
+# Policy: allow AI search/answer engines, block training-only crawlers,
+# block Bytespider. Search bots drive visibility in ChatGPT, Claude,
+# Perplexity, Copilot, Gemini answers. Training bots feed future model
+# weights and provide nothing back.
+# Reference: Speedscale / Katalon / Testsigma split policy (2026 competitor audit)
+
+# =============================================================================
+# ALLOW — AI search / answer engines
+# Legacy-version disallows are repeated inside this group because a bot that
+# matches a named User-agent group only reads rules from THAT group; it does
+# not fall through to `User-agent: *`. Without these lines, Perplexity/
+# Applebot/OAI-SearchBot/etc. would still crawl /docs/{1,2,3}.0.0/ despite
+# the global block further below.
+# =============================================================================
+
+User-agent: OAI-SearchBot
+User-agent: ChatGPT-User
+User-agent: Claude-SearchBot
+User-agent: Claude-User
+User-agent: PerplexityBot
+User-agent: Perplexity-User
+User-agent: Gemini-Deep-Research
+User-agent: GoogleOther
+User-agent: Applebot
+User-agent: DuckAssistBot
+User-agent: Amazonbot
+Allow: /
+Crawl-delay: 5
+Disallow: /cgi-bin/
+Disallow: /docs/1.0.0/
+Disallow: /docs/2.0.0/
+Disallow: /docs/3.0.0/
+
+# =============================================================================
+# DISALLOW — Training-only crawlers
+# =============================================================================
+
+User-agent: GPTBot
+Disallow: /
+
+User-agent: ClaudeBot
+Disallow: /
+
+User-agent: anthropic-ai
+Disallow: /
+
+User-agent: CCBot
+Disallow: /
+
+User-agent: Google-Extended
+Disallow: /
+
+User-agent: Applebot-Extended
+Disallow: /
+
+User-agent: Meta-ExternalAgent
+Disallow: /
+
+User-agent: FacebookBot
+Disallow: /
+
+User-agent: cohere-ai
+Disallow: /
+
+User-agent: Diffbot
+Disallow: /
+
+User-agent: Omgilibot
+Disallow: /
+
+User-agent: ImagesiftBot
+Disallow: /
+
+# Always-block scraper
User-agent: Bytespider
Disallow: /
-# Default rules — apply to all crawlers including AI bots
+# =============================================================================
+# DEFAULT — Googlebot, Bingbot, and all other crawlers
+# =============================================================================
+
User-agent: *
Allow: /
Crawl-delay: 5
Disallow: /cgi-bin/
+# Block unmaintained legacy doc versions (already set via noindex + canonical,
+# belt-and-braces for crawlers that ignore those signals).
+Disallow: /docs/1.0.0/
+Disallow: /docs/2.0.0/
+Disallow: /docs/3.0.0/
+
+# =============================================================================
# Sitemap
+# =============================================================================
+
Sitemap: https://keploy.io/docs/sitemap.xml