technical-seo
Skill4 starsChanged 32 days agoMITView on GitHub
This skill should be used when making a web app or SaaS discoverable and shareable — meta tags, OpenGraph/social previews, sitemap, robots.txt, structured data, or fixing the empty-HTML problem of a React SPA. Trigger phrases include "improve SEO", "add meta tags", "OpenGraph", "social share preview", "sitemap", "robots.txt", "structured data", "JSON-LD", "my page has no preview on Twitter/WhatsApp", "Google can't see my SPA", "prerender". It generates the head tags, files, and prerendering an SPA needs to be indexed and shared.
10 other projects use a version of this.
Adopted by
Most recently taken up by
- 6t9xstar/one-step-seotheir own version, first seen Nov 8, 2026
- uprinter/ai-agents-teamtheir own version, first seen Nov 8, 2026
- nisarth/claude-skills-storetheir own version, first seen Nov 8, 2026
- astDeniss/business-skillstheir own version, first seen Nov 1, 2026
- manifoldmcp/marketing-skillstheir own version, first seen Oct 17, 2026
- teachskillofskills-ai/DigitalMarketingPro-techshutheir own version, first seen Oct 11, 2026
Other versions10 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 10
- indranilbanerjee/digital-marketing-pro★ 934same name
- agencia-conversion/agentic-seo-skills★ 51same name
- searchfit/searchfit-seo★ 9same name
- astDeniss/business-skills★ 8same name
- 6t9xstar/one-step-seo★ 5same name
- manifoldmcp/marketing-skills★ 4same name
- nisarth/claude-skills-store★ 1same name
- novatic-cu/nova-skills★ 1same name
- uprinter/ai-agents-team★ 1same name
- teachskillofskills-ai/DigitalMarketingPro-techshu★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository21 other files it gives its agents.
- accessibilitySkill
- ai-featuresSkill
- api-designSkill
- architecture-primerSkill
- authSkill
- data-modelingSkill
- deploymentSkill
- design-taste-frontendSkill
- frontend-performanceSkill
- image-to-codeSkill
- integrationsSkill
- landing-pageSkill
- multi-tenancySkill
- paymentsSkill
- pre-ship-securitySkill
- product-discoverySkill
- pwaSkill
- rls-auditSkill
- saas-routerSkill
- secure-codingSkill
- ui-designSkill
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 1 is distinctive, and 4 are very specific to this project.
0
Common
Most of the 8 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 26
Use react-helmet-async to set per route: unique <title>, <meta name="description">, a canonical link, and OpenGraph + Twitter Card tags:
- Very specific: line 29
Always absolute URLs in og:image/canonical (relative URLs break previews).
- Very specific: line 60
Apex →
wwwanswered 307: instead of a permanent redirect. - Very specific: line 62
A font subset fell back silently: only latin-ext was loaded, and that subset does not contain the basic Latin characters — it extends …
- Distinctive: line 65
Verify ownership by domain in Search Console and submit the sitemap there.
“Common” is measured: kept by at least 6 in 10 of the 8 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Technical SEO
This skill makes a SaaS findable by Google and shareable on social — and fixes the specific trap of a Vite SPA serving near-empty HTML that crawlers can't read.
Analogy: an SPA is a book with a blank cover and blank first page until you open it and read aloud. Search crawlers and social bots only glance at the cover — if it's blank, they walk away. SEO here is printing a real cover (server-rendered head tags) so they see what the book is about.
The SPA problem (state it upfront)
A Vite SPA serves near-empty HTML; content and meta tags appear only after JS runs. Social crawlers (WhatsApp, Twitter, LinkedIn) don't run JS at all, so share previews need tags that are injected server-side or prerendered — client-only react-helmet alone won't show a preview on WhatsApp.
Be precise about Google, though. Googlebot does render JavaScript: for one production SPA, Search Console's URL inspection showed the fully rendered page indexed. So do not migrate frameworks for Google alone — check your own site in Search Console first. What remains true: rendering is deferred, social bots never run JS, and you should not assume AI crawlers do. Prerender the public routes for those reasons.
Discovery (max 3 questions, only if unknown)
- Which pages need SEO — public marketing/landing/pricing, or also app routes?
- Is the broken thing indexing (Google) or social previews (no image on share)?
- Can you prerender marketing routes to static HTML, or must it stay a pure SPA?
Step 1 — Per-page head tags
Use react-helmet-async to set per route: unique <title>, <meta name="description">, a canonical link, and OpenGraph + Twitter Card tags:
og:title,og:description,og:image(1200×630),og:url,twitter:card=summary_large_image.- Always absolute URLs in
og:image/canonical (relative URLs break previews). - Set
<html lang>and one canonical per page to avoid duplicate-content issues.
Step 2 — Make crawlers actually see them (the high-impact fix)
- Marketing/landing routes → prerender to static HTML with
vite-ssg(or React SSR). Crawlers get real content + OG tags in the initial response. This is the single highest-impact change. - Pure CSR SPA, OG tags only → the "OG proxy" pattern: a Vercel function +
vercel.jsonrewrite that detects social/bot user-agents and serves HTML with the correct meta injected.
Step 3 — Ship the crawl files
robots.txtin/public: allow crawl of public routes, block private/app routes, and point to the sitemap (Sitemap: https://domain.com/sitemap.xml).sitemap.xmlgenerated at build time (viavite-ssgoutput or a sitemap plugin), listing public URLs with<lastmod>. Submit it in Google Search Console.
Step 4 — Structured data (JSON-LD)
Add <script type="application/ld+json"> blocks:
Organization+SoftwareApplication/Producton home/pricing.FAQPageon FAQ sections.BreadcrumbListwhere relevant. Validate with Google's Rich Results Test.
Step 5 — Performance is SEO
Core Web Vitals feed ranking. Hand off to the frontend-performance skill: code-split routes, lazy-load below-the-fold images, serve modern image formats, keep third-party scripts async/minimal.
Field notes — check the live output, not the code
Each of these shipped past a green build:
- No
robots.txtorsitemap.xmlat all, no canonical tag, andlang="en"on a Spanish site. Request the files; read the<html>tag. - A sitemap split in the middle of every URL and a broken
Sitemap:line — the base URL came from an environment variable with a trailing newline. Open the sitemap in a browser. - Apex →
wwwanswered 307 instead of a permanent redirect. - The social image rendered with the system font because it was generated from a
file://page where the web font never loaded. Look at the actual image. - A font subset fell back silently: only
latin-extwas loaded, and that subset does not contain the basic Latin characters — it extendslatin, it does not include it. - Analytics proxied through a rewrite located every visitor in a data center (see
deploymentfield notes).
Verify ownership by domain in Search Console and submit the sitemap there; it is also the only reliable way to see what Google actually rendered.
Output
Deliver: the react-helmet-async head component with OG/Twitter tags, the prerender or OG-proxy setup, robots.txt, the sitemap generation step, and the JSON-LD blocks for the key pages.
Reference
Google Search Central docs, react-helmet-async, antfu-collective/vite-ssg, Vercel functions / vercel.json rewrites.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

