Loading...
Loading...
SEO patterns, conventions, and audit for web applications. Use when implementing meta tags, structured data, Core Web Vitals, sitemaps, Open Graph, auditing SEO, or optimizing pages for search engines. Triggers on "audit SEO", "check SEO", "review SEO", or tasks involving search optimization, schema markup, or social sharing meta tags.
npx skill4agent add asyrafhussin/agent-skills seo-best-practices$ARGUMENTSfile:linefetchpriority="high"widthheight<title><meta name="description"><link rel="canonical">robots.txt<h1>alt<article><section><nav><main>@graphloading="lazy"font-display: swapoptional<link rel="preconnect"><link rel="preload">og:titleog:descriptionog:imageog:urlog:typeog:imagetwitter:cardsummary_large_image<Head>head-key<meta name="viewport" content="width=device-width, initial-scale=1">## SEO Audit Summary
- **PASS**: X checks
- **FAIL**: X checks
- **N/A**: X checks
- **Top Priority Fixes**: (list the 3 most impactful FAIL items)<title>package.json| Signal | Project Type |
|---|---|
| Laravel + Inertia + React |
| Laravel Blade (server-rendered) |
tech-onpage-schema-perf-social-mobile-spatie/laravel-sitemapspa-@inertiaHead<Head>@inertiajs/reactresources/js/ssr.jsxcreateServer@inertiajs/react/serverssr: 'resources/js/ssr.jsx'vite build && vite build --ssrphp artisan inertia:start-ssrhead-keyschema-social-perf-| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Core Web Vitals | CRITICAL | |
| 2 | Technical SEO | CRITICAL | |
| 3 | On-Page SEO | HIGH | |
| 4 | Structured Data | HIGH | |
| 5 | Performance SEO | HIGH | |
| 6 | Social Sharing | HIGH | |
| 7 | React/SPA SEO | HIGH | |
| 8 | Mobile-First | MEDIUM | |
cwv-lcpcwv-inpcwv-clstech-meta-tagstech-canonical-urlstech-robots-txttech-sitemap-xmltech-url-structureonpage-headingsonpage-semantic-htmlonpage-internal-linkingonpage-imagesschema-json-ldschema-articleschema-productschema-breadcrumbschema-graphschema-faqschema-validationperf-image-formatsperf-lazy-loadingperf-font-loadingperf-resource-hintssocial-open-graphsocial-twitter-cardsspa-rendering-strategyspa-meta-managementspa-routingmobile-viewportmobile-content-paritymobile-ux<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Page Title — Site Name</title>
<meta name="description" content="Concise 150-160 character description of page content." />
<link rel="canonical" href="https://example.com/page" />
<!-- Open Graph -->
<meta property="og:title" content="Page Title" />
<meta property="og:description" content="Description 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:type" content="website" />
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
</head><script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article Title",
"author": {
"@type": "Person",
"name": "Author Name"
},
"datePublished": "2026-03-14",
"dateModified": "2026-03-14",
"image": "https://example.com/article-image.jpg",
"publisher": {
"@type": "Organization",
"name": "Site Name",
"logo": {
"@type": "ImageObject",
"url": "https://example.com/logo.png"
}
}
}
</script>import { Head } from '@inertiajs/react'
interface Post {
title: string;
slug: string;
excerpt: string;
image: string;
}
function BlogPost({ post }: { post: Post }) {
return (
<>
<Head>
<title>{post.title} — Blog</title>
<meta head-key="description" name="description" content={post.excerpt} />
<link rel="canonical" href={`https://example.com/blog/${post.slug}`} />
<meta property="og:title" content={post.title} />
<meta property="og:description" content={post.excerpt} />
<meta property="og:image" content={post.image} />
<meta property="og:type" content="article" />
<meta name="twitter:card" content="summary_large_image" />
</Head>
<article>{/* content */}</article>
</>
)
}LCP < 2.5s Preload hero image, use fetchpriority="high"
INP < 200ms Break long tasks, yield to main thread
CLS < 0.1 Set width/height on images, reserve space for dynamic content<!-- Modern formats with fallback -->
<picture>
<source srcset="hero.avif" type="image/avif" />
<source srcset="hero.webp" type="image/webp" />
<img
src="hero.jpg"
alt="Descriptive alt text for the image"
width="1200"
height="630"
fetchpriority="high"
/>
</picture>
<!-- Responsive images -->
<img
srcset="photo-400.webp 400w, photo-800.webp 800w, photo-1200.webp 1200w"
sizes="(max-width: 600px) 400px, (max-width: 900px) 800px, 1200px"
src="photo-800.webp"
alt="Descriptive alt text"
width="1200"
height="800"
loading="lazy"
/>rules/tech-meta-tags.md
rules/schema-json-ld.md
rules/cwv-lcp.md
rules/spa-rendering-strategy.md
rules/social-open-graph.mdAGENTS.md