SEO SKILL

seo-ecommerce

Product-page SEO scoring, Product schema validation, and, with a DataForSEO key, Google Shopping and Amazon marketplace intelligence.

by Daniel AgriciAgriciDaniel/claude-seoMIT licencev2.3.1upstream 2026-09-10read by us 11 September 2026

Four commands. `/seo ecommerce <url>` analyses a product page or store; `schema <url>` validates and enhances Product markup; `products <keyword>` and `gaps <domain>` need the DataForSEO Merchant API and pull live Shopping and Amazon data.

The keyless half is a checklist you could run yourself, done for you: title, meta, headings, image alt and size, breadcrumbs, related products, unique description, specs table, reviews, and a six-part weighted score.

The schema section is the useful part for most stores: the confirmed-required fields (name, image, offers), the recommended ones, eight validation rules, and a completeness ladder from 50 to 100.

When to use it

The phrases that trigger it

From the skill’s own description: say any of these and an agent that has it installed will load it.

  • ecommerce SEO
  • product SEO
  • Google Shopping
  • product schema
  • Amazon SEO
  • shopping ads
  • merchant SEO

What’s inside

The playbook, section by section

  • Product SEO checklist, weighted

    Schema completeness 25%, images 20%, content 20%, title and meta 15%, internal linking 10%, technical 10%.

  • Product schema rules

    Price as a bare number string, availability as a full schema.org URL, ISO 4217 currency, no empty brand, ISO 8601 sale windows, ratingValue with reviewCount, and no undisclosed incentivised reviews.

  • Marketplace intelligence (keyed)

    Price distribution with outliers, top sellers by listing count, free-shipping prevalence, title patterns in the top listings, and a Google-versus-Amazon comparison table.

  • Keyword gap types

    Organic-only, Shopping-only, both, neither, each with the action the skill recommends.

  • UCP audit

    Checks for a `/.well-known/ucp` profile (the Universal Commerce Protocol) and reports its absence as an opportunity, not a failure.

Reference files: marketplace-endpoints.md ucp-universal-commerce-protocol.md

See it in action

One real run, cropped

We installed the skill folder, gave it the request below, and kept what it returned. Nothing was edited; the excerpt is the first 1,678 of 17,302 characters. The full output is in our repository as research/skills/runs/seo-ecommerce.md.

You ask

Analyse the product page https://furmind.co/products/warm-dog-sofa-bed (a Shopify store we run). No DataForSEO credentials are configured. Give the product page score and the schema enhancement.

The skill delivers

E-commerce SEO Report: https://furmind.co/products/warm-dog-sofa-bed

Fetched 2026-09-11 via render_page.py --mode auto (HTTP 200, served as raw HTML, is_spa=False, 423 KB) and parsed with parse_html.py. No DataForSEO credentials are configured, so the Marketplace Intelligence sections (Google Shopping, Amazon, keyword gaps) were not run. Everything below is on-page + schema only.

Overall Score: 66/100

Weighted per the skill's scoring table: Schema 25% · Title & meta 15% · Images 20% · Content 20% · Internal linking 10% · Technical 10%.

Product Page SEO
  • Schema Completeness: 70/100
  • Title & Meta: 60/100
  • Image Optimization: 65/100
  • Content Quality: 55/100
  • Internal Linking: 80/100
  • Technical: 70/100 (canonical, viewport, indexability checked; Core Web Vitals and mobile rendering NOT measured in this run)
What was measured

Title tagWarm Dog Sofa Bed | Furmind (27 chars)

  • Primary product keyword: yes · Brand: yes · Under 60 chars: yes
  • Format [Product] - [Key Feature] | [Brand]: no key feature. There is room for one (e.g. the washable cover or the three sizes) without passing 60 chars.

Meta description — 153 chars, under the 155 limit

  • Keyword + benefit: yes ("...dipped low on one side so a dog can step in")
  • Price or "from $XX": no (the page sells from $49.35 USD; the og:price:amount tag already carries it)
  • Call to action: no
  • One claim to check: it ends with "Sizes in cm on the page", but the server-rendered HTML contains no S/M/L dimensions in cm or inches, only the sizing method ("add 6-8 in (15-20 cm)"). If the size chart is injected client-side, crawlers reading raw HTML do not see it.

