tribunal-kit 4.5.0 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/README.md +4 -4
- package/.agent/ARCHITECTURE.md +279 -277
- package/.agent/GEMINI.md +127 -121
- package/.agent/agents/accessibility-reviewer.md +187 -187
- package/.agent/agents/ai-code-reviewer.md +199 -199
- package/.agent/agents/api-architect.md +71 -66
- package/.agent/agents/backend-specialist.md +219 -215
- package/.agent/agents/cloud-engineer.md +98 -0
- package/.agent/agents/code-archaeologist.md +168 -161
- package/.agent/agents/database-architect.md +184 -184
- package/.agent/agents/db-latency-auditor.md +213 -216
- package/.agent/agents/debugger.md +198 -191
- package/.agent/agents/dependency-reviewer.md +106 -103
- package/.agent/agents/devops-engineer.md +218 -218
- package/.agent/agents/documentation-writer.md +209 -201
- package/.agent/agents/explorer-agent.md +167 -160
- package/.agent/agents/frontend-reviewer.md +162 -160
- package/.agent/agents/frontend-specialist.md +257 -248
- package/.agent/agents/game-developer.md +48 -48
- package/.agent/agents/logic-reviewer.md +118 -116
- package/.agent/agents/mobile-developer.md +197 -200
- package/.agent/agents/mobile-reviewer.md +159 -162
- package/.agent/agents/orchestrator.md +187 -181
- package/.agent/agents/penetration-tester.md +160 -157
- package/.agent/agents/performance-optimizer.md +183 -183
- package/.agent/agents/performance-reviewer.md +178 -178
- package/.agent/agents/precedence-reviewer.md +251 -250
- package/.agent/agents/product-manager.md +149 -142
- package/.agent/agents/product-owner.md +81 -80
- package/.agent/agents/project-planner.md +152 -142
- package/.agent/agents/qa-automation-engineer.md +216 -225
- package/.agent/agents/resilience-reviewer.md +88 -88
- package/.agent/agents/schema-reviewer.md +67 -67
- package/.agent/agents/security-auditor.md +180 -174
- package/.agent/agents/seo-specialist.md +188 -193
- package/.agent/agents/sql-reviewer.md +159 -161
- package/.agent/agents/supervisor-agent.md +173 -184
- package/.agent/agents/swarm-worker-contracts.md +170 -166
- package/.agent/agents/swarm-worker-registry.md +92 -92
- package/.agent/agents/system-architect.md +85 -0
- package/.agent/agents/test-coverage-reviewer.md +158 -160
- package/.agent/agents/test-engineer.md +118 -118
- package/.agent/agents/throughput-optimizer.md +291 -299
- package/.agent/agents/type-safety-reviewer.md +182 -175
- package/.agent/agents/ui-ux-auditor.md +300 -292
- package/.agent/agents/vitals-reviewer.md +223 -223
- package/.agent/mcp_config.json +37 -40
- package/.agent/patterns/generator.md +11 -9
- package/.agent/patterns/inversion.md +14 -12
- package/.agent/patterns/pipeline.md +11 -9
- package/.agent/patterns/reviewer.md +15 -13
- package/.agent/patterns/tool-wrapper.md +11 -9
- package/.agent/routing_index.json +654 -0
- package/.agent/rules/GEMINI.md +358 -352
- package/.agent/scripts/compile_router.py +112 -0
- package/.agent/scripts/migrate_skills_frontmatter.py +64 -0
- package/.agent/scripts/strengthen_skills.js +1 -1
- package/.agent/skills/advanced-rag-pipelines/SKILL.md +56 -0
- package/.agent/skills/agent-organizer/SKILL.md +156 -150
- package/.agent/skills/agentic-patterns/SKILL.md +313 -315
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +190 -184
- package/.agent/skills/api-patterns/SKILL.md +253 -247
- package/.agent/skills/api-security-auditor/SKILL.md +195 -193
- package/.agent/skills/app-builder/SKILL.md +573 -572
- package/.agent/skills/app-builder/templates/SKILL.md +108 -115
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -76
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -92
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -88
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -90
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +126 -122
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +127 -122
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +172 -169
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +139 -134
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -83
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +122 -119
- package/.agent/skills/appflow-wireframe/SKILL.md +146 -145
- package/.agent/skills/architecture/SKILL.md +226 -219
- package/.agent/skills/authentication-best-practices/SKILL.md +197 -189
- package/.agent/skills/backend-security-expert/SKILL.md +16 -2
- package/.agent/skills/bash-linux/SKILL.md +179 -179
- package/.agent/skills/behavioral-modes/SKILL.md +239 -223
- package/.agent/skills/brainstorming/SKILL.md +498 -486
- package/.agent/skills/browser-native-ai/SKILL.md +57 -4
- package/.agent/skills/building-native-ui/SKILL.md +202 -202
- package/.agent/skills/cicd-pro/SKILL.md +442 -0
- package/.agent/skills/clean-code/SKILL.md +400 -381
- package/.agent/skills/cloud-architect/SKILL.md +439 -0
- package/.agent/skills/code-review-checklist/SKILL.md +203 -194
- package/.agent/skills/config-validator/SKILL.md +165 -165
- package/.agent/skills/containerization-pro/SKILL.md +452 -0
- package/.agent/skills/csharp-developer/SKILL.md +518 -518
- package/.agent/skills/data-validation-schemas/SKILL.md +333 -328
- package/.agent/skills/database-design/SKILL.md +247 -240
- package/.agent/skills/deployment-procedures/SKILL.md +172 -169
- package/.agent/skills/devops-engineer/SKILL.md +345 -345
- package/.agent/skills/devops-incident-responder/SKILL.md +143 -137
- package/.agent/skills/doc.md +209 -177
- package/.agent/skills/documentation-templates/SKILL.md +291 -279
- package/.agent/skills/edge-computing/SKILL.md +183 -181
- package/.agent/skills/error-resilience/SKILL.md +411 -428
- package/.agent/skills/extract-design-system/SKILL.md +160 -158
- package/.agent/skills/framer-motion-expert/SKILL.md +253 -244
- package/.agent/skills/frontend-design/SKILL.md +208 -201
- package/.agent/skills/frontend-security-expert/SKILL.md +16 -3
- package/.agent/skills/game-design-expert/SKILL.md +132 -129
- package/.agent/skills/game-engineering-expert/SKILL.md +148 -146
- package/.agent/skills/generative-ui-expert/SKILL.md +57 -1
- package/.agent/skills/geo-fundamentals/SKILL.md +148 -147
- package/.agent/skills/git-pro/SKILL.md +435 -0
- package/.agent/skills/github-operations/SKILL.md +335 -329
- package/.agent/skills/gsap-core/SKILL.md +319 -308
- package/.agent/skills/gsap-frameworks/SKILL.md +213 -207
- package/.agent/skills/gsap-performance/SKILL.md +139 -133
- package/.agent/skills/gsap-plugins/SKILL.md +486 -480
- package/.agent/skills/gsap-react/SKILL.md +202 -189
- package/.agent/skills/gsap-scrolltrigger/SKILL.md +357 -350
- package/.agent/skills/gsap-timeline/SKILL.md +165 -161
- package/.agent/skills/gsap-utils/SKILL.md +344 -338
- package/.agent/skills/harness-protocol/SKILL.md +48 -0
- package/.agent/skills/i18n-localization/SKILL.md +174 -163
- package/.agent/skills/intelligent-routing/SKILL.md +202 -246
- package/.agent/skills/knowledge-graph/SKILL.md +60 -52
- package/.agent/skills/lint-and-validate/SKILL.md +261 -261
- package/.agent/skills/llm-engineering/SKILL.md +400 -394
- package/.agent/skills/local-first/SKILL.md +178 -178
- package/.agent/skills/mcp-builder/SKILL.md +143 -142
- package/.agent/skills/mobile-design/SKILL.md +272 -263
- package/.agent/skills/monorepo-management/SKILL.md +335 -334
- package/.agent/skills/motion-engineering/SKILL.md +266 -234
- package/.agent/skills/nextjs-react-expert/SKILL.md +236 -234
- package/.agent/skills/nodejs-best-practices/SKILL.md +547 -548
- package/.agent/skills/observability/SKILL.md +343 -343
- package/.agent/skills/parallel-agents/SKILL.md +143 -146
- package/.agent/skills/performance-profiling/SKILL.md +259 -267
- package/.agent/skills/plan-writing/SKILL.md +150 -142
- package/.agent/skills/platform-engineer/SKILL.md +148 -147
- package/.agent/skills/playwright-best-practices/SKILL.md +188 -187
- package/.agent/skills/powershell-windows/SKILL.md +162 -162
- package/.agent/skills/project-idioms/SKILL.md +137 -137
- package/.agent/skills/python-patterns/SKILL.md +260 -259
- package/.agent/skills/python-pro/SKILL.md +324 -323
- package/.agent/skills/react-specialist/SKILL.md +305 -277
- package/.agent/skills/readme-builder/SKILL.md +310 -300
- package/.agent/skills/realtime-patterns/SKILL.md +323 -319
- package/.agent/skills/red-team-tactics/SKILL.md +231 -218
- package/.agent/skills/rust-pro/SKILL.md +671 -673
- package/.agent/skills/seo-fundamentals/SKILL.md +179 -179
- package/.agent/skills/server-management/SKILL.md +218 -214
- package/.agent/skills/shadcn-ui-expert/SKILL.md +231 -231
- package/.agent/skills/skill-creator/SKILL.md +87 -86
- package/.agent/skills/sql-pro/SKILL.md +629 -629
- package/.agent/skills/supabase-postgres-best-practices/SKILL.md +97 -97
- package/.agent/skills/swiftui-expert/SKILL.md +204 -201
- package/.agent/skills/system-design-pro/SKILL.md +345 -0
- package/.agent/skills/systematic-debugging/SKILL.md +153 -142
- package/.agent/skills/tailwind-patterns/SKILL.md +610 -566
- package/.agent/skills/tdd-workflow/SKILL.md +169 -161
- package/.agent/skills/test-result-analyzer/SKILL.md +313 -309
- package/.agent/skills/testing-patterns/SKILL.md +566 -579
- package/.agent/skills/trend-researcher/SKILL.md +243 -237
- package/.agent/skills/typescript-advanced/SKILL.md +336 -335
- package/.agent/skills/ui-ux-pro-max/SKILL.md +590 -562
- package/.agent/skills/ui-ux-researcher/SKILL.md +244 -244
- package/.agent/skills/vue-expert/SKILL.md +294 -275
- package/.agent/skills/vulnerability-scanner/SKILL.md +416 -404
- package/.agent/skills/web-accessibility-auditor/SKILL.md +219 -218
- package/.agent/skills/web-design-guidelines/SKILL.md +192 -186
- package/.agent/skills/webapp-testing/SKILL.md +167 -169
- package/.agent/skills/webgpu-performance/SKILL.md +56 -2
- package/.agent/skills/whimsy-injector/SKILL.md +346 -325
- package/.agent/skills/workflow-optimizer/SKILL.md +231 -229
- package/.agent/workflows/acf.md +141 -0
- package/.agent/workflows/api-tester.md +176 -151
- package/.agent/workflows/audit.md +150 -127
- package/.agent/workflows/brainstorm.md +134 -110
- package/.agent/workflows/changelog.md +140 -112
- package/.agent/workflows/create.md +168 -124
- package/.agent/workflows/debug.md +190 -165
- package/.agent/workflows/deploy.md +201 -180
- package/.agent/workflows/enhance.md +154 -128
- package/.agent/workflows/fix.md +136 -114
- package/.agent/workflows/generate.md +198 -183
- package/.agent/workflows/marathon.md +37 -11
- package/.agent/workflows/migrate.md +184 -160
- package/.agent/workflows/orchestrate.md +192 -168
- package/.agent/workflows/performance-benchmarker.md +135 -114
- package/.agent/workflows/plan.md +196 -173
- package/.agent/workflows/preview.md +103 -80
- package/.agent/workflows/refactor.md +192 -161
- package/.agent/workflows/review-ai.md +125 -101
- package/.agent/workflows/review.md +141 -116
- package/.agent/workflows/session.md +122 -94
- package/.agent/workflows/status.md +101 -79
- package/.agent/workflows/strengthen-skills.md +164 -138
- package/.agent/workflows/super-prompt.md +24 -0
- package/.agent/workflows/swarm.md +193 -179
- package/.agent/workflows/test.md +211 -189
- package/.agent/workflows/tribunal-backend.md +136 -105
- package/.agent/workflows/tribunal-database.md +122 -95
- package/.agent/workflows/tribunal-frontend.md +221 -96
- package/.agent/workflows/tribunal-full.md +129 -100
- package/.agent/workflows/tribunal-mobile.md +122 -95
- package/.agent/workflows/tribunal-performance.md +136 -110
- package/.agent/workflows/tribunal-speed.md +209 -183
- package/.agent/workflows/ui-ux-pro-max.md +145 -122
- package/README.md +107 -55
- package/bin/mcp-server.js +159 -0
- package/bin/tribunal-kit.js +105 -29
- package/bin/wrapper.js +16 -7
- package/mcp_config.json +9 -0
- package/package.json +94 -86
- package/scripts/changelog.js +4 -3
- package/scripts/validate-payload.js +6 -1
- package/scripts/postinstall.js +0 -127
|
@@ -1,193 +1,188 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: seo-specialist
|
|
3
|
-
description: Next.js 15 SEO and GEO architect. Implements generateMetadata APIs, Schema.org JSON-LD structured data, OpenGraph cards, canonical URLs, sitemap generation, Core Web Vitals for ranking, and Generative Engine Optimization (GEO) for AI search discovery. Keywords: seo, metadata, sitemap, schema, opengraph, ranking, search, geo.
|
|
4
|
-
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
-
model: inherit
|
|
6
|
-
skills: seo-fundamentals, geo-fundamentals
|
|
7
|
-
version: 2.0.0
|
|
8
|
-
last-updated: 2026-04-02
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# SEO Specialist — Search & AI Discovery Engineer
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
## 1. Next.js 15 Metadata API
|
|
16
|
-
|
|
17
|
-
```typescript
|
|
18
|
-
// app/products/[slug]/page.tsx
|
|
19
|
-
import { Metadata } from
|
|
20
|
-
|
|
21
|
-
// Static metadata
|
|
22
|
-
export const metadata: Metadata = {
|
|
23
|
-
title:
|
|
24
|
-
description:
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
// Dynamic metadata (fetched per-page)
|
|
28
|
-
export async function generateMetadata(
|
|
29
|
-
{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
siteName:
|
|
51
|
-
type:
|
|
52
|
-
},
|
|
53
|
-
|
|
54
|
-
twitter: {
|
|
55
|
-
card:
|
|
56
|
-
title: product.name,
|
|
57
|
-
description: product.seoDescription,
|
|
58
|
-
images: [product.imageUrl],
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## 2. Schema.org JSON-LD Structured Data
|
|
67
|
-
|
|
68
|
-
```tsx
|
|
69
|
-
// app/products/[slug]/page.tsx
|
|
70
|
-
export default async function ProductPage({ params }) {
|
|
71
|
-
const { slug } = await params;
|
|
72
|
-
const product = await getProduct(slug);
|
|
73
|
-
|
|
74
|
-
const jsonLd = {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
name: product.name,
|
|
78
|
-
image: product.imageUrl,
|
|
79
|
-
description: product.description,
|
|
80
|
-
sku: product.sku,
|
|
81
|
-
offers: {
|
|
82
|
-
|
|
83
|
-
price: product.price,
|
|
84
|
-
priceCurrency:
|
|
85
|
-
availability: product.inStock
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
- Critical data (pricing, specs, limits) must be in static HTML — not JS-rendered
|
|
190
|
-
- Use `<dl>/<dt>/<dd>` for FAQ format — LLMs recognize this as QA pairs
|
|
191
|
-
- Code examples must exist as actual code blocks — not screenshots
|
|
192
|
-
|
|
193
|
-
---
|
|
1
|
+
---
|
|
2
|
+
name: seo-specialist
|
|
3
|
+
description: Next.js 15 SEO and GEO architect. Implements generateMetadata APIs, Schema.org JSON-LD structured data, OpenGraph cards, canonical URLs, sitemap generation, Core Web Vitals for ranking, and Generative Engine Optimization (GEO) for AI search discovery. Keywords: seo, metadata, sitemap, schema, opengraph, ranking, search, geo.
|
|
4
|
+
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
+
model: inherit
|
|
6
|
+
skills: seo-fundamentals, geo-fundamentals
|
|
7
|
+
version: 2.0.0
|
|
8
|
+
last-updated: 2026-04-02
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# SEO Specialist — Search & AI Discovery Engineer
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 1. Next.js 15 Metadata API
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// app/products/[slug]/page.tsx
|
|
19
|
+
import { Metadata } from "next";
|
|
20
|
+
|
|
21
|
+
// Static metadata
|
|
22
|
+
export const metadata: Metadata = {
|
|
23
|
+
title: "Product Name | Brand",
|
|
24
|
+
description: "Compelling 155-character description that matches search intent.",
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Dynamic metadata (fetched per-page)
|
|
28
|
+
export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }): Promise<Metadata> {
|
|
29
|
+
const { slug } = await params;
|
|
30
|
+
const product = await getProduct(slug);
|
|
31
|
+
|
|
32
|
+
if (!product) return { title: "Not Found" };
|
|
33
|
+
|
|
34
|
+
return {
|
|
35
|
+
title: `${product.name} | Brand`,
|
|
36
|
+
description: product.seoDescription,
|
|
37
|
+
canonical: `https://yoursite.com/products/${slug}`,
|
|
38
|
+
|
|
39
|
+
openGraph: {
|
|
40
|
+
title: product.name,
|
|
41
|
+
description: product.seoDescription,
|
|
42
|
+
images: [
|
|
43
|
+
{
|
|
44
|
+
url: product.imageUrl,
|
|
45
|
+
width: 1200,
|
|
46
|
+
height: 630,
|
|
47
|
+
alt: product.name,
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
siteName: "Your Brand",
|
|
51
|
+
type: "website",
|
|
52
|
+
},
|
|
53
|
+
|
|
54
|
+
twitter: {
|
|
55
|
+
card: "summary_large_image",
|
|
56
|
+
title: product.name,
|
|
57
|
+
description: product.seoDescription,
|
|
58
|
+
images: [product.imageUrl],
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 2. Schema.org JSON-LD Structured Data
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
// app/products/[slug]/page.tsx
|
|
70
|
+
export default async function ProductPage({ params }) {
|
|
71
|
+
const { slug } = await params;
|
|
72
|
+
const product = await getProduct(slug);
|
|
73
|
+
|
|
74
|
+
const jsonLd = {
|
|
75
|
+
"@context": "https://schema.org",
|
|
76
|
+
"@type": "Product",
|
|
77
|
+
name: product.name,
|
|
78
|
+
image: product.imageUrl,
|
|
79
|
+
description: product.description,
|
|
80
|
+
sku: product.sku,
|
|
81
|
+
offers: {
|
|
82
|
+
"@type": "Offer",
|
|
83
|
+
price: product.price,
|
|
84
|
+
priceCurrency: "USD",
|
|
85
|
+
availability: product.inStock ? "https://schema.org/InStock" : "https://schema.org/OutOfStock",
|
|
86
|
+
url: `https://yoursite.com/products/${slug}`,
|
|
87
|
+
},
|
|
88
|
+
aggregateRating: {
|
|
89
|
+
"@type": "AggregateRating",
|
|
90
|
+
ratingValue: product.averageRating,
|
|
91
|
+
reviewCount: product.reviewCount,
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
return (
|
|
96
|
+
<>
|
|
97
|
+
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
|
|
98
|
+
{/* page content */}
|
|
99
|
+
</>
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 3. Sitemap Generation (Next.js 15)
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
// app/sitemap.ts
|
|
110
|
+
import { MetadataRoute } from "next";
|
|
111
|
+
|
|
112
|
+
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
|
113
|
+
const products = await getAllProducts();
|
|
114
|
+
|
|
115
|
+
const productUrls = products.map((product) => ({
|
|
116
|
+
url: `https://yoursite.com/products/${product.slug}`,
|
|
117
|
+
lastModified: product.updatedAt,
|
|
118
|
+
changeFrequency: "weekly" as const,
|
|
119
|
+
priority: 0.8,
|
|
120
|
+
}));
|
|
121
|
+
|
|
122
|
+
return [
|
|
123
|
+
{
|
|
124
|
+
url: "https://yoursite.com",
|
|
125
|
+
lastModified: new Date(),
|
|
126
|
+
changeFrequency: "daily",
|
|
127
|
+
priority: 1.0,
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
url: "https://yoursite.com/products",
|
|
131
|
+
lastModified: new Date(),
|
|
132
|
+
changeFrequency: "daily",
|
|
133
|
+
priority: 0.9,
|
|
134
|
+
},
|
|
135
|
+
...productUrls,
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 4. Heading Structure (H1 Rules)
|
|
143
|
+
|
|
144
|
+
```markdown
|
|
145
|
+
RULE: Exactly ONE <h1> per page. It must contain the primary keyword.
|
|
146
|
+
Headings must be hierarchical: h1 → h2 → h3 (never skip levels)
|
|
147
|
+
|
|
148
|
+
❌ WRONG: Two h1s on the page
|
|
149
|
+
❌ WRONG: h1 is just the brand name (wastes keyword opportunity)
|
|
150
|
+
❌ WRONG: h3 directly under h1 (skips h2)
|
|
151
|
+
|
|
152
|
+
✅ CORRECT structure:
|
|
153
|
+
|
|
154
|
+
<h1>Buy Premium Coffee Beans Online</h1> ← Primary keyword
|
|
155
|
+
<h2>Single Origin Coffees</h2> ← Category
|
|
156
|
+
<h3>Ethiopian Yirgacheffe</h3> ← Product
|
|
157
|
+
<h3>Colombian Supremo</h3>
|
|
158
|
+
<h2>Blended Coffees</h2>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 5. GEO — Generative Engine Optimization
|
|
164
|
+
|
|
165
|
+
When AI engines (Perplexity, ChatGPT Search) index your site, they need:
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// Next.js Edge Middleware: serve bare markdown to AI bots
|
|
169
|
+
// middleware.ts
|
|
170
|
+
export function middleware(req: NextRequest) {
|
|
171
|
+
const ua = req.headers.get("user-agent") ?? "";
|
|
172
|
+
const isAIBot = /ChatGPT-User|PerplexityBot|ClaudeBot|GPTBot/i.test(ua);
|
|
173
|
+
|
|
174
|
+
if (isAIBot) {
|
|
175
|
+
// Redirect to a markdown-only version (no CSS/JS — pure data)
|
|
176
|
+
return NextResponse.rewrite(new URL(`/api/geo${req.nextUrl.pathname}`, req.url));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**GEO Content Rules:**
|
|
182
|
+
|
|
183
|
+
- Every factual claim must have a `<cite>` tag with a source link
|
|
184
|
+
- Critical data (pricing, specs, limits) must be in static HTML — not JS-rendered
|
|
185
|
+
- Use `<dl>/<dt>/<dd>` for FAQ format — LLMs recognize this as QA pairs
|
|
186
|
+
- Code examples must exist as actual code blocks — not screenshots
|
|
187
|
+
|
|
188
|
+
---
|