Persian SEO
TronIsHere/vibefarsiui
Technical and on-page SEO for Persian (Farsi) websites: lang and hreflang for fa-IR, RTL-safe metadata, Persian titles and descriptions, slug and URL strategy for Persian content, ZWNJ and keyword…
A skill your agent uses when one existing page needs to rank in Google AND get cited by AI answer engines — auditing a URL for on-page SEO, structured-data JSON-LD, GEO citation levers, Core Web…
$ npx skills add ericrisco/rsc-harness --skill seo-geo -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ericrisco/rsc-harness seo-geo --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/seo-geo .claude/skills/seo-geo && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "seo-geo" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geo into .claude/skills/seo-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-geo", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geoType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ericrisco/rsc-harness --skill seo-geo -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ericrisco/rsc-harness seo-geo --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/seo-geo .agents/skills/seo-geo && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "seo-geo" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geo into .agents/skills/seo-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-geo", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill seo-geo -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ericrisco/rsc-harness seo-geo --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/seo-geo .cursor/skills/seo-geo && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "seo-geo" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geo into .cursor/skills/seo-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-geo", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ericrisco/rsc-harness.git --path skills/seo-geo--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ericrisco/rsc-harness --skill seo-geo -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ericrisco/rsc-harness seo-geo --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/seo-geo .gemini/skills/seo-geo && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "seo-geo" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geo into .gemini/skills/seo-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-geo", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ericrisco/rsc-harness seo-geoInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ericrisco/rsc-harness --skill seo-geo -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/seo-geo .github/skills/seo-geo && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "seo-geo" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geo into .github/skills/seo-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-geo", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ericrisco/rsc-harness --skill seo-geo -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ericrisco/rsc-harness seo-geo --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/seo-geo .opencode/skills/seo-geo && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "seo-geo" agent skill from https://github.com/ericrisco/rsc-harness/tree/main/skills/seo-geo into .opencode/skills/seo-geo/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "seo-geo", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
seo-geoA skill your agent uses when one existing page needs to rank in Google AND get cited by AI answer engines — auditing a URL for on-page SEO, structured-data JSON-LD, GEO citation levers, Core Web…
SEO Geo is an agent skill from ericrisco/rsc-harness. Use when one existing page needs to rank in Google AND get cited by AI answer engines — auditing a URL for on-page SEO, structured-data JSON-LD, GEO citation levers, Core Web Vitals, crawlability, and AI-bot access in robots.txt. NOT writing the article body (that is article-writing), NOT keyword research or content strategy (that is content-engine).
Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/ai-crawler-control.md`).
It sits in Marketing & SEO, covering Schema markup, Technical SEO and Web performance. It works with Next.js. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e3d5b33. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Shell), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
SEO Geo loads about 2.8k tokens when it runs, and up to ~4.8k if it reads all its reference files. Until then it costs about 91 tokens; SKILL.md has 1,363 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from ericrisco/rsc-harness at commit e3d5b33, republished under its MIT licence (© ericrisco). 1,363 words, ~2,820 tokens.
.claude/skills/seo-geo/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.One audited page, two surfaces. You take an existing URL and make it rank in Google's blue links / AI Overviews and earn citations in ChatGPT Search, Perplexity, and Gemini — through meta, schema, answer-first structure, and a clean technical audit. You do not write the article body and you do not pick the keywords. That work belongs upstream.
Use when the request is about a concrete artifact:
Do NOT use — redirect instead:
| Request | Owner |
|---|---|
| Write the long-form article/blog body | article-writing |
| Keyword research, topic clusters, content calendar | content-engine |
| Write persuasive value-prop / CTA copy | landing-copy |
| Actually fix a slow LCP/INP (render path, hydration, bundle) | performance |
Wire Next.js generateMetadata / app-router SEO plumbing | ../nextjs/SKILL.md |
| WAI-ARIA / keyboard / contrast audit | accessibility |
| Measure traffic / set up GA4 / dashboards after the fact | analytics |
The load-bearing distinction: content-engine decides what to write and which
keywords to target (upstream strategy); you optimize the specific page that exists.
performance owns why a render is slow; you only measure Core Web Vitals against
the p75 thresholds, flag a fail, and hand off the fix.
Answer the primary query completely in the first ~40–200 words. Everything below is downstream of this. Why: Google extracts that opening for featured snippets and AI Overviews, and the Princeton GEO study (KDD 2024, 10k queries across 8 domains) found answer-first, source-cited content is what AI engines lift into their answers — not buried prose. If the page makes a reader scroll past an intro to reach the answer, no amount of schema saves it.
There is no separate "AI SEO" toggle for Google. AI Overviews and AI Mode run on the same Googlebot crawl, the same rendering, the same ranking, and the same E-E-A-T / helpful-content signals (folded into core ranking in March 2024). Good page experience and distinguishable main content serve both surfaces at once. Treat them as one job.
<h1>, then a logical <h2>/<h3> hierarchy that mirrors search
intent (the sub-questions a searcher actually has).<!-- Bad: vague, query buried, no length discipline -->
<title>Home | Our Awesome Company - Welcome to the Best Site Ever for You</title>
<meta name="description" content="We are a company. Learn more about us here today.">
<!-- Good: query first, within limits, earns the click -->
<title>Core Web Vitals: LCP, INP & CLS Thresholds (2026)</title>
<meta name="description"
content="The exact LCP, INP, and CLS pass thresholds Google uses at the p75 field
percentile — plus how to check yours in 2 minutes.">Pick from the live column. Shipping a deprecated type is dead markup: it renders
nothing and signals carelessness. The single highest-value guard in this skill is not
emitting a dead @type.
| Page type | Ship this JSON-LD | Why |
|---|---|---|
| Article / blog post | Article or BlogPosting — headline, author, datePublished, dateModified, image | Still eligible; dateModified is a freshness signal |
| Product page | Product + Offer — price, priceCurrency, availability, optional aggregateRating | Live rich result |
| Any page | BreadcrumbList, Organization / WebSite | Entity signals AI engines corroborate against |
| FAQ section | NOTHING for rich results | FAQ rich results restricted to health/gov since late 2023; full deprecation May 7 2026, API removed Aug 2026. Keep Q&A as visible prose. |
| Course / event-announcement / claim-review / salary / vehicle / learning-video | NOTHING | Retired June 2025 — dead markup |
Validate every block with the Rich Results Test and the Schema Markup Validator
(validator.schema.org) before shipping. Copy-paste blocks with required-vs-recommended
props and the full dead-types list are in
references/schema-recipes.md.
The Princeton GEO study quantified what moves source content into AI answers. Apply these as concrete edits — they are not vibes, they are deltas measured on GEO-bench:
dateModified. Recency is a genuine AI-source
signal; a stale-looking page is corroborated less.Why it is no longer optional: a citation in an AI Overview can lift CTR 80%+, while AI Overviews are compressing classic organic CTR (Gartner projected ~25% organic-traffic decline by 2026). GEO runs alongside on-page SEO, never instead of it.
Myth callout — llms.txt. Do not sell llms.txt as a ranking or AI-visibility
signal. Google (Illyes, Mueller) does not use it and likened it to the long-ignored
keywords meta tag; the major AI crawlers overwhelmingly skip /llms.txt and crawl HTML
directly. AI access is governed by robots.txt + real on-page authority, not a root
text file. Spending effort there is the modern keyword-meta-tag mistake.
Core Web Vitals (thresholds unchanged since INP replaced FID in March 2024):
| Metric | Good (p75) |
|---|---|
| LCP | ≤ 2.5s |
| INP | ≤ 200ms |
| CLS | ≤ 0.1 |
A URL passes only if ≥75% of real visits hit "good" at the p75 of the CrUX field
dataset. Lab tools (Lighthouse) estimate; CrUX / field decides. A green Lighthouse
score with a failing CrUX p75 is still a fail. Measure and flag here — hand the actual
render-path fix to performance (and to ../nextjs/SKILL.md for
App Router apps). Do not guess at LCP fixes in this skill.
Crawlability / indexability: correct <link rel="canonical">, a referenced
sitemap.xml, no stray noindex/Disallow on the page you want ranked, robots.txt
present and intentional.
AI-bot access (per purpose): robots.txt controls AI crawlers separately by purpose, and the choice has visibility consequences.
OAI-SearchBot, PerplexityBot, Claude-SearchBot)
removes you from that engine's citations. Block only the training bot
(GPTBot, ClaudeBot, CCBot) if you want citations but not training-corpus use.Google-Extended opts out of Google AI training — but AI Overviews are served by
ordinary Googlebot, so you cannot opt out of AI Overviews without leaving Search.The full 2026 user-agent table and robots.txt templates are in
references/ai-crawler-control.md.
Emit this as a pass/fail list per page. This is what scripts/verify.sh lints.
<title> ≤ 60 chars, query near front; meta description ≤ 160.<h1>; H2/H3 hierarchy matches intent.@context + @type, no dead type, validates in Rich
Results Test.noindex.| Anti-pattern | Why it fails | Do instead |
|---|---|---|
| Shipping FAQPage / Course / Vehicle JSON-LD for rich results | Deprecated (FAQ dead May 2026; seven types retired June 2025) — dead markup | Article/Product/Breadcrumb; keep Q&A as visible prose |
| Treating GEO as a separate job from Google SEO | AI Overviews use the same Googlebot / ranking / E-E-A-T | One audited page serves both surfaces |
Adding llms.txt to "rank in AI" | Google ignores it; AI bots skip it | Fix robots.txt + earn real authority/citations |
| Burying the answer under intro fluff | Snippets & AI extraction need answer-first | Answer the query in the first ~40–200 words |
| Keyword stuffing for AI citation | Princeton: stuffing didn't help; quotes/stats/cites did | Add statistics, quotations, cited sources |
| Blocking OAI-SearchBot/PerplexityBot, then expecting AI citations | Search bots feed the citations | Block only training bots if you want citations |
| Calling CWV "passed" off a green Lighthouse score | CrUX p75 field decides, not the lab | Read CrUX / field at p75; lab only estimates |
| Debugging an LCP regression inside this skill | Render-path work belongs to performance | Flag the fail, hand to performance |
When the audit hits a boundary, name the owner and stop:
content-engine.../article-writing/SKILL.md.landing-copy.performance.generateMetadata / sitemap route / app-router SEO → ../nextjs/SKILL.md.accessibility.analytics.© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (scripts, references) in skills/seo-geo of ericrisco/rsc-harness.
Open the folder on GitHubat commit e3d5b33
SEO Geo next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| SEO Geo this skillericrisco/rsc-harness | 174 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Persian SEOTronIsHere/vibefarsiui | 210 | — | ~1.7k | Automated safety check: Warn | None | |
| SEOgridaco/grida | 2.7k | — | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| SEOaffaan-m/ECC | 276k | 2 repos | ~1.1k | Automated safety check: Pass | MIT | |
| SEO AI Optimizerluongnv89/skills | 131 | — | ~2.7k | Automated safety check: Pass | MIT | |
| SEO Optimizeraiskillstore/marketplace | 430 | 1 repos | ~2.9k | Automated safety check: Pass | None |
TronIsHere/vibefarsiui
Technical and on-page SEO for Persian (Farsi) websites: lang and hreflang for fa-IR, RTL-safe metadata, Persian titles and descriptions, slug and URL strategy for Persian content, ZWNJ and keyword…
gridaco/grida
SEO best practices for the Grida project across Next.js pages, blog posts, and documentation.
affaan-m/ECC
Audit, plan, and implement SEO improvements across technical SEO, on-page optimization, structured data, Core Web Vitals, and content strategy.
luongnv89/skills
Audit and optimize websites for technical SEO, content SEO, and AI bot accessibility.
aiskillstore/marketplace
Search Engine Optimization specialist for content strategy, technical SEO, keyword research, and ranking improvements.
AgriciDaniel/claude-seo
Hub for site-wide SEO work: audits, technical checks, schema, content quality, local, hreflang and AI-search readiness, run through slash commands.
ericrisco/rsc-harness
A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…
ericrisco/rsc-harness
A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…
ericrisco/rsc-harness
A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…
ericrisco/rsc-harness
A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…
ericrisco/rsc-harness
A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…
ericrisco/rsc-harness
A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.
Works with
Categories
A skill your agent uses when one existing page needs to rank in Google AND get cited by AI answer engines — auditing a URL for on-page SEO, structured-data JSON-LD, GEO citation levers, Core Web…. SEO Geo is an agent skill from ericrisco/rsc-harness.txt.
SEO Geo fits situations like: one existing page needs to rank in Google AND get cited by AI answer engines — auditing a URL for on-page SEO; structured-data JSON-LD; GEO citation levers; core Web Vitals.
Run `npx skills add ericrisco/rsc-harness --skill seo-geo -a claude-code`. Or copy the skill folder (skills/seo-geo in ericrisco/rsc-harness) into .claude/skills/seo-geo in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ericrisco/rsc-harness --skill seo-geo -a codex`. Or copy the skill folder (skills/seo-geo in ericrisco/rsc-harness) into .agents/skills/seo-geo in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill seo-geo -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/seo-geo, .gemini/skills/seo-geo, .github/skills/seo-geo and .opencode/skills/seo-geo in your project.
Going by SKILL.md and its folder, SEO Geo needs a shell for the scripts in its folder. Our summary lists: A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
SEO Geo is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with SEO Geo: Persian SEO (TronIsHere/vibefarsiui, 210 stars), SEO (gridaco/grida, 2.7k stars), SEO (affaan-m/ECC, 276k stars) and SEO AI Optimizer (luongnv89/skills, 131 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 174 GitHub stars. The repository holds 233 skills in this directory. The repository was last updated on October 7, 2026.
Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.