Skip to content

Commit 3f25805

Browse files
feat: comprehensive SEO optimization — meta tags, JSON-LD, OG, Twitter Card, robots.txt, sitemap, hreflang, aria
1 parent b522bc5 commit 3f25805

6 files changed

Lines changed: 204 additions & 12 deletions

File tree

public/og-image.svg

Lines changed: 42 additions & 0 deletions
Loading

public/robots.txt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
User-agent: *
2+
Allow: /
3+
4+
# AI crawlers — allow for citation visibility
5+
User-agent: GPTBot
6+
Allow: /
7+
8+
User-agent: OAI-SearchBot
9+
Allow: /
10+
11+
User-agent: ClaudeBot
12+
Allow: /
13+
14+
User-agent: PerplexityBot
15+
Allow: /
16+
17+
User-agent: Google-Extended
18+
Allow: /
19+
20+
User-agent: GoogleOther
21+
Allow: /
22+
23+
Sitemap: https://mathiaspaulenko.github.io/wave-ecosystem-web/sitemap.xml

public/sitemap.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3+
<url>
4+
<loc>https://mathiaspaulenko.github.io/wave-ecosystem-web/</loc>
5+
<lastmod>2026-07-30</lastmod>
6+
<changefreq>weekly</changefreq>
7+
<priority>1.0</priority>
8+
</url>
9+
</urlset>

src/components/Hero.astro

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@ const base = import.meta.env.BASE_URL;
44

55
<section class="relative min-h-screen overflow-hidden">
66
<!-- Background layers -->
7-
<div class="absolute inset-0 grid-pattern opacity-40"></div>
7+
<div class="absolute inset-0 grid-pattern opacity-40" aria-hidden="true"></div>
88

99
<!-- Gradient mesh orbs -->
10-
<div class="absolute -top-40 -left-40 h-96 w-96 rounded-full bg-wave-500/20 blur-[120px] animate-glow-pulse"></div>
11-
<div class="absolute top-20 right-0 h-80 w-80 rounded-full bg-foam-400/15 blur-[100px] animate-glow-pulse" style="animation-delay: 2s;"></div>
12-
<div class="absolute bottom-0 left-1/3 h-72 w-72 rounded-full bg-coral-500/10 blur-[100px] animate-glow-pulse" style="animation-delay: 4s;"></div>
10+
<div class="absolute -top-40 -left-40 h-96 w-96 rounded-full bg-wave-500/20 blur-[120px] animate-glow-pulse" aria-hidden="true"></div>
11+
<div class="absolute top-20 right-0 h-80 w-80 rounded-full bg-foam-400/15 blur-[100px] animate-glow-pulse" style="animation-delay: 2s;" aria-hidden="true"></div>
12+
<div class="absolute bottom-0 left-1/3 h-72 w-72 rounded-full bg-coral-500/10 blur-[100px] animate-glow-pulse" style="animation-delay: 4s;" aria-hidden="true"></div>
1313

1414
<!-- Animated wave SVGs -->
15-
<div class="absolute bottom-0 left-0 right-0 pointer-events-none">
16-
<svg viewBox="0 0 1440 320" class="w-full h-auto" preserveAspectRatio="none" fill="none">
15+
<div class="absolute bottom-0 left-0 right-0 pointer-events-none" aria-hidden="true">
16+
<svg viewBox="0 0 1440 320" class="w-full h-auto" preserveAspectRatio="none" fill="none" aria-hidden="true">
1717
<path
1818
d="M0,160 C240,220 480,100 720,160 C960,220 1200,100 1440,160 L1440,320 L0,320 Z"
1919
fill="rgba(34, 211, 238, 0.04)"

