seo — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited seo (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.
Traditional search optimization plus optimization for AI answer engines (2026 landscape).
| Layer | Target | Optimizes For |
|---|---|---|
| SEO | Google, Bing | Crawlers, backlinks, keyword relevance |
| AEO | Featured snippets, voice search | Direct question-answer matching |
| GEO | ChatGPT, Perplexity, Claude, AI Overviews | Being cited/quoted by LLMs |
✓ robots.txt allows crawling of important pages
✓ sitemap.xml submitted to Search Console
✓ Canonical URLs set on every page
✓ No duplicate content (or rel=canonical pointing to original)
✓ Mobile-responsive (Google is mobile-first indexing)
✓ Core Web Vitals pass (LCP < 2.5s, INP < 200ms, CLS < 0.1)
✓ HTTPS everywhere
✓ Structured data (JSON-LD) on key page types// app/blog/[slug]/page.tsx
import type { Metadata } from "next"
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const post = await getPost(params.slug)
return {
title: `${post.title} | YourBrand`,
description: post.excerpt.slice(0, 160),
keywords: post.tags,
alternates: {
canonical: `https://example.com/blog/${post.slug}`,
},
openGraph: {
title: post.title,
description: post.excerpt,
type: "article",
publishedTime: post.publishedAt,
authors: [post.author.name],
images: [{ url: post.ogImage, width: 1200, height: 630 }],
},
twitter: {
card: "summary_large_image",
title: post.title,
description: post.excerpt,
images: [post.ogImage],
},
}
}// Article schema
function ArticleSchema({ post }: { post: Post }) {
const schema = {
"@context": "https://schema.org",
"@type": "Article",
headline: post.title,
description: post.excerpt,
image: post.ogImage,
datePublished: post.publishedAt,
dateModified: post.updatedAt,
author: { "@type": "Person", name: post.author.name },
publisher: {
"@type": "Organization",
name: "YourBrand",
logo: { "@type": "ImageObject", url: "https://example.com/logo.png" },
},
}
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
/>
)
}
// FAQ schema (also boosts AEO — see below)
const faqSchema = {
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: faqs.map(faq => ({
"@type": "Question",
name: faq.question,
acceptedAnswer: { "@type": "Answer", text: faq.answer },
})),
}Goal: get your content selected as a featured snippet or voice search answer.
## How long does it take to set up a SaaS MVP?
A typical SaaS MVP takes 4-8 weeks to launch, depending on feature scope.
The breakdown: 2-3 days for project setup, 1 week for auth and billing
integration, and 2-4 weeks for core feature development.
<!-- Direct, complete answer in the FIRST sentence — this is what gets
extracted into featured snippets and voice answers -->1. Question as H2/H3 heading (matches actual search queries)
2. Direct answer in first sentence (40-60 words ideal for snippets)
3. Supporting detail/context after
4. Bullet points or numbered lists for scannable answers## What is Row-Level Security in PostgreSQL?
Row-Level Security (RLS) is a PostgreSQL feature that restricts which rows
a user can access in a table, based on policies you define. Unlike
application-level checks, RLS enforces access control at the database
layer itself.
Key benefits:
- Enforced even if application code has bugs
- Works across all database clients (not just your app)
- Reduces duplicate authorization logicGoal: get cited, quoted, or referenced by AI systems (ChatGPT, Perplexity, Claude, Google AI Overviews).
<article>, <section>, proper heading hierarchy<!-- ✅ Citable: specific, attributable claim -->
According to our 2026 survey of 500 SaaS companies, 73% use PostgreSQL
as their primary database, up from 61% in 2024.
<!-- ❌ Not citable: vague, no source -->
Most companies use SQL databases these days.<!-- ✅ Definition format LLMs extract easily -->
**Row-Level Security (RLS)** is a PostgreSQL access-control mechanism
that filters query results based on the requesting user's identity,
enforced at the database engine level rather than in application code.
<!-- Structured for extraction: term in bold, clear definition follows -->// E-E-A-T signals (Experience, Expertise, Authoritativeness, Trust)
// LLMs and search engines both weight these
const authorSchema = {
"@context": "https://schema.org",
"@type": "Person",
name: "Author Name",
jobTitle: "Senior Backend Engineer",
worksFor: { "@type": "Organization", name: "Company" },
sameAs: [
"https://linkedin.com/in/author",
"https://github.com/author",
],
}# llms.txt — at your domain root, similar to robots.txt
# Signals to AI crawlers what content is most important/citable
# YourBrand
> One-line description of what your site/product does.
## Documentation
- [API Reference](https://example.com/docs/api): Full API documentation
- [Getting Started](https://example.com/docs/start): Quickstart guide
## Key Pages
- [Pricing](https://example.com/pricing): Current pricing tiers
- [Changelog](https://example.com/changelog): Recent product updates# [Primary Keyword] — [Value Proposition]
<!-- H1: include primary keyword naturally, keep under 60 chars -->
[Hook paragraph: 2-3 sentences, state the problem and your solution.
Include primary keyword in first 100 words.]
## What is [Primary Keyword]?
<!-- AEO: direct definition, extractable -->
[40-60 word direct answer]
## Why [Primary Keyword] Matters
<!-- Supporting context, secondary keywords naturally woven in -->
## How [Product] Solves [Problem]
<!-- Feature breakdown with H3s for each feature -->
### [Feature 1]
[Benefit-focused description]
### [Feature 2]
[Benefit-focused description]
## Frequently Asked Questions
<!-- AEO + FAQ schema — high snippet/voice-answer potential -->
### [Question matching real search query]
[Direct answer, 40-60 words]
### [Question matching real search query]
[Direct answer, 40-60 words]
## [CTA Section]
[Clear single call-to-action]| Metric | Tool | Tracks |
|---|---|---|
| Organic traffic | Google Search Console | Traditional SEO |
| Featured snippets | Search Console + manual checks | AEO |
| AI citations | Manual prompting of ChatGPT/Perplexity/Claude | GEO |
| Core Web Vitals | PageSpeed Insights, Vercel Analytics | Technical SEO |
| Keyword rankings | Ahrefs, SEMrush | SEO |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.