Cropped here. The rest continues in the same register.

What it could not do in this run

DataForSEO Merchant/Labs data (no credentials, so no Google Shopping, Amazon or keyword-gap sections); Core Web Vitals / mobile rendering (not in the section-1 workflow, scored Technical only on canonical/viewport/indexability and said so); three schema values not stated on the page (live Loox rating/count, returnMethod, returnFees) left as FILL placeholders.

Method behind it

Where we would differ, and why

Our ecommerce SEO guide covers the same product-page surface with measured examples from real stores and explains why the schema half matters more than the title-tag half for a catalogue. The skill scores; the guide shows what the score looks like on a Shopify page.

Ecommerce SEO: What to Fix and in What Order

Note 1
The checklist asks for a call-to-action in the meta description and a price in it. Google rewrites most ecommerce descriptions anyway; we would not spend effort there.
Note 2
The 200-word minimum for a product description is the author’s floor, not Google’s. A short, specific description with a specs table outranks a padded one.
Note 3
ucp_check.py misreads Shopify’s real UCP profile, which nests everything under a top-level `ucp` key, and reports a declared version and eight capabilities as missing. The skill also calls 2026-04-08 the latest UCP release while Shopify stores advertise 2026-08-25. Read the profile yourself before trusting that row.

SKILL.md

The upstream file, as we read it

Copyright Daniel Agrici, MIT licence, commit 55c7914 of AgriciDaniel/claude-seo. Reproduced here under that licence so you can read what the agent will read; the folder’s reference files are in the repository.

Open SKILL.md (2,002 words)
---
name: seo-ecommerce
description: >
  E-commerce SEO analysis: Google Shopping visibility, Amazon marketplace
  intelligence, product schema validation, competitor pricing analysis, and
  marketplace keyword gaps. Combines on-page product SEO with marketplace data
  from DataForSEO Merchant API. Use when user says "ecommerce SEO", "product SEO",
  "Google Shopping", "marketplace SEO", "product schema", "Amazon SEO",
  "product listings", "shopping ads", or "merchant SEO".
user-invocable: true
argument-hint: "<url or keyword>"
license: MIT
compatibility: "Enhanced with DataForSEO Merchant API (optional)"
metadata:
  author: AgriciDaniel
  original_author: "Matej Marjanovic (Pro Hub Challenge)"
  version: "2.3.1"
  category: seo
---

# E-commerce SEO Analysis

Comprehensive product page optimization, marketplace intelligence, and
competitive pricing analysis. Works standalone (on-page + schema) and with
DataForSEO Merchant API for live Google Shopping and Amazon data.

## Commands

| Command | Purpose | DataForSEO? |
|---------|---------|-------------|
| `/seo ecommerce <url>` | Full e-commerce SEO analysis of a product page or store | Optional |
| `/seo ecommerce products <keyword>` | Google Shopping competitive analysis | Required |
| `/seo ecommerce gaps <domain>` | Keyword gap: organic vs Shopping visibility | Required |
| `/seo ecommerce schema <url>` | Product schema validation and enhancement | No |

---

## 1. Product Page Analysis (No DataForSEO Needed)

Fetch and parse any product page for on-page SEO quality.

### Workflow

```
1. "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run render_page.py <url> --mode auto → raw/rendered HTML
2. "${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run parse_html.py --url <url>   → SEO elements
3. Analyze product-specific signals (below)
```

### Product SEO Checklist

#### Title Tag
- [ ] Contains primary product keyword
- [ ] Includes brand name
- [ ] Under 60 characters (no truncation in SERPs)
- [ ] Format: `[Product Name] - [Key Feature] | [Brand]`

#### Meta Description
- [ ] Contains product keyword + benefit
- [ ] Includes price or "from $XX" (triggers rich snippet interest)
- [ ] Call-to-action present (Shop now, Buy, Free shipping)
- [ ] Under 155 characters