src/components/Nav.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ const links = [
1515
<div class="flex h-16 items-center justify-between">
1616
<!-- Logo -->
1717
<a href={`${base}`} class="flex items-center gap-2.5 group">
18-
<svg class="h-8 w-8 transition-transform group-hover:scale-110" viewBox="0 0 256 256" fill="none">
18+
<svg class="h-8 w-8 transition-transform group-hover:scale-110" viewBox="0 0 256 256" fill="none" role="img" aria-label="Wave Ecosystem logo">
1919
<defs>
2020
<linearGradient id="nav-logo-bg" x1="0%" y1="0%" x2="100%" y2="100%">
2121
<stop offset="0%" stop-color="#22d3ee"/>

src/layouts/Layout.astro

Lines changed: 123 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,97 @@ interface Props {
77
}
88
99
const {
10-
title = 'Wave Ecosystem — Browser Automation for Python',
11-
description = 'A unified ecosystem of Python tools for browser automation: CDP, WebDriver BiDi, testing framework, MCP for LLMs and CLI.',
10+
title = 'Wave Ecosystem — Python Browser Automation | CDP, BiDi, CLI & MCP',
11+
description = 'Unified Python browser automation ecosystem: cdpwave (60 CDP domains), bidiwave (W3C WebDriver BiDi), wavexis CLI (130+ commands) and wavexis-mcp (220 MCP tools for LLMs). No Node.js, no Chromium downloads.',
1212
} = Astro.props;
1313
1414
const base = import.meta.env.BASE_URL;
15+
const siteUrl = 'https://mathiaspaulenko.github.io/wave-ecosystem-web';
16+
const canonicalURL = new URL(Astro.url.pathname, siteUrl).href;
17+
const ogImage = `${siteUrl}/og-image.svg`;
18+
19+
const jsonLd = [
20+
{
21+
'@context': 'https://schema.org',
22+
'@type': 'Organization',
23+
name: 'Wave Ecosystem',
24+
url: siteUrl,
25+
logo: `${siteUrl}/favicon.svg`,
26+
sameAs: [
27+
'https://github.com/MathiasPaulenko/cdpwave',
28+
'https://github.com/MathiasPaulenko/bidiwave',
29+
'https://github.com/MathiasPaulenko/wavexis',
30+
'https://github.com/MathiasPaulenko/wavexis-mcp',
31+
'https://github.com/MathiasPaulenko/ai-toolkit',
32+
],
33+
},
34+
{
35+
'@context': 'https://schema.org',
36+
'@type': 'SoftwareApplication',
37+
name: 'Wave Ecosystem',
38+
applicationCategory: 'DeveloperApplication',
39+
operatingSystem: 'Cross-platform',
40+
description: 'Unified Python browser automation ecosystem with CDP, WebDriver BiDi, CLI and MCP tools for LLMs.',
41+
url: siteUrl,
42+
offers: {
43+
'@type': 'Offer',
44+
price: '0',
45+
priceCurrency: 'USD',
46+
},
47+
featureList: [
48+
'cdpwave — 60 CDP domains, 689 typed methods, async-first',
49+
'bidiwave — W3C WebDriver BiDi, Chrome + Firefox + Edge',
50+
'wavexis — 130+ CLI commands, REPL, HTTP serve mode, stealth',
51+
'wavexis-mcp — 220 MCP tools for LLMs, 13 capability tiers',
52+
],
53+
},
54+
{
55+
'@context': 'https://schema.org',
56+
'@type': 'FAQPage',
57+
mainEntity: [
58+
{
59+
'@type': 'Question',
60+
name: 'What is the Wave Ecosystem?',
61+
acceptedAnswer: {
62+
'@type': 'Answer',
63+
text: 'The Wave Ecosystem is a suite of Python tools for browser automation: cdpwave (Chrome DevTools Protocol), bidiwave (W3C WebDriver BiDi), wavexis (CLI) and wavexis-mcp (MCP server for LLMs). No Node.js or Chromium downloads required.',
64+
},
65+
},
66+
{
67+
'@type': 'Question',
68+
name: 'Does Wave Ecosystem require Node.js?',
69+
acceptedAnswer: {
70+
'@type': 'Answer',
71+
text: 'No. All Wave Ecosystem tools are pure Python. No Node.js, no ChromeDriver, no Chromium downloads. Just pip install and use your existing browser.',
72+
},
73+
},
74+
{
75+
'@type': 'Question',
76+
name: 'What browsers are supported?',
77+
acceptedAnswer: {
78+
'@type': 'Answer',
79+
text: 'cdpwave supports Chrome, Edge and Brave via CDP. bidiwave supports Chrome, Firefox and Edge via W3C WebDriver BiDi. wavexis-mcp supports Chrome and Firefox.',
80+
},
81+
},
82+
{
83+
'@type': 'Question',
84+
name: 'What is wavexis-mcp?',
85+
acceptedAnswer: {
86+
'@type': 'Answer',
87+
text: 'wavexis-mcp is an MCP server that exposes 220 browser automation tools to LLMs in 13 capability tiers. It enables AI agents to navigate websites, fill forms, click elements and extract data autonomously.',
88+
},
89+
},
90+
{
91+
'@type': 'Question',
92+
name: 'Are there AI resources for Claude, Cursor or Windsurf?',
93+
acceptedAnswer: {
94+
'@type': 'Answer',
95+
text: 'Yes. The ai-toolkit repository includes 13 skills, 3 agents, 1 coding ruleset and 3 workflows pre-built for Claude, Cursor and Windsurf to automate browser testing, scraping, debugging and CI/CD tasks.',
96+
},
97+
},
98+
],
99+
},
100+
];
15101
---
16102

17103
<!doctype html>
@@ -22,10 +108,37 @@ const base = import.meta.env.BASE_URL;
22108
<meta name="generator" content={Astro.generator} />
23109
<link rel="icon" type="image/svg+xml" href={`${base}favicon.svg`} />
24110

111+
<!-- Primary SEO -->
112+
<title>{title}</title>
113+
<meta name="description" content={description} />
114+
<meta name="keywords" content="python browser automation, cdp, chrome devtools protocol, webdriver bidi, w3c, mcp server, llm tools, web scraping, browser testing, cdpwave, bidiwave, wavexis, wavexis-mcp, ai toolkit" />
115+
<meta name="robots" content="index, follow, max-snippet:200, max-image-preview:large, max-video-preview:-1" />
116+
<meta name="author" content="Mathias Paulenko" />
117+
<meta name="theme-color" content="#050d1c" />
118+
<link rel="canonical" href={canonicalURL} />
119+
120+
<!-- Hreflang -->
121+
<link rel="alternate" hreflang="en" href={canonicalURL} />
122+
<link rel="alternate" hreflang="es" href={canonicalURL} />
123+
<link rel="alternate" hreflang="x-default" href={canonicalURL} />
124+
25125
<!-- Open Graph -->
26126
<meta property="og:title" content={title} />
27127
<meta property="og:description" content={description} />
28128
<meta property="og:type" content="website" />
129+
<meta property="og:url" content={canonicalURL} />
130+
<meta property="og:site_name" content="Wave Ecosystem" />
131+
<meta property="og:image" content={ogImage} />
132+
<meta property="og:image:alt" content="Wave Ecosystem — Python Browser Automation" />
133+
<meta property="og:locale" content="en_US" />
134+
<meta property="og:locale:alternate" content="es_ES" />
135+
136+
<!-- Twitter Card -->
137+
<meta name="twitter:card" content="summary_large_image" />
138+
<meta name="twitter:title" content={title} />
139+
<meta name="twitter:description" content={description} />
140+
<meta name="twitter:image" content={ogImage} />
141+
<meta name="twitter:image:alt" content="Wave Ecosystem — Python Browser Automation" />
29142

30143
<!-- Fonts -->
31144
<link rel="preconnect" href="https://fonts.googleapis.com" />
@@ -35,12 +148,17 @@ const base = import.meta.env.BASE_URL;
35148
rel="stylesheet"
36149
/>
37150

38-
<title>{title}</title>
39-
<meta name="description" content={description} />
151+
<!-- Structured data -->
152+
{jsonLd.map((data) => (
153+
<script type="application/ld+json" set:html={JSON.stringify(data)} />
154+
))}
40155
</head>
41156
<body class="bg-abyss-950 text-slate-200 antialiased">
42-
<div class="noise-overlay"></div>
157+
<div class="noise-overlay" aria-hidden="true"></div>
43158
<slot />
159+
<noscript>
160+
<p style="position:absolute;left:-9999px;">Wave Ecosystem — Python browser automation tools: cdpwave, bidiwave, wavexis and wavexis-mcp. CDP, WebDriver BiDi, CLI and MCP for LLMs. No Node.js required.</p>
161+
</noscript>
44162
</body>
45163
</html>
46164

0 commit comments

Comments
 (0)