Loading...
Loading...
Use when the user needs technical SEO audits, meta tag optimization, structured data markup, Core Web Vitals improvement, or search engine visibility enhancement. Trigger conditions: site audit request, meta tag review, Schema.org implementation, page speed optimization, indexability issues, sitemap or robots.txt configuration, hreflang setup, Open Graph or Twitter Card tags, rich snippet eligibility.
npx skill4agent add pixel-process-ug/superkit-agents seo-optimizerSTOP — Do NOT proceed to Phase 2 until audit findings are documented and prioritized.
STOP — Do NOT proceed to Phase 3 until on-page changes are implemented and verified.
STOP — Do NOT proceed to Phase 4 until structured data passes validation.
| Finding | Severity | Fix Priority | Impact |
|---|---|---|---|
| No HTTPS / mixed content | Critical | Immediate | Ranking penalty, trust signals |
| Missing canonical URLs | Critical | Immediate | Duplicate content dilution |
| Broken redirect chains (3+ hops) | High | This sprint | Crawl budget waste, link equity loss |
| Missing or duplicate title tags | High | This sprint | CTR drop, ranking confusion |
| No structured data | Medium | Next sprint | Missing rich snippets |
| Missing alt text on images | Medium | Next sprint | Accessibility and image search loss |
| Suboptimal Core Web Vitals | Medium | Next sprint | Ranking signal, user experience |
| Missing hreflang tags (multi-language) | Low | Backlog | Geo-targeting issues |
| Non-descriptive URL slugs | Low | Backlog | Minor ranking and CTR effect |
<head>
<!-- Primary -->
<title>Primary Keyword - Secondary Keyword | Brand Name</title>
<meta name="description" content="Compelling 150-160 char description with target keyword and clear value proposition.">
<link rel="canonical" href="https://example.com/page">
<!-- Robots -->
<meta name="robots" content="index, follow">
<!-- or noindex, nofollow for pages that shouldn't be indexed -->
<!-- Viewport (mobile) -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Open Graph -->
<meta property="og:type" content="website">
<meta property="og:title" content="Page Title for Social Sharing">
<meta property="og:description" content="Description optimized for social sharing.">
<meta property="og:image" content="https://example.com/og-image.jpg">
<meta property="og:url" content="https://example.com/page">
<meta property="og:site_name" content="Brand Name">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Page Title">
<meta name="twitter:description" content="Twitter-optimized description.">
<meta name="twitter:image" content="https://example.com/twitter-image.jpg">
<!-- Internationalization -->
<link rel="alternate" hreflang="en" href="https://example.com/en/page">
<link rel="alternate" hreflang="de" href="https://example.com/de/page">
<link rel="alternate" hreflang="x-default" href="https://example.com/page">
</head>| Element | Max Length | Priority Keywords | Common Mistakes |
|---|---|---|---|
| Title tag | 50-60 chars | Front-load primary keyword | Too long, keyword stuffing, duplicate |
| Meta description | 150-160 chars | Include CTA and keyword | Missing, duplicate, no CTA |
| H1 | N/A (single per page) | Primary keyword variation | Multiple H1s, missing H1 |
| URL slug | 3-5 words | Target keyword | Too long, parameters, underscores |
| Image alt | 125 chars | Descriptive, keyword if natural | Empty, "image of...", keyword stuffing |
| OG title | 60-90 chars | Engaging, shareable | Same as title tag (missed opportunity) |
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "How to Optimize Core Web Vitals",
"author": {
"@type": "Person",
"name": "Jane Smith",
"url": "https://example.com/authors/jane-smith"
},
"datePublished": "2026-03-01",
"dateModified": "2026-03-15",
"image": "https://example.com/images/article-hero.jpg",
"publisher": {
"@type": "Organization",
"name": "Example Blog",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
},
"description": "A comprehensive guide to improving LCP, FID, and CLS scores."
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Widget Pro",
"description": "Professional-grade widget for enterprise use.",
"image": "https://example.com/widget-pro.jpg",
"brand": { "@type": "Brand", "name": "WidgetCo" },
"offers": {
"@type": "Offer",
"price": "49.99",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://example.com/widget-pro"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "312"
}
}
</script><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is Core Web Vitals?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Core Web Vitals are a set of metrics that measure real-world user experience for loading, interactivity, and visual stability."
}
}
]
}
</script>| Content Type | Schema Type | Rich Result |
|---|---|---|
| Blog post | Article | Article snippet |
| Product page | Product | Price, rating, availability |
| FAQ section | FAQPage | Expandable Q&A |
| How-to guide | HowTo | Step-by-step snippet |
| Recipe | Recipe | Image, time, rating |
| Event | Event | Date, location, price |
| Local business | LocalBusiness | Map pack, hours |
| Software | SoftwareApplication | Rating, price |
| Breadcrumbs | BreadcrumbList | Breadcrumb trail |
| Video | VideoObject | Thumbnail, duration |
| Metric | Good | Needs Improvement | Poor | Measures |
|---|---|---|---|---|
| LCP (Largest Contentful Paint) | <= 2.5s | <= 4.0s | > 4.0s | Loading performance |
| INP (Interaction to Next Paint) | <= 200ms | <= 500ms | > 500ms | Interactivity |
| CLS (Cumulative Layout Shift) | <= 0.1 | <= 0.25 | > 0.25 | Visual stability |
<!-- Preload hero image -->
<link rel="preload" as="image" href="/hero.webp" fetchpriority="high">
<!-- Use modern image formats -->
<picture>
<source srcset="/hero.avif" type="image/avif">
<source srcset="/hero.webp" type="image/webp">
<img src="/hero.jpg" alt="Hero description" width="1200" height="600"
fetchpriority="high" decoding="async">
</picture>/* Always set dimensions on images and video */
img, video {
width: 100%;
height: auto;
aspect-ratio: 16 / 9;
}
/* Reserve space for dynamic content */
.ad-slot {
min-height: 250px;
}
/* Avoid inserting content above existing content */
.notification-bar {
position: fixed; /* doesn't shift layout */
}// Break long tasks with yield
async function processLargeDataset(data) {
for (let i = 0; i < data.length; i++) {
processItem(data[i]);
if (i % 100 === 0) {
await new Promise(resolve => setTimeout(resolve, 0)); // yield to main thread
}
}
}
// Use requestIdleCallback for non-critical work
requestIdleCallback(() => {
loadAnalytics();
initNonCriticalFeatures();
});<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/</loc>
<lastmod>2026-03-15</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://example.com/products</loc>
<lastmod>2026-03-14</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
</urlset>lastmodUser-agent: *
Allow: /
Disallow: /admin/
Disallow: /api/
Disallow: /search?
Disallow: /*?sort=
Disallow: /*?filter=
Sitemap: https://example.com/sitemap.xmlimport type { Metadata } from 'next';
export const metadata: Metadata = {
title: {
template: '%s | Brand Name',
default: 'Brand Name - Tagline',
},
description: 'Site-wide default description.',
openGraph: {
type: 'website',
locale: 'en_US',
url: 'https://example.com',
siteName: 'Brand Name',
},
twitter: {
card: 'summary_large_image',
},
robots: {
index: true,
follow: true,
},
alternates: {
canonical: 'https://example.com',
},
};export async function generateMetadata({ params }): Promise<Metadata> {
const product = await getProduct(params.slug);
return {
title: product.name,
description: product.description.slice(0, 160),
openGraph: {
title: product.name,
description: product.description.slice(0, 200),
images: [{ url: product.image, width: 1200, height: 630 }],
},
};
}| Anti-Pattern | Why It Fails | What To Do Instead |
|---|---|---|
| Keyword stuffing in titles/content | Triggers spam filters, reduces CTR | Use primary keyword once naturally, add variations |
| Same title/description across pages | Duplicate content signals, wasted opportunity | Unique, page-specific meta for every indexable URL |
| Blocking CSS/JS in robots.txt | Googlebot cannot render pages | Allow all rendering resources |
| Structured data mismatching page content | Google penalties, rich snippet removal | Schema must reflect visible content exactly |
| Redirect chains > 2 hops | Crawl budget waste, link equity loss | Redirect directly to final destination |
| JS-only navigation without SSR links | Crawler cannot discover pages | Server-render navigation links |
| Ignoring Core Web Vitals | Ranking signal degradation | Profile and optimize LCP, INP, CLS |
| Missing canonical URLs | Duplicate content penalties | Set canonical on every indexable page |
| Over-optimized anchor text | Unnatural link patterns trigger penalties | Use descriptive, varied anchor text |
| Hiding content with CSS for SEO | Cloaking violation | All SEO content must be visible to users |
| Skill | How It Connects |
|---|---|
| SEO informs keyword targeting and headline strategy for marketing content |
| Research-backed content needs SEO-optimized structure and meta tags |
| Core Web Vitals optimization requires frontend performance tuning |
| Page speed directly affects LCP and INP scores |
| SEO changes need proper cache invalidation and redirect configuration |
| Documentation sites need sitemap, canonical, and structured data setup |