#### Heading Structure
- [ ] Single H1 matching primary product name
- [ ] H2s for: Features, Specifications, Reviews, Related Products
- [ ] No duplicate H1 tags across product variants

#### Product Images
- [ ] Alt text includes product name + distinguishing feature
- [ ] File names are descriptive (not `IMG_001.jpg`)
- [ ] WebP format served (with JPEG fallback)
- [ ] At least 3 images per product (hero, detail, lifestyle)
- [ ] Image dimensions >= 800px for Google Shopping eligibility
- [ ] Lazy loading on below-fold images only

#### Internal Linking
- [ ] Breadcrumb navigation: Home > Category > Subcategory > Product
- [ ] Related products section (cross-sell / upsell)
- [ ] Link back to category page with keyword-rich anchor
- [ ] Reviews section links to full review page (if separate)

#### Content Quality
- [ ] Unique product description (not manufacturer copy-paste)
- [ ] Word count >= 200 for product description body
- [ ] Specs table present (not just prose)
- [ ] User reviews on-page (UGC signals)

### Scoring

| Category | Weight | Criteria |
|----------|--------|----------|
| Schema completeness | 25% | Required + recommended Product fields |
| Title & meta | 15% | Keyword placement, length, format |
| Image optimization | 20% | Alt text, format, sizing, count |
| Content quality | 20% | Unique description, specs, reviews |
| Internal linking | 10% | Breadcrumbs, related products, categories |
| Technical | 10% | Page speed, mobile rendering, canonical |

---

## 2. Google Shopping Intelligence (DataForSEO Merchant API)

Live competitive analysis from Google Shopping results.

### Cost Guardrail (MANDATORY)

Before EVERY Merchant API call:
```bash
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_costs.py check merchant_google_products_search
```

- `"status": "approved"` -- proceed
- `"status": "needs_approval"` -- show cost, ask user
- `"status": "blocked"` -- stop, inform user

After each call:
```bash
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_costs.py log merchant_google_products_search <cost>
```

### Workflow

```bash
# Product search: who sells what at what price
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_merchant.py search "<keyword>" --marketplace google

# Seller analysis: merchant ratings and dominance
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_merchant.py sellers "<keyword>"

# Normalize results for analysis
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_normalize.py results.json --module merchant
```

### Analysis Outputs

#### Pricing Intelligence
- Price distribution: min, max, median, P25, P75
- Price outliers (> 2 standard deviations from median)
- Price-to-rating correlation
- Currency normalization to USD (or user-specified)

#### Seller Landscape
- Top 10 sellers by listing count
- Merchant rating distribution
- Free shipping prevalence
- New vs established sellers

#### Product Listing Quality
- Title keyword patterns in top listings
- Average rating and review count benchmarks
- Image count per listing
- Availability status distribution

Load `references/marketplace-endpoints.md` for full API parameter details.

---

## 3. Amazon Marketplace (DataForSEO)

Cross-marketplace intelligence comparing Google Shopping and Amazon.

### Cost Guardrail (MANDATORY)

```bash
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_costs.py check merchant_amazon_products_search
```

Amazon endpoints are in the `warn_endpoints` set -- always requires user approval.

### Workflow

```bash
# Amazon product search
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_merchant.py search "<keyword>" --marketplace amazon

# Cross-marketplace comparison
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run dataforseo_merchant.py compare "<keyword>"
```

### Cross-Marketplace Report

| Metric | Google Shopping | Amazon |
|--------|---------------|--------|
| Avg price | $ | $ |
| Median rating | X.X | X.X |
| Avg review count | N | N |
| Top seller share | % | % |
| Free shipping % | % | % |

---

## 4. Marketplace Keyword Gaps

Identify mismatches between organic and Shopping visibility.

### Workflow

1. Fetch organic rankings via seo-dataforseo:
   `dataforseo_labs_google_ranked_keywords` for domain
2. Fetch Google Shopping presence via Merchant API:
   `merchant_google_products_search` for top organic keywords
3. Cross-reference results

### Gap Types

