feat: comprehensive SEO — meta tags, OG, Twitter cards, JSON-LD, sitemap, robots, llms.txt

Adds metadataBase, full OpenGraph + Twitter card tags, keywords,
JSON-LD structured data (SoftwareApplication + Organization),
sitemap.ts, robots.ts with AI crawler directives, and llms.txt
for AI agent discoverability.
This commit is contained in:
Vectry
2026-02-10 02:21:16 +00:00
parent d91fdfc81a
commit 145b1669e7
5 changed files with 175 additions and 2 deletions

View File

@@ -5,8 +5,63 @@ import "./globals.css";
const inter = Inter({ subsets: ["latin"] });
export const metadata: Metadata = {
title: "AgentLens",
description: "Agent observability that traces decisions, not just API calls",
metadataBase: new URL("https://agentlens.vectry.tech"),
title: {
default: "AgentLens — Agent Observability Platform",
template: "%s | AgentLens",
},
description:
"Open-source agent observability that traces decisions, not just API calls. Monitor AI agent reasoning, tool selection, and routing in real-time.",
keywords: [
"agent observability",
"AI monitoring",
"LLM tracing",
"agent decisions",
"AI debugging",
"tool selection tracing",
"multi-agent observability",
"open source",
],
authors: [{ name: "Vectry" }],
creator: "Vectry",
openGraph: {
type: "website",
locale: "en_US",
url: "https://agentlens.vectry.tech",
siteName: "AgentLens",
title: "AgentLens — Agent Observability Platform",
description:
"Open-source agent observability that traces decisions, not just API calls. Monitor AI agent reasoning, tool selection, and routing in real-time.",
images: [
{
url: "/og-image.png",
width: 1200,
height: 630,
alt: "AgentLens — Agent Observability Platform",
},
],
},
twitter: {
card: "summary_large_image",
title: "AgentLens — Agent Observability Platform",
description:
"Open-source agent observability that traces decisions, not just API calls. Monitor AI agent reasoning, tool selection, and routing in real-time.",
images: ["/og-image.png"],
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-video-preview": -1,
"max-image-preview": "large",
"max-snippet": -1,
},
},
alternates: {
canonical: "https://agentlens.vectry.tech",
},
};
export default function RootLayout({

View File

@@ -20,6 +20,43 @@ import {
export default function HomePage() {
return (
<div className="min-h-screen bg-neutral-950">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "AgentLens",
applicationCategory: "DeveloperApplication",
operatingSystem: "Web",
url: "https://agentlens.vectry.tech",
description:
"Open-source agent observability platform that traces AI agent decisions, not just API calls.",
offers: { "@type": "Offer", price: "0", priceCurrency: "USD" },
featureList: [
"Agent Decision Tracing",
"Real-time Dashboard",
"OpenAI Integration",
"LangChain Integration",
"Self-hosting Support",
"Python SDK",
],
}),
}}
/>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "Organization",
name: "Vectry",
url: "https://vectry.tech",
logo: "https://vectry.tech/static/img/logo-icon.png",
sameAs: ["https://gitea.repi.fun/repi/agentlens"],
}),
}}
/>
{/* Hero Section */}
<section className="relative overflow-hidden border-b border-neutral-800/50">
<div className="absolute inset-0 bg-gradient-to-b from-emerald-500/5 via-transparent to-transparent" />

View File

@@ -0,0 +1,22 @@
import { MetadataRoute } from "next";
export default function robots(): MetadataRoute.Robots {
return {
rules: [
{ userAgent: "GPTBot", allow: "/" },
{ userAgent: "ChatGPT-User", allow: "/" },
{ userAgent: "ClaudeBot", allow: "/" },
{ userAgent: "PerplexityBot", allow: "/" },
{ userAgent: "Applebot-Extended", allow: "/" },
{ userAgent: "CCBot", disallow: "/" },
{ userAgent: "Google-Extended", disallow: "/" },
{ userAgent: "Bytespider", disallow: "/" },
{
userAgent: "*",
allow: "/",
disallow: ["/api/", "/dashboard/"],
},
],
sitemap: "https://agentlens.vectry.tech/sitemap.xml",
};
}

View File

@@ -0,0 +1,9 @@
import { MetadataRoute } from "next";
export default function sitemap(): MetadataRoute.Sitemap {
const baseUrl = "https://agentlens.vectry.tech";
return [
{ url: baseUrl, lastModified: new Date(), changeFrequency: "weekly", priority: 1.0 },
{ url: `${baseUrl}/dashboard`, lastModified: new Date(), changeFrequency: "daily", priority: 0.8 },
];
}