Install
openclaw skills install @daniel-amekpoagbe/skillGuides SEO and AI-search visibility for Next.js, Astro, and React apps in Cursor, Claude Code, and Codex. Use when setting up metadata, Open Graph, Twitter cards, Schema.org JSON-LD, sitemaps, robots.txt, optional llms.txt, keyword research, clustering, auditing SEO, improving discoverability, or setting up structured data. Covers Next.js App Router, Pages Router, Astro, and Vite + React SPAs. Matches JavaScript or TypeScript to the project language.
openclaw skills install @daniel-amekpoagbe/skillSEO and AI-search visibility for Next.js, Astro, and React applications. Works in Cursor, Claude Code, and Codex via native skill discovery.
This may NOT be the Next.js, React, Vite, or react-helmet-async you know.
Frameworks ship breaking changes — APIs, conventions, and file structures in the target codebase may differ from your training data. Before implementing any SEO or GEO work:
- Read the codebase first. Check the installed versions in
package.jsonand the lockfile, the folder structure, and the project's existing conventions.- Verify against current documentation. If the installed version is newer than what you are confident about, look up the official docs for that exact version. Never implement from memory when versions disagree.
- Implement against what the project actually uses — not what you remember. Example:
paramsingenerateMetadatais a plain object in Next.js 14 but aPromisein Next.js 15+.
.js/.jsx
with no types. TypeScript project → write .ts/.tsx with types. See
language.md.package.json for
the installed versions of next, react, vite, and react-helmet-async.
If a version is newer than your training data, consult its official docs
before implementing — APIs and conventions change between major versions.example.com / Site Name values in the reference files are
placeholders. If you must proceed without an answer, mark every placeholder
with a TODO comment and list them for the developer at the end.SEO component (Pages Router, Vite), root-layout defaults plus
title.template (App Router), or schema builder helpers for JSON-LD. If the
same meta block appears on more than one page, extract it before continuing.<title>, <meta>, and <link> from rendered JSX. Use
react-helmet-async when the project needs its additional API, React 16–18
support, or SSR context handling; never add it automatically to every app.
Never use the deprecated react-helmet package.Always run in this sequence:
| Step | Check | Reference |
|---|---|---|
| 1 | Language — JS or TS? | language.md |
| 2 | Stack — Next.js App/Pages, Astro, or Vite/React? | Table below |
| 3 | Implementation | Stack reference file |
| Signal | Stack | Reference |
|---|---|---|
app/layout.tsx or app/layout.jsx | Next.js App Router | app-router.md |
pages/_app.tsx or pages/_app.jsx | Next.js Pages Router | pages-router.md |
astro.config.*, src/pages/*.astro, or astro in package.json | Astro | astro.md |
vite.config.ts or vite.config.js | Vite + React | react-vite.md |
react-scripts in package.json dependencies | CRA (treat as Vite SPA) | react-vite.md |
If both app/ and pages/ exist, App Router takes precedence in Next.js 13+.
Planned (not yet supported): TanStack Start (
0.4.0). If a project uses it, apply the closest matching general principles, tell the developer dedicated support is coming, and do not invent framework-specific APIs.
| Step | Topic | Reference |
|---|---|---|
| 0 | Language (JS / TS) | language.md |
| 1 | Keyword clustering & validation | keywords.md |
| 2 | Metadata & Open Graph | Stack reference file |
| 3 | Structured data (JSON-LD) | structured-data.md |
| 4 | Sitemap & robots | Stack reference file |
| 5 | GEO / AI visibility | geo.md |
| 6 | Validation | validation.md |
Adapt all code to the detected language before implementing.
@type? Absolute URLs?| Feature | App Router | Pages Router | Astro | Vite + React |
|---|---|---|---|---|
| Metadata API | metadata / generateMetadata | next/head | HTML in .astro layouts/pages | React 19 JSX or react-helmet-async |
| Sitemap | app/sitemap.ts or .js | API route or next-sitemap | @astrojs/sitemap | public/sitemap.xml or build script |
| Robots | app/robots.ts or .js | public/robots.txt | public/robots.txt or endpoint | public/robots.txt |
| JSON-LD | Page <script> | Page <script> | Page/layout <script> | Page <script> or SEO component |
| File ext (TS) | .tsx, .ts | .tsx, .ts | .astro, .ts | .tsx, .ts |
| File ext (JS) | .jsx, .js | .jsx, .js | .astro, .js | .jsx, .js |