seo-best-practices — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo-best-practices (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Comprehensive SEO patterns for web applications built with React and Laravel. Contains 31 rules across 8 categories covering Core Web Vitals, technical SEO, structured data, performance, social sharing, and mobile-first indexing. Supports both coding reference and audit mode.
When the user asks to "audit SEO", "check SEO", or "review SEO" — run the checklist below against their codebase.
$ARGUMENTS): audit only those pages or filesUse the detection logic in "Step 1: Detect Project Type" below to determine Laravel Blade vs Laravel + Inertia + React.
Work through every item below. For each, output:
file:line, description of the issue, and fix recommendation#### Core Web Vitals
fetchpriority="high" and are preloaded (LCP < 2.5s)width/height attributes (CLS < 0.1)#### Technical SEO
<title> tag (50-60 characters)<meta name="description"> (150-160 characters)<link rel="canonical"> pointing to the correct URLrobots.txt exists and does not block important pages#### On-Page SEO
<h1> per page containing the primary keywordalt text (not empty, not "image", not filename)<article>, <section>, <nav>, <main>)#### Structured Data
@graph when combining multiple schema types#### Performance SEO
loading="lazy"font-display: swap or optional<link rel="preconnect"> or <link rel="preload">#### Social Sharing
og:title, og:description, og:image, og:url, og:type)og:image is at least 1200x630pxtwitter:card, at minimum summary_large_image)#### React/SPA SEO (if applicable)
<Head> component or equivalent)head-key attribute used to prevent duplicate meta tags (Inertia.js)#### Mobile-First
<meta name="viewport" content="width=device-width, initial-scale=1"> presentEnd the audit with:
## SEO Audit Summary
- **PASS**: X checks
- **FAIL**: X checks
- **N/A**: X checks
- **Top Priority Fixes**: (list the 3 most impactful FAIL items)Reference these guidelines when:
<title>, description, canonical, robots)Always check the project stack before giving advice. Different stacks need different SEO approaches.
Check package.json and project structure:
| Signal | Project Type |
|---|---|
@inertiajs/react in dependencies | Laravel + Inertia + React |
resources/views/**/*.blade.php only (no React) | Laravel Blade (server-rendered) |
If Laravel Blade: Apply tech-, onpage-, schema-, perf-, social-, mobile- rules. Meta tags go in Blade layouts. Sitemaps via spatie/laravel-sitemap. Skip spa- rules — pages are already server-rendered.
If Laravel + Inertia + React: Apply all rules. Meta tags via @inertiaHead in Blade layout + <Head> component from @inertiajs/react in React pages. For SSR, create resources/js/ssr.jsx using createServer from @inertiajs/react/server, add ssr: 'resources/js/ssr.jsx' to Vite config, build with vite build && vite build --ssr, and run php artisan inertia:start-ssr. Use head-key attribute on meta tags to prevent duplicates between layout and page. Focus on schema-, social-, and perf- rules.
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Core Web Vitals | CRITICAL | cwv- |
| 2 | Technical SEO | CRITICAL | tech- |
| 3 | On-Page SEO | HIGH | onpage- |
| 4 | Structured Data | HIGH | schema- |
| 5 | Performance SEO | HIGH | perf- |
| 6 | Social Sharing | HIGH | social- |
| 7 | React/SPA SEO | HIGH | spa- |
| 8 | Mobile-First | MEDIUM | mobile- |
cwv-lcp - Largest Contentful Paint optimization (<2.5s)cwv-inp - Interaction to Next Paint optimization (<200ms)cwv-cls - Cumulative Layout Shift prevention (<0.1)tech-meta-tags - Essential HTML meta tags (title, description, canonical)tech-canonical-urls - Canonical URL implementationtech-robots-txt - Robots.txt configurationtech-sitemap-xml - XML sitemap generationtech-url-structure - SEO-friendly URL patternsonpage-headings - Heading hierarchy and structureonpage-semantic-html - Semantic HTML for SEO and accessibilityonpage-internal-linking - Internal linking strategyonpage-images - Image optimization and alt textschema-json-ld - JSON-LD structured data basicsschema-article - Article and BlogPosting markupschema-product - Product schema for e-commerceschema-breadcrumb - BreadcrumbList navigation markupschema-graph - Combining multiple schema types with @graphschema-faq - FAQ page schema markupschema-validation - Structured data validation and monitoringperf-image-formats - Modern image formats (WebP/AVIF)perf-lazy-loading - Lazy loading implementationperf-font-loading - Web font loading strategyperf-resource-hints - Preconnect, preload, and prefetchsocial-open-graph - Open Graph meta tagssocial-twitter-cards - Twitter/X Card meta tagsspa-rendering-strategy - SSR vs CSR vs SSG for SEOspa-meta-management - Dynamic meta tag managementspa-routing - SPA routing and crawlabilitymobile-viewport - Viewport and responsive configurationmobile-content-parity - Content parity between mobile and desktopmobile-ux - Mobile UX requirements for SEO<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"
/>Read individual rule files for detailed explanations and code examples:
rules/tech-meta-tags.md
rules/schema-json-ld.md
rules/cwv-lcp.md
rules/spa-rendering-strategy.md
rules/social-open-graph.mdEach rule file contains:
For the complete guide with all rules expanded: AGENTS.md
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.