# Seo Launchpad

> Build production-grade SEO infrastructure for any web project (Next.js / Astro / Nuxt / plain HTML / WordPress) and teach the owner how to maintain rankings month-over-month. Triggered when the user says "set up SEO", "improve SEO", "SEO audit", "SEO checklist", "make my site rank", "תקן SEO", "תשתית SEO", "שיפור SEO", "להופיע בגוגל", "GEO", "AI search optimization", or pastes Google Search Conso…

- **Type:** Skill
- **Install:** `agentstack add skill-taltal190002-mov-seo-launchpad-seo-launchpad`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Taltal190002-mov](https://agentstack.voostack.com/s/taltal190002-mov)
- **Installs:** 0
- **Category:** [Search](https://agentstack.voostack.com/c/search)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Taltal190002-mov](https://github.com/Taltal190002-mov)
- **Source:** https://github.com/Taltal190002-mov/seo-launchpad

## Install

```sh
agentstack add skill-taltal190002-mov-seo-launchpad-seo-launchpad
```

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

## About

# SEO Launchpad

> Built by **LogicFlow** — bootstrap SEO that actually ranks, in a single session.

The job of this skill is to take any web project from "Google barely sees it" to "every page is crawl-ready, schema-complete, AI-Overview-eligible" — and to leave the owner with a maintenance playbook they can actually run.

Two outputs at the end of every run:

1. **Code in their repo** — committed files. Not advice. Not pseudo-code.
2. **A 1-page summary** in their language — what changed, why, what to do this month, what to do every month.

---

## When this skill triggers

Run it when the user says any of:

- "build SEO from scratch / set up SEO"
- "improve SEO / SEO audit / SEO sweep"
- "I want to rank for X" / "make me rank #1"
- "תקן SEO" / "תשתית SEO" / "שיפור SEO" / "להופיע בגוגל" / "אין לי favicon בגוגל"
- pastes a Google Search Console screenshot
- mentions AI Overviews / ChatGPT / Perplexity citations / GEO / llms.txt

Do NOT run it for:

- "rewrite my homepage" (content task, not SEO)
- "fix this metadata bug" (single-file fix, not infrastructure)
- "redirect from X to Y" (routing task)

---

## Phase 0 — Read before you build (5 minutes, not skippable)

Skip this and you'll write the wrong schema for the wrong business. Pull, in order:

1. `README.md`, `package.json`, `pyproject.toml` — what stack
2. `next.config.*`, `astro.config.*`, `nuxt.config.*` — framework specifics
3. `app/layout.*`, `pages/_app.*`, `index.html` — current head/metadata
4. `app/sitemap.*`, `public/sitemap.xml`, `public/robots.txt` — what exists
5. Any obvious page (`app/page.tsx`, `pages/index.tsx`, `index.html`) — current H1, copy, intent

Then write a **3-line summary** at the top of your output:

```
Stack: Next.js 16 App Router + Tailwind / Astro 5 / WordPress / static HTML
Audience: he-IL / en-US / multilingual / global
Business: local service (clinic) / e-commerce / SaaS / portfolio / blog / marketplace
```

That triple drives every decision below. A SaaS doesn't need LocalBusiness schema. A clinic doesn't need Product schema. A blog needs Article. Don't generic-blast.

---

## Phase 1 — Foundation (always)

These four files exist on every site, regardless of stack. If any is missing, generate it. If present, audit and patch.

### 1.1 robots.txt

Block private routes (admin, api/admin), allow image bots explicitly, point to the sitemap. **One line per directive, no wildcards in the wrong place** (this is where 50% of robots.txt are broken).

Template: see `templates/robots.txt`. Adapt the `Disallow:` paths to the actual project.

Common mistakes to fix on first encounter:
- `Disallow: /` left over from staging — nukes the entire site from Google
- Missing `Sitemap:` line — Google can find it but indirectly
- Blocking CSS/JS folders — Google needs them to render the page

### 1.2 sitemap (XML)

For Next.js App Router: `src/app/sitemap.ts` returning `MetadataRoute.Sitemap`.
For Astro: `@astrojs/sitemap` plugin.
For static HTML: hand-written XML committed to `public/sitemap.xml`.

Rules:
- One entry per **public, indexable** URL. No noindex pages.
- `lastModified` is a date that means something — bump it only when content changes. Daily auto-bumps train Google to ignore it.
- `priority` is a relative hint, not a vote. Homepage 1.0, hub pages 0.8-0.9, leaf pages 0.6-0.7.
- `changeFrequency` is a hint. Honest: weekly for homepage, monthly for content, yearly for legal pages.

Template: see `templates/sitemap.ts` (Next.js).

### 1.3 Metadata strategy (per-page)

Every public page needs unique ``, ``, canonical, OG, Twitter. The default-fallback-via-template pattern in Next.js 15+ is the right shape:

```ts
// layout.tsx
title: { default: "...", template: "%s | Brand" }
```

Per page:
```ts
export const metadata: Metadata = {
  title: "Specific keyword-led title",
  description: "120-155 chars with action + value",
  alternates: { canonical: "https://canonical/page" },
};
```

**Title formula** (this matters — it's the #1 CTR lever):
- Local: `[Service] [in City] — [Differentiator] | [Brand]` → "מיקרובליידינג בנתניה — מומחית מוסמכת | M.L Beautique"
- E-commerce: `[Product] — [Key Feature] | [Brand]`
- SaaS: `[Job to be done] — [Brand]` (verb-led)
- Article: `[Headline]` (let the article title speak)

Length: titles ≤ 60 chars (or they truncate in SERP), descriptions 120-155 chars.

Template: see `templates/nextjs-metadata-helpers.ts`.

### 1.4 Canonical URLs (often forgotten)

Every page has exactly one canonical URL. Including:
- pagination — `?page=2` should canonical to itself if content differs, or to `/products` if it's a thin slice
- query strings — `?utm_source=...` canonical to base URL
- protocol — always https
- trailing slash — pick one (most modern sites: no trailing slash) and stick with it across the site

In Next.js metadata API, `alternates: { canonical: "..." }` handles this. **Don't** rely on `next.config.js` redirects alone — they don't fix the canonical inside HTML.

---

## Phase 2 — Schema.org (JSON-LD) — the biggest leverage point

In 2026, structured data drives:
- Rich results in regular Google search
- Eligibility for AI Overviews (Position Zero)
- Citation in ChatGPT/Perplexity/Claude AI answers
- Knowledge panel formation for the brand

**Pick the schemas that match the business type, not the ones that look impressive.** A wrong schema (claiming Product on a service page) is a trust hit.

### Pick by business type

| Business | Required | Recommended | Optional |
|---|---|---|---|
| Local service (clinic, salon, gym, restaurant) | `LocalBusiness` (specific subtype: BeautySalon, Restaurant, etc), `Organization`, `WebSite` | `Service` per offering, `BreadcrumbList`, `FAQPage` | `Review`, `AggregateRating` (only if real reviews) |
| E-commerce | `Organization`, `Product`, `Offer`, `BreadcrumbList` | `Review`, `AggregateRating`, `FAQPage` per product | `VideoObject` for product videos |
| SaaS | `Organization`, `WebSite`, `SoftwareApplication`, `FAQPage` | `BreadcrumbList`, `HowTo` for tutorials | `VideoObject` for demos |
| Blog / publication | `Organization`, `WebSite`, `Article` (or `BlogPosting`), `Person` (author) | `BreadcrumbList`, `FAQPage` per post | `VideoObject`, `Recipe`, `HowTo` |
| Portfolio / agency | `Organization`, `WebSite`, `Person` | `Project`/`CreativeWork`, `BreadcrumbList` | `VideoObject` |
| Marketplace | `Organization`, `WebSite`, `BreadcrumbList`, per-listing `Product` or `Service` | `FAQPage`, `Review` | |

Templates for each: `templates/schemas.ts`.

### Critical implementation rules

1. **One JSON-LD per type, per page.** Multiple `Organization` blocks on the same page split the signal.
2. **Use `@id` to connect.** Sitewide `Organization` gets `@id: "https://site/#organization"`. Articles reference it via `publisher: { "@id": "..." }`. This makes Google build a real entity graph.
3. **Test every schema** at https://search.google.com/test/rich-results before commit.
4. **Don't fake data.** No `aggregateRating` without real reviews on the page. Google detects this and penalizes.
5. **Hebrew/RTL tip:** all schema string values can be Hebrew, but URLs in `url`/`@id` must be ASCII-clean.

### The "boring schemas that quietly help"

Always-include trio for any site:

```json
[
  {"@type": "Organization", "name": "...", "url": "...", "logo": "..."},
  {"@type": "WebSite", "name": "...", "url": "...", "publisher": {"@id": "...#organization"}},
  {"@type": "BreadcrumbList", "itemListElement": [...]}
]
```

These three give Google the entity, the site, and the navigation context. They're not dramatic, but they're the foundation everything else builds on.

---

## Phase 3 — Content SEO

Schema gets you in the door. Content keeps you on page 1.

### Headings

- One `` per page. Includes the **target keyword and location** (for local) or **target keyword and modifier** (for everything else).
- `` headings often phrased as **questions** — this is the #1 trick for AI Overview eligibility. "מה ההבדל בין X ל-Y?" beats "השוואה בין X ו-Y" for AI citation.
- `` for sub-points. Don't go to h4 unless it's a long article.

### Body copy

The first 50-70 words after the H1 are critical for AI Overviews. Lead with a **direct, citable answer** to the implied query. Example for "מיקרובליידינג נתניה":

> Bad H1 + intro: "מיקרובליידינג. הטיפול שכולן מדברות עליו. זה מהפכני."
> Good: "מיקרובליידינג בנתניה הוא טכניקת איפור קבוע אומנותית שיוצרת משיכות שיער דקות בגבות. התוצאה נשמרת 1-3 שנים. ב-M.L Beautique המחיר 1,400 ₪ כולל תיקון."

The good version answers price + duration + brand + location in 30 words. AI engines love this; humans skim it; Google's snippet selector picks it up verbatim.

### Word count

There's no magic number. Pages that rank #1 for competitive queries average 800-1500 words, but only because that's how long it takes to actually answer the question. Pad to hit a number = anti-pattern.

### Internal linking

- Anchor text matters more than people remember. Don't write "click here". Write "מיקרובליידינג בנתניה" as the link text — that's a vote for that keyword.
- Aim for 3-5 internal links per content page, pointing to related deep pages.
- Hub-and-spoke: every leaf page links back to its hub; hub links to all leaves.

### Images

- Filenames matter — `microblading-natanya-after.jpg` beats `IMG_2034.jpg`.
- Alt text in the language of the audience, descriptive (not keyword-stuffed): `"גבות אחרי טיפול מיקרובליידינג ב-M.L Beautique נתניה"`.
- WebP or AVIF, lazy-loaded outside the fold.
- Width/height attributes set to prevent CLS.

---

## Phase 4 — AI search & GEO (the new layer)

GEO = Generative Engine Optimization. Optimizing not for "rank #1 in Google search" but for "be cited in ChatGPT / Perplexity / Google AI Overview answers". Roughly 40% of the work overlaps with traditional SEO; 60% is new.

### llms.txt — give AI crawlers a map

A markdown file at `/llms.txt` that summarizes the site for LLM crawlers. Proposed by Jeremy Howard (fast.ai) Sept 2024, now widely supported.

Format (strict):

```markdown
# Brand Name

> One-paragraph summary of what the brand/site is about. 1-3 sentences.

## Key pages
- [Homepage](https://site.com/): What the brand offers
- [Services](https://site.com/services): All services with prices
- [Contact](https://site.com/contact): Address, phone, hours

## Articles
- [Article 1](https://site.com/blog/x): What it covers

## Optional
(Section with `Optional` heading marks links AI can SKIP if context is short.)
- [Privacy Policy](https://site.com/privacy)
```

Template: `templates/llms.txt`.

For Next.js, place `app/llms.txt/route.ts` to serve it. For static, drop in `/public`.

There's also `llms-full.txt` — same idea but with the full body content of key pages inlined. Useful for documentation sites where you want the AI to read the actual text without crawling page-by-page.

### FAQ + HowTo schema for AI Overviews

`FAQPage` schema is the single highest-leverage thing for AI Overview eligibility. Every content page should have 3-7 FAQs, each phrased as a real question users ask, with clear 1-3 sentence answers.

Mining sources for real questions:
- Google "People also ask"
- Google Search Console — Performance → Queries (real questions your audience already searches)
- Reddit / community forums in the niche
- Customer support inbox

Don't invent FAQs. Mine them.

### Question-led H2 / Listicle structure

AI engines extract from listicles and Q&A formats more reliably than from prose. When the content allows, structure as:

```
H1: How to do X
H2: What you need
H2: Step 1 — ...
H2: Step 2 — ...
H2: Common mistakes
```

This is also the structure for `HowTo` schema. Use both together.

---

## Phase 5 — Local SEO (only if applicable)

Skip this section if the project isn't a local business.

### LocalBusiness schema (the right subtype)

Generic `LocalBusiness` is fine but a specific subtype is better. Pick from:
- `BeautySalon` (clinic, hair, nails, makeup)
- `MedicalClinic` / `Dentist` / `Physician`
- `Restaurant` / `Cafe` / `Bakery`
- `LegalService`
- `AutoRepair` / `Plumber` / `Electrician`
- See https://schema.org/LocalBusiness for full list

Required fields: `name`, `address` (with `streetAddress`, `addressLocality`, `addressCountry`), `telephone`, `url`, `openingHoursSpecification`.
Add `geo` (lat/long), `priceRange`, `image`, `hasMap`, `areaServed` for max signal.

### Google Business Profile (the off-site half)

The site can be perfect and still not rank in the Map Pack without GBP. The owner needs to:
1. Claim/verify https://business.google.com listing
2. Match NAP (Name/Address/Phone) **exactly** to the site (whitespace, punctuation, parens — all of it)
3. Add categories (primary + 2-3 secondary)
4. Add 10+ photos
5. Solicit reviews (this is the dominant ranking factor for Map Pack)

The skill should **not** try to do GBP setup itself — it's manual. But it should generate a GBP setup checklist (see `guides/google-business-profile.md`) and emphasize that without GBP, local SEO is half-built.

### Reviews

If real reviews exist (on GBP, on the site, on Trustpilot, etc.), reflect them with `Review` and `AggregateRating` schema **on the site**. Not just GBP. This adds star ratings to organic SERP listings.

If no real reviews — DON'T fake `aggregateRating`. Google detects this. Skip the schema until reviews exist.

---

## Phase 6 — Performance (Core Web Vitals)

Targets:
- **LCP** (Largest Contentful Paint) ≤ 2.5s
- **CLS** (Cumulative Layout Shift) ≤ 0.1
- **INP** (Interaction to Next Paint) ≤ 200ms

These are ranking factors. They're also what Google AI Overview selectors use to decide which pages to summarize.

Quick wins to apply on first audit:
- `next/image` for all images (auto-converts to WebP/AVIF, lazy loads, sets dimensions)
- `next/font` for all custom fonts (no FOIT, no FOUT, no CLS)
- Remove render-blocking third-party scripts; defer or load async
- Preconnect to fonts.googleapis.com if using
- Set explicit width/height on every `` and ``
- Use `Suspense` boundaries around heavy below-the-fold components

Measure with PageSpeed Insights (https://pagespeed.web.dev/) — desktop AND mobile. Mobile is the one that matters for ranking.

---

## Phase 7 — Monitoring (set this up; don't skip)

### Google Search Console (mandatory)

Walk the user through:
1. Add property → URL prefix → enter `https://domain.com`
2. Verify (HTML tag is easiest — give them the snippet to add)
3. Submit sitemap (`sitemap.xml`)
4. Use URL Inspection tool to request indexing for top 5 pages

See `guides/google-search-console-setup.md` for the full walkthrough.

### Google Business Profile (if local)

See above.

### Optional but valuable

- **Plausible / Umami / Fathom** — privacy-friendly traffic analytics (GDPR-clean, no cookie banner needed)
- **Microsoft Clarity** — free heatmaps + session recordings
- **Ahrefs Webmaster Tools** — free, gives backlink data GSC doesn't

Don't recommend Google Analytics 4 unless asked. It triggers cookie consent obligations and most small sites don't need its complexity.

---

## Phase 8 — The 12-week growth playbook

This is what you give the owner at the end. A printable plan they can run without hiring an SEO agency.

```
Week 1-2 — Foundation
  ☐ All Phase 1-7 deployed
  ☐ GSC verified, sitemap submitted
  ☐ GBP claimed (if local)
  ☐ Top 5 pages: indexing requested

Week 3-4 — First measurement
  ☐ Open GSC Performance, set last 28 days
  ☐ Note top 10 queries that get impressions but few clicks → write down
  ☐ Run PageSpeed on top 3 pages → fix any red metric

Week 5-8 — Content depth
  ☐ For each impression-getting query without a dedicated page → create one
  ☐ For each existing page ranking #6-15 → expand body to 800+ words
  ☐ Add FAQ schema to top 5 pages (mine real questions)
  ☐ Add 1 internal link from homepage to a struggling deep page

Week 9-12 — Authority
  ☐ List the brand on 5 industry-relevant directories (with NAP match)
  ☐ Reach out to 3 partners/suppliers for backlinks (link from thei

…

## Source & license

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

- **Author:** [Taltal190002-mov](https://github.com/Taltal190002-mov)
- **Source:** [Taltal190002-mov/seo-launchpad](https://github.com/Taltal190002-mov/seo-launchpad)
- **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:** no
- **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-taltal190002-mov-seo-launchpad-seo-launchpad
- Seller: https://agentstack.voostack.com/s/taltal190002-mov
- 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%.