| Gap Type | Meaning | Action |
|----------|---------|--------|
| **Organic Only** | Ranks organically but no Shopping ads | Create Google Merchant Center feed, bid on these keywords |
| **Shopping Only** | Shopping visibility but weak/no organic | Create content (buying guides, comparison pages) for these keywords |
| **Both Present** | Visible in both channels | Optimize: ensure price consistency, enhance schema |
| **Neither** | No visibility in either | Low priority unless high volume |

### Output Format

```
## Keyword Gap Analysis: example.com

### Opportunities: Organic → Shopping (12 keywords)
| Keyword | Organic Pos | Volume | CPC | Recommended Action |
|---------|------------|--------|-----|-------------------|

### Opportunities: Shopping → Organic (8 keywords)
| Keyword | Shopping Rank | Volume | CPC | Content Type Needed |
|---------|-------------|--------|-----|-------------------|
```

---

## 5. Product Schema Enhancement

Validate and generate Product schema following Google's current requirements.

### Confirmed Required Properties (Google Merchant)

Confirmed required fields are `name`, `image`, and `offers`; use `Offer`, not `AggregateOffer`, for merchant listings.

```json
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "",
  "image": [""],
  "offers": {
    "@type": "Offer",
    "url": "",
    "priceCurrency": "USD",
    "price": "0.00",
    "availability": "https://schema.org/InStock"
  }
}
```

### Recommended Properties (Enhance Rich Results)

- `sku` -- product identifier
- `description`, `brand`, `offers.seller` -- recommended context fields
- `gtin13` / `gtin14` / `mpn` -- global trade identifiers
- `aggregateRating` -- star rating + review count
- `review` -- individual reviews (minimum 1)
- `color`, `material`, `size` -- variant attributes
- `shippingDetails` -- ShippingDetails with rate and delivery time (merchant-level shipping via `ShippingService` is also supported; shipping/returns can be set in Search Console without a Merchant Center account)
- `hasMerchantReturnPolicy` -- MerchantReturnPolicy with type and days
- `hasAdultConsideration` -- **required for adult-oriented products** (added 2026-05-20 to Product variant / Merchant listing); Google Search supports only the value `https://schema.org/SexualContentConsideration`
- `category` -- `Text`, `CategoryCode`, or an array mixing both. Use custom
  text for merchant-defined product types and `CategoryCode` with Google's
  taxonomy URL plus `codeValue` for Google Product Categories.

### Validation Rules

1. `price` must be a number string, not "$29.99" (no currency symbol)
2. `availability` must use full Schema.org URL enum
3. `image` should be array with >= 1 high-res image URL
4. `priceCurrency` must be ISO 4217 (USD, EUR, GBP)
5. If `brand` is present, `brand.name` must not be empty or "N/A"
6. Sale periods use `validFrom` plus either `validThrough` or
   `priceValidUntil`, in ISO 8601 format. Include time and timezone when known.
7. If `aggregateRating` present: `ratingValue` and `reviewCount` required
8. Do not include fake reviews or undisclosed incentivized reviews in visible
   content or structured data. Clearly and prominently disclose incentives.

### Schema Scoring

| Completeness | Score |
|-------------|-------|
| All required fields | 50/100 |
| + aggregateRating | 65/100 |
| + sku/gtin/mpn | 75/100 |
| + shippingDetails | 85/100 |
| + merchantReturnPolicy | 90/100 |
| + reviews (3+) | 100/100 |

---

## Cross-Skill Integration

| Skill | Integration Point |
|-------|------------------|
| **seo-schema** | Delegates Product schema generation; reuses validation logic |
| **seo-images** | Product image audit (alt text, format, dimensions), plus `DigitalSourceType: TrainedAlgorithmicMedia` IPTC label for AI-generated product images (Merchant Center requirement) |
| **seo-content** | Product description E-E-A-T and uniqueness analysis |
| **seo-dataforseo** | Organic keyword rankings for gap analysis |
| **seo-technical** | Core Web Vitals for product pages (LCP on hero image) |
| **seo-hreflang** | Region-specific result units: product queries in the EEA, South Africa, and Turkiye can show supplier units and carousels with their own eligibility rules (documented 2026-09-08) |
| **seo-google** | GSC indexation + Performance data for product URLs (NOT Merchant Center feed validation, that is done in Merchant Center / the **Merchant API**; the legacy Content API for Shopping sunsets 2026-08-18) |

