# Web Seo Aeo Geo Google Naver

> >-

- **Type:** Skill
- **Install:** `agentstack add skill-gunheeaug-web-seo-aeo-geo-google-naver-skill-web-seo-aeo-geo-google-naver-skill`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [gunheeaug](https://agentstack.voostack.com/s/gunheeaug)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [gunheeaug](https://github.com/gunheeaug)
- **Source:** https://github.com/gunheeaug/web-seo-aeo-geo-google-naver-skill

## Install

```sh
agentstack add skill-gunheeaug-web-seo-aeo-geo-google-naver-skill-web-seo-aeo-geo-google-naver-skill
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Web SEO + AEO + GEO — Google + Naver (Next.js)

Implement production **search indexing (SEO)**, **answer surfaces (AEO)**, and **LLM citability (GEO)** end-to-end: code, env instructions, build verification, and console handoff. Work autonomously after discovery.

## Terminology

| Term | Meaning | Examples |
|------|---------|----------|
| **SEO** | Classic search indexing & ranking | sitemap, meta tags, GSC, Naver |
| **AEO** | Answer Engine Optimization | Google AI Overviews, featured snippets, FAQ rich results |
| **GEO** | Generative Engine Optimization | ChatGPT, Perplexity, Gemini citing your pages |

SEO is the foundation. AEO/GEO layers **structured facts + crawlable HTML** so machines can quote you accurately.

## When to Use

- User deploys a Next.js web app and wants search indexing
- User mentions Google Search Console, Naver Search Advisor (서치어드바이저), sitemap, robots, JSON-LD
- User wants FAQ pages, review schema, AI-friendly entity pages, dynamic OG
- User hit Naver URL inspection warnings (description > 80 chars, og:description mismatch)

**When NOT to use:** non-web projects, audit-only with no code changes requested

---

## Done Criteria

### Google (SEO)
- [ ] `metadata.verification.google` from env
- [ ] `app/sitemap.ts` — all public indexable URLs, https, valid XML
- [ ] `app/robots.ts` — allow `/`, disallow private routes (`/admin`, `/api/`, etc.)
- [ ] Per-page metadata: title, description, canonical, openGraph, twitter
- [ ] JSON-LD on home + detail pages (WebSite, page-appropriate types)
- [ ] SSR/SSG HTML for indexable routes (not SPA-only shells)
- [ ] Private routes: `noindex`

### Naver (SEO)
- [ ] `naver-site-verification` in `metadata.verification.other` (or HTML file for subdomain-only sites)
- [ ] Every indexable page: `description` === `openGraph.description` === `twitter.description`
- [ ] Every indexable page: description ≤ **80 chars** (CJK-aware: count string length)
- [ ] Every indexable page: **unique** description (no site-wide duplicate)
- [ ] Site registered on **https** (not http)
- [ ] Sitemap submittable at Naver: **요청 → 사이트맵 제출**

### AEO + GEO
- [ ] **SSR entity pages** — each indexable place/item has `/entity/[id]` with H1, address, facts, internal links (not `?id=` only)
- [ ] **FAQ route** `/faq` — visible Q&A **matches** `FAQPage` JSON-LD exactly
- [ ] **Organization** JSON-LD on home (brand entity)
- [ ] **BreadcrumbList** JSON-LD where breadcrumbs render
- [ ] **Restaurant/LocalBusiness** JSON-LD on detail pages: name, url, address, geo, telephone, sameAs, aggregateRating when available
- [ ] **Review** JSON-LD — user comments with `reviewBody` rendered in HTML; max ~10 in schema; **no fake reviewRating** unless you store per-review stars
- [ ] **Dynamic OG** — `opengraph-image.tsx` for home/detail; API route for share links with query params (e.g. shared lists)
- [ ] **One canonical URL** per entity (multi-domain: pick primary; aliases canonical-point or 301)
- [ ] Host-aware sitemap when multiple domains serve the same app

### Copy separation (critical)
| Layer | Length | Purpose |
|-------|--------|---------|
| meta / OG / Twitter | ≤ 80 chars | Naver URL inspection |
| JSON-LD / body SEO text | longer OK | Google + AEO/GEO richness |

Reference: https://searchadvisor.naver.com/guide/markup-content

---

## Step 0 — Discovery

1. Read project rules (`AGENTS.md`, etc.) and `app/layout.tsx`
2. Detect stack: Next.js App Router, deployment target (Vercel, etc.), data source
3. Identify indexable routes vs noindex routes
4. Resolve production domain(s) and **canonical primary** per product/locale
5. Check existing verification env vars (do not invent codes):
   - `NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION`
   - `NEXT_PUBLIC_NAVER_SITE_VERIFICATION`
6. Run baseline `npm run build` if feasible
7. Brief plan (SEO → crawlable pages → AEO/GEO schema → OG), then implement

**Ask user only when blocked:** missing domain, missing page types, or verification codes needed for live check

---

## Step 1 — Infrastructure (SEO)

### 1A. `lib/naver-markup.ts`

Short copy for meta + OG only. No import from `lib/seo.ts` (avoid circular deps).

```ts
export const NAVER_DESC_MAX = 80;

export function naverClamp(text: string, max = NAVER_DESC_MAX): string {
  const trimmed = text.trim().replace(/\s+/g, " ");
  if (trimmed.length ` + `` Q&A on page
- `FAQPage` JSON-LD — **same questions and answers** as visible content
- Naver: FAQ meta description ≤ 80 chars, unique
- Optional: per-locale FAQ (ko for Korea apps, en for international)

### 4B. Entity JSON-LD (detail pages)

**Restaurant / LocalBusiness** (adapt type to project):

- `name`, `url`, `description` (long copy OK)
- `address`, `geo`, `telephone`, `sameAs` (only real data)
- `aggregateRating` only when you have rating + count
- `image` from entity photo URLs

**Home:**

- `WebSite` + `SearchAction` if site search exists
- `Organization` — name, url, logo

**Navigation:**

- `BreadcrumbList` matching visible breadcrumb links

### 4C. Review schema (UGC)

```ts
function reviewJsonLd(
  comments: { body: string | null; author_name: string | null; created_at: string }[],
  defaultAuthor: string,
) {
  return comments
    .filter((c) => c.body?.trim())
    .slice(0, 10)
    .map((c) => ({
      "@type": "Review",
      reviewBody: c.body!.trim(),
      author: { "@type": "Person", name: c.author_name?.trim() || defaultAuthor },
      datePublished: c.created_at.slice(0, 10),
    }));
}
```

Embed as `Restaurant.review[]`. **Rule:** if it's in JSON-LD, the same text must appear in SSR HTML.

### 4D. Dynamic Open Graph

- `app/opengraph-image.tsx` — brand card (home)
- `app/[entity]/[id]/opengraph-image.tsx` — fetch entity; show name + subtitle
- Share URLs with query params → `app/api/og/.../route.ts` returning `ImageResponse`
- Set `export const dynamic = "force-dynamic"` on OG routes that fetch fonts/data at runtime
- Load at least one font for `ImageResponse` (Satori requirement)

In `generateMetadata`, point `openGraph.images` to generated OG URL when not using a real entity photo.

### 4E. Multi-domain canonical

When one codebase serves `app.example.com`, `sub.example.com`, `otherbrand.net`:

1. Pick **one primary URL** per product/locale
2. All aliases emit ``
3. Sitemap on each host lists **only URLs on that host's canonical origin**
4. GSC: separate property per registrable domain (DNS TXT)
5. Naver: register each Korean primary host; HTML file upload OK for subdomains

---

## Step 5 — Environment variables

Instruct user to set in production (never commit values):

```env
NEXT_PUBLIC_SITE_URL=https://your-domain.com
NEXT_PUBLIC_GOOGLE_SITE_VERIFICATION=
NEXT_PUBLIC_NAVER_SITE_VERIFICATION=
```

Codes come from each console after property registration. Agent wires layout metadata only.

---

## Step 6 — Verify (mandatory)

```bash
npm run build
```

After deploy:

```bash
curl -sL "https://YOUR_DOMAIN/" | grep -E 'description|og:description|google-site-verification|naver-site-verification'
curl -sL "https://YOUR_DOMAIN/robots.txt"
curl -sL "https://YOUR_DOMAIN/sitemap.xml" | head -20
curl -sI "https://YOUR_DOMAIN/opengraph-image"
```

Sample detail + FAQ pages. [Rich Results Test](https://search.google.com/test/rich-results) on one detail URL with reviews.

Do not claim success without build output or curl evidence.

---

## Step 7 — User handoff

### Google Search Console
1. Add property (Domain TXT recommended for subdomains)
2. Verify (HTML meta tag or DNS)
3. **색인 생성 → Sitemaps** → primary sitemap URL
4. URL inspection: home + one detail + `/faq`

### Naver Search Advisor
1. Register **https://YOUR_DOMAIN** (NOT http)
2. Verify (meta tag or HTML file for subdomain)
3. **요청 → 사이트맵 제출**
4. URL inspection: description ≤ 80, og matches meta

### AEO/GEO monitoring (week 1)
- GSC → Performance + Page indexing
- Test FAQ/detail URLs in Rich Results Test
- Share a link in Kakao/iMessage — confirm dynamic OG
- Optional: `llms.txt` at site root describing product + key URLs (emerging GEO convention)

---

## Common Mistakes

- FAQ schema ≠ visible page content
- Review schema without SSR review text
- One long description inherited site-wide
- og:description ≠ meta description (Naver fails)
- SPA-only with no crawlable HTML (GEO fails)
- Multiple canonical URLs for same entity across domains
- Hardcode verification tokens in source
- Skip build / skip live verification

---

## Output Format

When finished, provide:

1. **Summary** — SEO + AEO/GEO what was implemented
2. **Files changed** — path + one-line purpose
3. **Env vars** — names only
4. **Console steps** — Google + Naver
5. **Verification** — build + curl + Rich Results (if applicable)
6. **Follow-up** — indexing wait, optional GSC properties for extra domains

---

## Additional Resources

- Code templates: [reference.md](reference.md)
- Trigger examples: [examples.md](examples.md)

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [gunheeaug](https://github.com/gunheeaug)
- **Source:** [gunheeaug/web-seo-aeo-geo-google-naver-skill](https://github.com/gunheeaug/web-seo-aeo-geo-google-naver-skill)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-gunheeaug-web-seo-aeo-geo-google-naver-skill-web-seo-aeo-geo-google-naver-skill
- Seller: https://agentstack.voostack.com/s/gunheeaug
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