## UCP: Universal Commerce Protocol (live)

Google-initiated open standard (co-developed with Shopify, Etsy, Wayfair,
Target, Walmart; payment partners Visa/Mastercard/Stripe/Adyen/Amex) for
letting AI agents discover, negotiate, and transact with merchants without
one-off integrations. Google confirms a first reference implementation for
conversational buying in AI Mode in Search. Broader Universal Cart rollout
details are reported from Google I/O 2026 keynote coverage; not confirmed on a
Google-owned source. ucp.dev lists **2026-04-08** as the latest release in its
**date-based versioning** scheme, not `1.0`; two integration paths: **Native**
(default) and **Embedded** (approved merchants). Pairs with **AP2** (reportedly
moving toward FIDO governance). Canonical: developers.google.com/merchant/ucp
and ucp.dev.

Merchants already on **Google Merchant Center** with clean Product schema can
declare a UCP profile at `/.well-known/ucp` listing capabilities
(`dev.ucp.shopping.checkout`, `.fulfillment`, `.discount`). See
`references/ucp-universal-commerce-protocol.md` for audit criteria,
capability examples, and the relationship to AP2 (Agent Payments Protocol).

### Audit command

```bash
# Discover and validate the UCP profile
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run ucp_check.py https://store.example.com --json

# With endpoint reachability probes (HEAD each declared capability)
"${CLAUDE_PLUGIN_ROOT}/scripts/claude-seo" run ucp_check.py https://store.example.com --probe-endpoints --json
```

The script returns: profile presence, version, declared capabilities,
structural issues (missing fields, unknown capability IDs), and (with
`--probe-endpoints`) per-endpoint reachability. SSRF-blocked endpoints are
reported explicitly. Missing profile is reported as opportunity, not failure.
UCP itself is live; what's early is broad merchant adoption. Flag a literal
`"version": "1.0"` as invalid (UCP versions are date-based, e.g. `2026-04-08`).

---

## Error Handling

| Error | Cause | Response |
|-------|-------|----------|
| No Product schema found | Page lacks JSON-LD | Analyze page content, generate recommended schema |
| DataForSEO credentials missing | Env vars not set | Run analysis without marketplace data, note limitation |
| Cost check blocked | Daily budget exceeded | Inform user, offer free-only analysis |
| Empty Shopping results | No products for keyword | Suggest broader keyword, check location settings |
| Amazon API timeout | Network/rate limit | Retry with backoff, fall back to Google-only |
| Invalid URL | Malformed input | Validate via `google_auth.validate_url()`, show error |
| Non-product page | URL is category/homepage | Detect page type, suggest `/seo ecommerce schema` instead |

---

## Output Template

```
## E-commerce SEO Report: [URL or Keyword]

### Overall Score: XX/100

### Product Page SEO
- Schema Completeness: XX/100
- Title & Meta: XX/100
- Image Optimization: XX/100
- Content Quality: XX/100
- Internal Linking: XX/100

### Marketplace Intelligence (if DataForSEO available)
- Google Shopping Listings: N products found
- Price Range: $XX - $XX (median: $XX)
- Top Seller: [name] (XX% market share)
- Amazon Comparison: [available/not checked]

### Top Recommendations
1. [Critical] ...
2. [High] ...
3. [Medium] ...

Generate a PDF report? Use `/seo google report`
```

Questions

Questions people ask before installing

Does it work on Shopify and WooCommerce?

Yes. It reads rendered HTML, so the platform does not matter, and it needs no store access: the URL is enough for the page analysis and the schema enhancement.

What does the DataForSEO half cost?

The skill runs `dataforseo_costs.py check` before each Merchant call and stops if your daily budget is exceeded; Amazon endpoints always ask first. The price itself is DataForSEO’s and is not published here.

Will it edit my product pages?

No. It outputs a report and recommended JSON-LD. Applying it is your job.