#903 by GitHub stars
tigerless-labs/seo-ops
SEO foundation checks as an Agent Skill: give it a URL, get a crawler's-eye pass/fail report with evidence. 26 structural checks, zero LLM, deterministic.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 777bde405d2d
No earlier version was observed for comparison.
skills/seo-ops/SKILL.md
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 777bde405d2d
No earlier version was observed for comparison.
Verified commit 777bde405d2d6d248937600dfcfbaca46586695d
git clone --filter=blob:none --no-checkout https://github.com/tigerless-labs/seo-ops.git .hotskills/tigerless-labs-seo-ops && git -C .hotskills/tigerless-labs-seo-ops checkout --detach 777bde405d2d6d248937600dfcfbaca46586695d
# Copy each selected skill directory from .hotskills/tigerless-labs-seo-ops into .claude/skills/<skill-name>/Heat
1.1- Star growth, last 7 daysAhead of 6% of tracked repositories
- Star growth, last 24 hoursAhead of 3% of tracked repositories
- Rank movement, last 7 daysAhead of 3% of tracked repositories
- Commits, last 30 daysAhead of 60% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
How it works
seo-ops
When your agent uses it
Structural checklist and checker script for SEO foundation engineering. Use when reviewing or accepting a site/page for SEO/GEO structural compliance (robots, sitemap, canonical, 301 canonicalization, JSON-LD, OG, hreflang, CWV, AI crawler access, rendering strategy), when running the machine checks to produce a report, or when judging whether a frontend change will affect indexing and citation. Also for answering "what exactly does this check require" and "why does it exist".
What it loads into context
Frontmatter
128 tokensAlways available to the agent
SKILL.md
3,208 tokensWhen the skill is activated
Reference documents
41,836 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- How to work
- Scope
- What's here
- Run the checker
- Read the report
- Configuration
Scripts executed separately
scripts/config.pyscripts/run.py
Files
.agents/plugins/marketplace.jsonasset182 bytes.claude-plugin/marketplace.jsonasset275 bytes.claude-plugin/plugin.jsonasset322 bytes.codex-plugin/plugin.jsonasset246 bytes.github/workflows/ci.ymlasset4,776 bytes.gitignoreasset228 bytesREADME.mddoc3,289 bytesSKILL.mdcore13,103 bytesSKILL.mdcore13,103 bytesSKILL.mdcore13,103 bytesSKILL.mdcore13,103 bytesSKILL.mdcore13,103 bytesredlines.mddoc2,589 bytesreferences/.env.exampleasset623 bytesreferences/ai-crawlers.yamlasset3,209 bytesreferences/checklist/checklist.mddoc10,881 bytesreferences/checklist/references/C1.mddoc3,040 bytesreferences/checklist/references/C10.mddoc1,852 bytesreferences/checklist/references/C11.mddoc1,748 bytesreferences/checklist/references/C12.mddoc8,570 bytesreferences/checklist/references/C13.mddoc2,098 bytesreferences/checklist/references/C14.mddoc1,673 bytesreferences/checklist/references/C15.mddoc1,731 bytesreferences/checklist/references/C16.mddoc1,170 bytesreferences/checklist/references/C17.mddoc1,630 bytesreferences/checklist/references/C18.mddoc3,526 bytesreferences/checklist/references/C19.mddoc2,826 bytesreferences/checklist/references/C2.mddoc4,649 bytesreferences/checklist/references/C20.mddoc1,364 bytesreferences/checklist/references/C21.mddoc1,910 bytesreferences/checklist/references/C22.mddoc2,484 bytesreferences/checklist/references/C23.mddoc3,346 bytesreferences/checklist/references/C24.mddoc2,391 bytesreferences/checklist/references/C25.mddoc2,662 bytesreferences/checklist/references/C26.mddoc3,634 bytesreferences/checklist/references/C27.mddoc2,846 bytesreferences/checklist/references/C28.mddoc2,707 bytesreferences/checklist/references/C29.mddoc2,593 bytesreferences/checklist/references/C3.mddoc2,111 bytesreferences/checklist/references/C30.mddoc2,860 bytesreferences/checklist/references/C4.mddoc2,996 bytesreferences/checklist/references/C5.mddoc1,937 bytesreferences/checklist/references/C6.mddoc9,047 bytesreferences/checklist/references/C7.mddoc1,594 bytesreferences/checklist/references/C8.mddoc2,594 bytesreferences/checklist/references/C9.mddoc1,737 bytesreferences/config.example.yamlasset3,485 bytesreferences/content/content-checklist.mddoc5,314 bytesreferences/content/page-doc-template.mddoc14,209 bytesreferences/content/references/T1.mddoc2,858 bytesreferences/content/references/T10.mddoc2,593 bytesreferences/content/references/T12.mddoc3,366 bytesreferences/content/references/T13.mddoc3,207 bytesreferences/content/references/T14.mddoc3,103 bytesreferences/content/references/T2.mddoc2,687 bytesreferences/content/references/T3.mddoc2,493 bytesreferences/content/references/T4.mddoc2,899 bytesreferences/content/references/T5.mddoc2,736 bytesreferences/content/references/T6.mddoc1,904 bytesreferences/content/references/T7.mddoc3,237 bytesreferences/content/references/T8.mddoc2,687 bytesreferences/content/references/T9.mddoc2,779 bytesreferences/decisions.mddoc3,770 bytesreferences/report.example.mddoc10,509 bytesreferences/sites.example.yamlasset796 bytesscripts/config.pyruns29,700 bytesscripts/requirements.txtdoc93 bytesscripts/run.pyruns92,938 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubseo-ops
When your agent uses it
Structural checklist and checker script for SEO foundation engineering. Use when reviewing or accepting a site/page for SEO/GEO structural compliance (robots, sitemap, canonical, 301 canonicalization, JSON-LD, OG, hreflang, CWV, AI crawler access, rendering strategy), when running the machine checks to produce a report, or when judging whether a frontend change will affect indexing and citation. Also for answering "what exactly does this check require" and "why does it exist".
What it loads into context
Frontmatter
128 tokensAlways available to the agent
SKILL.md
239 tokensWhen the skill is activated
Reference documents
3,208 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
Scripts executed separately
../../scripts/run.py
Files
../../SKILL.mddoc13,103 bytes../../scripts/run.pyruns92,938 bytesSKILL.mdcore1,083 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills included
- seo-ops
- seo-ops
Repository facts
- License
- No license detected
- Created
- Aug 25, 2026
- Last pushed
- Oct 30, 2026
- Forks
- 45
- Open issues
- 4
- Project activity
- Active
Rank over the last 12 weeks
Now #903 · best #755 · down 114 in 30 days
- #886 on Oct 31
- #888 on Nov 1
- #894 on Nov 2
- #900 on Nov 3
- #902 from Nov 4 to Nov 5
- #903 since Nov 6
44 earlier periods
- #927 on Aug 23
- #923 on Aug 26
- #900 on Sep 4
- #875 on Sep 5
- #912 on Sep 6
- #936 on Sep 7
- #948 on Sep 8
- #934 on Sep 9
- #928 on Sep 10
- #893 on Sep 11
- #890 on Sep 12
- #889 on Sep 13
- #926 on Sep 14
- #913 on Sep 15
- #925 on Sep 16
- #921 on Sep 17
- #905 on Sep 18
- #878 on Sep 19
- #840 on Sep 25
- #857 on Sep 26
- #874 on Sep 27
- #920 on Sep 28
- #943 on Sep 29
- #900 on Sep 30
- #830 on Oct 1
- #826 on Oct 2
- #789 on Oct 3
- #854 on Oct 10
- #884 on Oct 13
- #893 on Oct 14
- #873 on Oct 15
- #862 on Oct 16
- #832 on Oct 17
- #804 on Oct 18
- #837 on Oct 19
- #840 on Oct 20
- #842 on Oct 21
- #804 on Oct 22
- #805 on Oct 23
- #755 on Oct 24
- #909 on Oct 25
- #873 on Oct 28
- #878 on Oct 29
- #879 on Oct 30
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 4, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 4 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 1 dangerous shell commandin 1 file: references/checklist/references/C9.md:21
- 328 network referencesin 53 files: scripts/run.py:12 references/report.example.md:3 references/checklist/checklist.md:12 and 50 more
- 21 obfuscation signalsin 1 file: references/report.example.md:14
- No instruction overrides
- 3 executable scriptsin 2 files: scripts/run.py:1 scripts/config.py:1
- 37 references to secretsin 6 files: scripts/config.py:5 scripts/run.py:20 .gitignore:5 and 3 more
- No requests to vote in Hot
Show all 390 signals by file
.claude-plugin/plugin.json
- Network accessline 4
"description": "SEO foundation checks as an Agent Skill: give it a URL, get a crawler's-eye pass/fail report with evidence. 26 structural checks, zero LLM, deterministic.", "author": { "name": "Tigerless Labs" }, "homepage": "https://gi - Network accessline 5
"author": { "name": "Tigerless Labs" }, "homepage": "https://github.com/tigerless-labs/seo-ops" } - Network accessline 6
"homepage": "https://github.com/tigerless-labs/seo-ops"
.github/workflows/ci.yml
- Network accessline 56
set +e python scripts/run.py --state-dir '${CLAUDE_PROJECT_DIR}/.seo-ops' \ --target http://127.0.0.1:9 >/dev/null 2>&1 - Network accessline 58
--target http://127.0.0.1:9 >/dev/null 2>&1 - Network accessline 75
<meta name="viewport" content="width=device-width,initial-scale=1"> <title>ci smoke</title><meta name="description" content="ci smoke page"> <link rel="canonical" href="http://127.0.0.1:8000/"> - Network accessline 76
<title>ci smoke</title><meta name="description" content="ci smoke page"> <link rel="canonical" href="http://127.0.0.1:8000/"> </head><body><h1>ci smoke</h1></body></html> - Network accessline 77
<link rel="canonical" href="http://127.0.0.1:8000/"> - Network accessline 80
printf 'User-agent: *\nAllow: /\n' > "$SITE/robots.txt" python -m http.server 8000 --directory "$SITE" &>/dev/null & for i in $(seq 20); do curl -sf http://127.0.0.1:8000/ >/dev/null && break; sleep 0.5; done - Network accessline 82
for i in $(seq 20); do curl -sf http://127.0.0.1:8000/ >/dev/null && break; sleep 0.5; done - Network accessline 84
# Explicit --state-dir: CI wants an assertable landing spot, not the user default python scripts/run.py --target http://127.0.0.1:8000 \ - Network accessline 85
python scripts/run.py --target http://127.0.0.1:8000 \
.gitignore
README.md
- Network accessline 4
<p align="center"> <img src="https://github.com/tigerless-labs/seo-ops/actions/workflows/ci.yml/badge.svg" alt="CI" /> <img src="https://img.shields.io/badge/python-3.9%2B-blue.svg" alt="python" /> <img src="https://img.shields.io/badge/p - Network accessline 5
<img src="https://github.com/tigerless-labs/seo-ops/actions/workflows/ci.yml/badge.svg" alt="CI" /> <img src="https://img.shields.io/badge/python-3.9%2B-blue.svg" alt="python" /> <img src="https://img.shields.io/badge/platform-Linux%20%7C%2 - Network accessline 33
Install https://github.com/tigerless-labs/seo-ops as a skill. - Network accessline 64
© Tigerless · [tigerless.ai](https://tigerless.ai) · [tigerless.com](https://www.tigerless.com)
SKILL.md
- Network accessline 17
> **What should I check?** > 1. **A URL** — live domain or local deployment (`http://localhost:<port>`), both fine; produces a report - Network accessline 17
> **What should I check?** > 1. **A URL** — live domain or local deployment (`http://localhost:<port>`), both fine; produces a report - Network accessline 18
> 1. **A URL** — live domain or local deployment (`http://localhost:<port>`), both fine; produces a report - Network accessline 18
> 1. **A URL** — live domain or local deployment (`http://localhost:<port>`), both fine; produces a report - Network accessline 100
python3 scripts/run.py --target https://example.com # live site - Network accessline 100
python3 scripts/run.py --target https://example.com # live site - Network accessline 101
python3 scripts/run.py --target http://localhost:3000 # local deployment, auto-detected as local mode - Network accessline 101
python3 scripts/run.py --target http://localhost:3000 # local deployment, auto-detected as local mode - Network accessline 106
**Public staging domains are not supported** — they'd be tested as production domains, and the canonicalization check (C3) would false-red for sure. To test before launch, pick one: run a local deployment at `http://localhost:<port>`, or wa - Network accessline 106
**Public staging domains are not supported** — they'd be tested as production domains, and the canonicalization check (C3) would false-red for sure. To test before launch, pick one: run a local deployment at `http://localhost:<port>`, or wa - Network accessline 107
To test before launch, pick one: run a local deployment at `http://localhost:<port>`, or wait and run against the production domain after launch. - Network accessline 107
To test before launch, pick one: run a local deployment at `http://localhost:<port>`, or wait and run against the production domain after launch.
redlines.md
- Network accessline 23
| Rule | Reference | |---|---| | R3 (scaled content) / R6 (link spam) / R7 (cloaking, hidden text, stuffing) | [Google Spam Policies](https://developers.google.com/search/docs/essentials/spam-policies) — every red line has explicit text her - Network accessline 24
|---|---| | R3 (scaled content) / R6 (link spam) / R7 (cloaking, hidden text, stuffing) | [Google Spam Policies](https://developers.google.com/search/docs/essentials/spam-policies) — every red line has explicit text here | | R5 (fake struct - Network accessline 25
| R3 (scaled content) / R6 (link spam) / R7 (cloaking, hidden text, stuffing) | [Google Spam Policies](https://developers.google.com/search/docs/essentials/spam-policies) — every red line has explicit text here | - Network accessline 26
| R5 (fake structured data, bought reviews) | [Google Structured Data policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) | - Network accessline 27
| The YMYL/E-E-A-T behind R2 | [Google Search Quality Rater Guidelines](https://static.googleusercontent.com/media/guidelines.raterhub.com/en//searchqualityevaluatorguidelines.pdf) (the rater handbook; the original definitions of E-E-A-T an
references/.env.example
references/checklist/checklist.md
- Network accessline 12
| C1 | P0 | robots.txt allows all AI crawler UAs | fetch + per-UA comparison | checker | | C2 | P0 | sitemap reachable, no 4xx/5xx entries, truthful lastmod, <=50k URLs per file | fetch + **no-redirect** sampling + lastmod coverage/dispersi - Network accessline 13
| C2 | P0 | sitemap reachable, no 4xx/5xx entries, truthful lastmod, <=50k URLs per file | fetch + **no-redirect** sampling + lastmod coverage/dispersion/single-day cluster + per-shard entry count | checker | | C3 | P0 | URL canonicalizatio - Network accessline 14
| C3 | P0 | URL canonicalization: www/apex, http/https, trailing slash all 301 to one canonical host | four-variant curl (**needs a real domain; staging/no-domain runs record N.A.**) | checker | - Network accessline 40
| C19 | P2 | full Open Graph set + twitter:card: social preview cards complete and correct | fetch the page, check meta; image declared 1200×630; og:type × JSON-LD article types cross-checked | checker | | C20 | P2 | redirect hops <=1: no c - Network accessline 41
| C20 | P2 | redirect hops <=1: no chained redirects | count redirect chain length while fetching | checker | | C15 | P2 | render cost not per-request: SSR needs CDN caching (s-maxage + SWR), SSG exempt | curl response headers × the declare - Network accessline 42
| C15 | P2 | render cost not per-request: SSR needs CDN caching (s-maxage + SWR), SSG exempt | curl response headers × the declared rendering strategy | checker | - Network accessline 64
| Rule | Source | |---|---| | C set overall | [Google Search Essentials](https://developers.google.com/search/docs/essentials) (formerly Webmaster Guidelines) | - Network accessline 65
|---|---| | C set overall | [Google Search Essentials](https://developers.google.com/search/docs/essentials) (formerly Webmaster Guidelines) | | C12 structured data | [Google Structured Data policies](https://developers.google.com/search/do - Network accessline 66
| C set overall | [Google Search Essentials](https://developers.google.com/search/docs/essentials) (formerly Webmaster Guidelines) | - Network accessline 67
| C12 structured data | [Google Structured Data policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) + [schema.org](https://schema.org) | - Network accessline 68
| C8 canonical / C2 sitemap / robots | [Google Crawling & Indexing docs](https://developers.google.com/search/docs/crawling-indexing), [sitemaps.org](https://www.sitemaps.org) (the protocol itself) | - Network accessline 69
| C22 hreflang / C26 language redirects | [Google localized-versions guide](https://developers.google.com/search/docs/specialty/international/localized-versions) (explicit: don't auto-redirect by guessed language; declare with hreflang + le - Network accessline 70
| C4 CWV | [web.dev/vitals](https://web.dev/articles/vitals) (Chrome team; the source of metric definitions and thresholds) | - Network accessline 71
| C1 AI crawler UAs | [OpenAI bots](https://platform.openai.com/docs/bots), [Perplexity crawlers](https://docs.perplexity.ai/guides/bots), Anthropic support's ClaudeBot page, [Google crawler list](https://developers.google.com/search/docs/c - Network accessline 72
| C16 / C23 robots directives | [Google robots meta tag docs](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag) (`max-snippet`/`noindex` and `X-Robots-Tag` share one source) | - Network accessline 73
| C18 image alt | [Google image SEO best practices](https://developers.google.com/search/docs/appearance/google-images) | - Network accessline 74
| C24 viewport | [Google: mobile-friendly](https://developers.google.com/search/docs/appearance/mobile-friendly) | - Network accessline 75
| C25 mixed content | [MDN: Mixed content](https://developer.mozilla.org/docs/Web/Security/Mixed_content) (the normative description of browser blocking behavior) | - Network accessline 76
| C19 OG | [ogp.me](https://ogp.me) (The Open Graph protocol) + each social platform's card docs | - Network accessline 77
| C5 IndexNow (C2's companion) | [indexnow.org](https://www.indexnow.org) (the open protocol led by Microsoft/Bing) | - Network accessline 78
| C7 llms.txt | [llmstxt.org](https://llmstxt.org) (a community convention, not an official standard — the only item with no big-vendor backing) | - Network accessline 79
| C10/C20 | Search Essentials anti-cloaking / redirect guidance (under the C-set overall link) | | C27 head validity | [Google: use valid HTML in the head](https://developers.google.com/search/docs/crawling-indexing/valid-page-metadata) (ex - Network accessline 80
| C27 head validity | [Google: use valid HTML in the head](https://developers.google.com/search/docs/crawling-indexing/valid-page-metadata) (explicit: an invalid element ends head processing, everything after it is ignored) + [WHATWG HTML s - Network accessline 81
| C28 security headers | [OWASP Secure Headers Project](https://owasp.org/www-project-secure-headers/) + [MDN HTTP headers](https://developer.mozilla.org/docs/Web/HTTP/Headers) (per-header semantics) | - Network accessline 82
| C29 URL hygiene | [Google: URL structure best practices](https://developers.google.com/search/docs/crawling-indexing/url-structure) (hyphens over underscores, lowercase, percent-encode non-ASCII) | - Network accessline 83
| C30 link hygiene | [Google SEO Starter Guide: use good anchor text](https://developers.google.com/search/docs/fundamentals/seo-starter-guide) + [MDN: rel=noopener](https://developer.mozilla.org/docs/Web/HTML/Attributes/rel/noopener) |
references/checklist/references/C1.md
- Network accessline 34
Sitemap: https://www.example.com/sitemap.xml - Network accessline 43
- Don't use the "Disallow everything, then whitelist" style -- miss one new UA and you've blocked it entirely - Under `policy: allow`, unlisted UAs are allowed by default (robots.txt's default semantics); the point of the list is **explicit - Network accessline 45
- Self-check: `curl <root>/robots.txt`, then confirm each UA against the yaml is allowed - Network accessline 49
- [RFC 9309 -- Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309.html): the formal robots.txt standard (source for syntax, matching rules, and the allow-by-default semantics) - Network accessline 50
- [Google: intro to robots.txt and how to write it](https://developers.google.com/search/docs/crawling-indexing/robots/intro): the biggest consumer's authoritative account of parsing behavior - Network accessline 51
- Official crawler docs from each AI vendor (source of the UA list, verified 2026-08-24): [OpenAI bots](https://developers.openai.com/api/docs/bots) · [Anthropic crawlers](https://support.claude.com/en/articles/8896518-does-anthropic-crawl- - Network accessline 52
- [Next.js `app/robots.ts`](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/robots): an example of the framework-side generation pattern
references/checklist/references/C10.md
- Network accessline 17
</header> <script> fetch('/api/me', {credentials:'include'}) - Network accessline 18
<script> fetch('/api/me', {credentials:'include'}) .then(r => r.ok ? r.json() : null) - Network accessline 19
fetch('/api/me', {credentials:'include'}) - Network accessline 32
- [MDN: Cache-Control](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) -- shared-cache semantics authority - Network accessline 33
- [Cloudflare: cache best practices](https://developers.cloudflare.com/cache/concepts/customize-cache/) -- the CDN-layer engineering line on "which responses are cacheable"
references/checklist/references/C11.md
references/checklist/references/C12.md
- Network accessline 35
// example (for reference only; vocabulary source: schema.org, policy source: Google structured data docs) { "@context": "https://schema.org", - Network accessline 36
{ "@context": "https://schema.org", "@graph": [ - Network accessline 37
"@context": "https://schema.org", - Network accessline 38
"@graph": [ { "@type": "Organization", "@id": "https://www.example.com/#org", "name": "...", "url": "...", "logo": "...", - Network accessline 39
{ "@type": "Organization", "@id": "https://www.example.com/#org", - Network accessline 40
"name": "...", "url": "...", "logo": "...", "sameAs": ["...official social media...", "...the other two sites..."] }, { "@type": "WebSite", "@id": "https://www.example.com/#website", - Network accessline 41
"sameAs": ["...official social media...", "...the other two sites..."] }, { "@type": "WebSite", "@id": "https://www.example.com/#website", "name": "...", "url": "...", - Network accessline 42
{ "@type": "WebSite", "@id": "https://www.example.com/#website", - Network accessline 43
"name": "...", "url": "...", "publisher": { "@id": "https://www.example.com/#org" } }, { "...this page's main entity type, see the table below...": "..." } - Network accessline 44
"publisher": { "@id": "https://www.example.com/#org" } }, - Network accessline 100
- [Google: general structured data policies](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) (general requirements: markup must reflect visible content; includes the self-serving review ban -- that item now - Network accessline 101
- Per-type feature docs: [Article](https://developers.google.com/search/docs/appearance/structured-data/article) · [FAQPage](https://developers.google.com/search/docs/appearance/structured-data/faqpage) · [Breadcrumb](https://developers.goo - Network accessline 102
- [schema.org](https://schema.org) -- the vocabulary itself; [Rich Results Test](https://search.google.com/test/rich-results)
references/checklist/references/C13.md
references/checklist/references/C14.md
- Network accessline 22
- [web.dev: A/B testing and performance/flicker](https://web.dev/articles/optimize-cls#ab-test) — the official discussion of anti-flicker cost
references/checklist/references/C15.md
- Network accessline 20
- Precondition: satisfy C10 (public version) before enabling caching, or caching turns into an incident - Cloudflare note: HTML is not cached by default; a Cache Rule must explicitly enable "Eligible for cache" - Self-check: `curl -I` and i - Network accessline 22
- Self-check: `curl -I` and inspect the response headers; the second request should show `cf-cache-status: HIT` (or your CDN's hit marker) - Network accessline 26
- [MDN: Cache-Control (s-maxage / SWR)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) - Network accessline 27
- [RFC 5861: stale-while-revalidate](https://www.rfc-editor.org/rfc/rfc5861) - Network accessline 28
- [Cloudflare: caching HTML (Cache Rules)](https://developers.cloudflare.com/cache/how-to/cache-rules/)
references/checklist/references/C16.md
- Network accessline 22
- [Google: robots meta tag and directive list](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag) — the authority for all directive semantics
references/checklist/references/C17.md
- Network accessline 26
- [MDN: `<h1>`-`<h6>` semantics](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Heading_Elements) - Network accessline 27
- [W3C/WAI: page structure and headings](https://www.w3.org/WAI/tutorials/page-structure/headings/) — the accessibility source for level-by-level, no skipping (engines cite the same)
references/checklist/references/C18.md
- Network accessline 38
360px viewport), **lossy compression** at build time (squoosh/sharp in the pipeline, not by hand), `loading="lazy"` for below-the-fold images (doesn't shrink the file, but takes it off the LCP path) - Self-check: grep templates for `<img` - Network accessline 40
- Self-check: grep templates for `<img`; missing width/height or a **missing alt attribute** is red (the site's CI can add the same rule as a second safety net); `curl -sI <img-url> | grep -i content-length` for the weight - Network accessline 44
- [web.dev: optimize CLS (images-without-dimensions section)](https://web.dev/articles/optimize-cls#images-without-dimensions) - Network accessline 45
- [Google: image SEO best practices](https://developers.google.com/search/docs/appearance/google-images) — the standard for what alt does and how to write it - Network accessline 46
- [Next.js `next/image`](https://nextjs.org/docs/app/api-reference/components/image)
references/checklist/references/C19.md
- Network accessline 25
<meta property="og:description" content="The three gap scenarios explained in one chart"> <meta property="og:type" content="article"> <meta property="og:url" content="https://www.example.com/guide/f1-to-h1b"> - Network accessline 26
<meta property="og:type" content="article"> <meta property="og:url" content="https://www.example.com/guide/f1-to-h1b"> <meta property="og:image" content="https://www.example.com/og/f1-h1b.png"> - Network accessline 27
<meta property="og:url" content="https://www.example.com/guide/f1-to-h1b"> - Network accessline 28
<meta property="og:image" content="https://www.example.com/og/f1-h1b.png"> - Network accessline 41
- [ogp.me](https://ogp.me) — The Open Graph protocol itself - Network accessline 42
- [X: Cards markup docs](https://developer.x.com/en/docs/x-for-websites/cards/overview/markup)
references/checklist/references/C2.md
- Network accessline 17
<!-- example (for reference only; format source: the sitemaps.org protocol) --> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 18
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 19
<sitemap><loc>https://www.example.com/sitemap-core.xml</loc></sitemap> - Network accessline 20
<sitemap><loc>https://www.example.com/sitemap-blog.xml</loc></sitemap> - Network accessline 21
<sitemap><loc>https://www.example.com/sitemap-pseo.xml</loc></sitemap> - Network accessline 26
<!-- example entry inside a shard (for reference only; source: sitemaps.org) --> <url> <loc>https://www.example.com/guide/f1-to-h1b</loc> - Network accessline 27
<url> <loc>https://www.example.com/guide/f1-to-h1b</loc> <lastmod>2026-08-20</lastmod> - Network accessline 28
<loc>https://www.example.com/guide/f1-to-h1b</loc> - Network accessline 62
- [sitemaps.org](https://www.sitemaps.org/protocol.html) -- the protocol itself (format authority) - Network accessline 63
- [Google: build and submit a sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)
references/checklist/references/C20.md
- Network accessline 19
- Merge canonicalization (C3) and path migration into a single hop: `http://example.com/old` should reach `https://www.example.com/new` in one hop, not canonicalize first and migrate after - Network accessline 25
- [Google: redirects and Google Search](https://developers.google.com/search/docs/crawling-indexing/301-redirects) — includes the stated processing cap on redirect chains
references/checklist/references/C21.md
- Network accessline 30
- [Google: creating helpful content and E-E-A-T](https://developers.google.com/search/docs/fundamentals/creating-helpful-content) — the official account of Experience/Expertise/Authoritativeness/Trust - Network accessline 31
- [Google Search Quality Rater Guidelines (PDF)](https://services.google.com/fh/files/misc/hsw-sqrg.pdf) — where YMYL and E-E-A-T are defined
references/checklist/references/C22.md
- Network accessline 17
<!-- Example (for reference only; source: Google localized versions docs) — the en page and the zh page output the same group --> <link rel="alternate" hreflang="en" href="https://www.example.com/guide/f1-to-h1b"> - Network accessline 18
<link rel="alternate" hreflang="en" href="https://www.example.com/guide/f1-to-h1b"> - Network accessline 19
<link rel="alternate" hreflang="zh" href="https://www.example.com/cn/guide/f1-to-h1b"> - Network accessline 20
<link rel="alternate" hreflang="x-default" href="https://www.example.com/guide/f1-to-h1b"> - Network accessline 31
- [Google: telling Search about localized versions of your page](https://developers.google.com/search/docs/specialty/international/localized-versions) — the authority on hreflang rules and common mistakes
references/checklist/references/C23.md
- Network accessline 42
- Pages that genuinely should not be indexed (logged-in, admin, pure business pages) should never be in the sitemap in the first place; **the two verdicts stay conflict-free only because these two sets are mutually exclusive** - Self-chec - Network accessline 43
**the two verdicts stay conflict-free only because these two sets are mutually exclusive** - Self-check: fetch the page and grep the robots/googlebot metas + `curl -I` for `X-Robots-Tag`; after launch confirm index status with GSC URL Ins - Network accessline 44
- Self-check: fetch the page and grep the robots/googlebot metas + `curl -I` for `X-Robots-Tag`; - Network accessline 49
- [Google: robots meta tag, data-nosnippet, and X-Robots-Tag specification](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag) — the authority for all directive semantics and both channels - Network accessline 50
- [Google: the right way to block indexing](https://developers.google.com/search/docs/crawling-indexing/block-indexing)
references/checklist/references/C24.md
- Network accessline 34
- [Google: mobile-friendly](https://developers.google.com/search/docs/appearance/mobile-friendly) — the verdict criterion - Network accessline 35
- [Google: mobile-first indexing best practices](https://developers.google.com/search/docs/crawling-indexing/mobile/mobile-sites-mobile-first-indexing) - Network accessline 36
- [MDN: viewport meta tag](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag) — attribute semantics
references/checklist/references/C25.md
- Network accessline 5
An HTTPS page referencing `http://` subresources (images, scripts, styles, iframes) = mixed content. - Network accessline 22
**`<a href="http://...">` does not count** — that is a navigational outlink; it fires only when the user clicks, triggers no mixed-content blocking, - Network accessline 29
- Write all in-site resources as **protocol-relative or absolute https**; never hard-code `http://` in templates - Network accessline 33
- Backstop (not a fix): `Content-Security-Policy: upgrade-insecure-requests` makes the browser auto-upgrade — it can save production, but it **masks the problem**; the checker should still scan the source and judge red - Self-check: fetch - Network accessline 35
- Self-check: fetch the page and grep `="http://` (excluding `<a`); the browser console's Mixed Content warnings - Network accessline 39
- [MDN: mixed content](https://developer.mozilla.org/docs/Web/Security/Mixed_content) — the active/passive tiers and browser blocking behavior - Network accessline 40
- [MDN: auto-upgrading mixed content](https://developer.mozilla.org/docs/Web/Security/Mixed_content/How_to_fix_website_with_mixed_content)
references/checklist/references/C26.md
- Network accessline 5
Auto-jumping users to a "guessed language version" based on the browser's `Accept-Language` (or IP geolocation) is an anti-pattern Google's [localized versions guide](https://developers.google.com/search/docs/specialty/international/localiz - Network accessline 6
[localized versions guide](https://developers.google.com/search/docs/specialty/international/localized-versions) - Network accessline 35
# Anti-pattern (measured on a production site, 2026-08-25) Accept-Language: en-US → 302 → 200 https://www.example.com/ English - Network accessline 36
Accept-Language: en-US → 302 → 200 https://www.example.com/ English - Network accessline 37
Accept-Language: zh-CN → 302 → 302 → 200 https://www.example.com/cn Chinese - Network accessline 38
(no Accept-Language) → 302 → 302 → 200 https://www.example.com/cn ← what the crawler sees - Network accessline 41
- Self-check: `curl -sI -H 'Accept-Language: en-US' <url>` once and again with `zh-CN`; compare `Location`; - Network accessline 48
- [Google: managing localized versions](https://developers.google.com/search/docs/specialty/international/localized-versions) — the anti-pattern statement on auto-redirects and the hreflang fix - Network accessline 49
- [Google: multi-regional and multilingual sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites)
references/checklist/references/C27.md
- Network accessline 32
- Order matters within the head anyway: put the critical machine-read tags (charset, title, canonical, robots) **first**, so even a truncation bug downstream costs the least - Self-check: `curl -s URL | sed -n '/<head/,/<\/head>/p'` and e - Network accessline 33
**first**, so even a truncation bug downstream costs the least - Self-check: `curl -s URL | sed -n '/<head/,/<\/head>/p'` and eyeball for the eight allowed tags; or the checker's C27 row - Network accessline 34
- Self-check: `curl -s URL | sed -n '/<head/,/<\/head>/p'` and eyeball for the eight allowed tags; or the - Network accessline 39
- [Google: use valid HTML in the head](https://developers.google.com/search/docs/crawling-indexing/valid-page-metadata) — the explicit "invalid element ends head processing" statement this check is built on - Network accessline 40
- [WHATWG HTML spec: the head element](https://html.spec.whatwg.org/multipage/semantics.html#the-head-element) — the normative content model (metadata content only)
references/checklist/references/C28.md
- Network accessline 45
- [OWASP Secure Headers Project](https://owasp.org/www-project-secure-headers/) — the canonical list, recommended values, and per-header rationale - Network accessline 46
- [MDN: Strict-Transport-Security](https://developer.mozilla.org/docs/Web/HTTP/Headers/Strict-Transport-Security) / [CSP](https://developer.mozilla.org/docs/Web/HTTP/CSP) — normative semantics per header
references/checklist/references/C29.md
- Network accessline 36
- [Google: URL structure best practices](https://developers.google.com/search/docs/crawling-indexing/url-structure) — hyphens over underscores, encode non-ASCII, avoid parameter sprawl; the direct source of all four rules - Network accessline 37
- [WHATWG URL spec](https://url.spec.whatwg.org/) — why raw non-ASCII is invalid and what encoding is normative
references/checklist/references/C3.md
- Network accessline 21
listen 80; listen 443 ssl; server_name example.com; # apex (including http) return 301 https://www.example.com$request_uri; # one hop straight to the final form - Network accessline 22
server_name example.com; # apex (including http) return 301 https://www.example.com$request_uri; # one hop straight to the final form } - Network accessline 23
return 301 https://www.example.com$request_uri; # one hop straight to the final form - Network accessline 27
- Trailing slash: pick one (no trailing slash recommended), 301 the other over; configure at the framework layer (Next `trailingSlash`, nginx `rewrite`) - Self-check: `curl -I` the four variants (http/https x www/apex); all must 301 with an - Network accessline 28
- Self-check: `curl -I` the four variants (http/https x www/apex); all must 301 with an identical Location and hop=1 - Network accessline 32
- [Google: URL canonicalization and duplicate consolidation](https://developers.google.com/search/docs/crawling-indexing/canonicalization) -- the authoritative account of how engines handle variants - Network accessline 33
- [Google: redirects and search](https://developers.google.com/search/docs/crawling-indexing/301-redirects)
references/checklist/references/C30.md
- Network accessline 39
- [Google SEO Starter Guide: use good anchor text](https://developers.google.com/search/docs/fundamentals/seo-starter-guide) — anchor text as target-page signal - Network accessline 40
- [MDN: rel=noopener](https://developer.mozilla.org/docs/Web/HTML/Attributes/rel/noopener) — the window.opener mechanics and the browser-default timeline - Network accessline 41
- [web.dev: links to cross-origin destinations](https://web.dev/articles/external-anchors-use-rel-noopener) — the reverse-tabnabbing writeup
references/checklist/references/C4.md
- Access to secretsline 24
[Credential-related source omitted] - Network accessline 31
- [web.dev/vitals](https://web.dev/articles/vitals) -- source of the metric definitions and thresholds (Chrome team) - Network accessline 32
- Per-metric optimization guides: [LCP](https://web.dev/articles/optimize-lcp) · [INP](https://web.dev/articles/optimize-inp) · [CLS](https://web.dev/articles/optimize-cls) - Network accessline 33
- [CrUX docs](https://developer.chrome.com/docs/crux) -- how field data is collected and scoped
references/checklist/references/C5.md
- Network accessline 18
// example (for reference only; source: the indexnow.org protocol docs) POST https://api.indexnow.org/indexnow - Network accessline 19
POST https://api.indexnow.org/indexnow - Network accessline 22
"host": "www.example.com", "key": "a1b2c3d4e5f6", "keyLocation": "https://www.example.com/a1b2c3d4e5f6.txt", - Network accessline 23
"key": "a1b2c3d4e5f6", "keyLocation": "https://www.example.com/a1b2c3d4e5f6.txt", "urlList": ["https://www.example.com/blog/new-post"] - Network accessline 24
"keyLocation": "https://www.example.com/a1b2c3d4e5f6.txt", - Network accessline 25
"urlList": ["https://www.example.com/blog/new-post"] - Network accessline 34
- [indexnow.org protocol docs](https://www.indexnow.org/documentation) -- protocol and API authority - Network accessline 35
- [Bing: IndexNow onboarding](https://www.bing.com/indexnow)
references/checklist/references/C6.md
- Network accessline 101
- [Google SEO Starter Guide: internal links and site structure](https://developers.google.com/search/docs/fundamentals/seo-starter-guide) -- the authoritative account of internal links as a discovery and comprehension channel - Network accessline 102
- [Google: managing crawl budget](https://developers.google.com/search/docs/crawling-indexing/large-site-managing-crawl-budget) -- the framing for bad outlinks consuming budget - Network accessline 103
- [Google: robots.txt usage](https://developers.google.com/search/docs/crawling-indexing/robots/intro) -- source for `Disallow` and `noindex` not stacking - Network accessline 104
- [Cloudflare: verified bots](https://developers.cloudflare.com/bots/concepts/bot/#verified-bots) -- the WAF allowance criterion (reverse DNS, not UA)
references/checklist/references/C7.md
- Network accessline 17
## Core pages - [F1 to H1B insurance guide](https://www.example.com/guide/f1-to-h1b): the complete walkthrough of insurance continuity across the status change - Network accessline 18
- [F1 to H1B insurance guide](https://www.example.com/guide/f1-to-h1b): the complete walkthrough of insurance continuity across the status change - Network accessline 19
- [Insurance comparison](https://www.example.com/compare): mainstream plans side by side - Network accessline 21
## Blog - [Blog home](https://www.example.com/blog): all guides and updates - Network accessline 22
- [Blog home](https://www.example.com/blog): all guides and updates - Network accessline 30
- [llmstxt.org](https://llmstxt.org) -- the format proposal itself (community convention; note: not an official standard, and engine support keeps shifting)
references/checklist/references/C8.md
- Network accessline 19
<!-- example (for reference only; source: Google's canonical docs) --> <link rel="canonical" href="https://www.example.com/guide/f1-to-h1b"> - Network accessline 20
<link rel="canonical" href="https://www.example.com/guide/f1-to-h1b"> - Network accessline 30
# Anti-example: a CDN rule added a header canonical site-wide, inconsistent with the one in HTML Link: <https://example.com/guide>; rel="canonical" <- apex - Network accessline 31
Link: <https://example.com/guide>; rel="canonical" <- apex - Network accessline 32
<link rel="canonical" href="https://www.example.com/guide"> <- www - Network accessline 39
- [Google: specify a canonical URL with rel="canonical"](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls) -- the authoritative account of the verdict and common mistakes
references/checklist/references/C9.md
- Network accessline 20
# visible text volume fetched without JS, compared against the browser-rendered version (>=90%) curl -s -A "<real browser UA>" <url> | python3 -c "import sys,re;h=sys.stdin.read();t=re.sub(r'<script.*?</script>|<style.*?</style>|<[^>]+>',' - Dangerous shell operationline 21
curl -s -A "<real browser UA>" <url> | python3 -c "import sys,re;h=sys.stdin.read();t=re.sub(r'<script.*?</script>|<style.*?</style>|<[^>]+>',' ',h,flags=re.S);print(len(' '.join(t.split())))" - Network accessline 21
curl -s -A "<real browser UA>" <url> | python3 -c "import sys,re;h=sys.stdin.read();t=re.sub(r'<script.*?</script>|<style.*?</style>|<[^>]+>',' ',h,flags=re.S);print(len(' '.join(t.split())))" - Network accessline 26
- [Google: JavaScript SEO basics](https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics) -- the authoritative account of rendering vs crawlers - Network accessline 27
- [Next.js: Server & Client Components](https://nextjs.org/docs/app/getting-started/server-and-client-components)
references/config.example.yaml
- Access to secretsline 8
[Credential-related source omitted] - Network accessline 98
# base URL for the report's Docs column; swap main for a commit SHA to pin a version DOC_BASE_URL: "https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references" - Network accessline 99
DOC_BASE_URL: "https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references"
references/content/page-doc-template.md
- Network accessline 54
name_zh: {{Aikemei}} # if there is no Chinese name write "none" — don't invent one on the spot alias: {{AIS}} # short name / alias; leave blank if none logo: {{https:// - Network accessline 55
alias: {{AIS}} # short name / alias; leave blank if none logo: {{https://www.example.com/logo.png}} # logo hard requirements: >=112×112 px, PNG/JPG (not SVG), square or near-square, opaque backgroun - Network accessline 56
logo: {{https://www.example.com/logo.png}} - Network accessline 59
sameas: # official accounts as full URLs, one per line, not handles; the three sites and the socials point at one entity - {{https://www.linkedin.com/company/acme}} - Network accessline 60
- {{https://www.linkedin.com/company/acme}} - Network accessline 61
- {{https://x.com/acme}} - Network accessline 62
- {{https://www.youtube.com/@acme}} - Network accessline 63
- {{https://www.crunchbase.com/organization/acme}} - Network accessline 173
citations: - {{https://www.uscis.gov/…}} - Network accessline 174
- {{https://www.uscis.gov/…}} - Network accessline 175
- {{https://www.healthcare.gov/…}}
references/content/references/T1.md
- Network accessline 34
https://www.linkedin.com/company/acme - Network accessline 35
https://x.com/acme - Network accessline 36
https://www.youtube.com/@acme - Network accessline 37
https://www.crunchbase.com/organization/acme - Network accessline 51
- [Google: Organization structured data](https://developers.google.com/search/docs/appearance/structured-data/organization) — source of the logo size and format requirements - Network accessline 52
- [schema.org `sameAs`](https://schema.org/sameAs) — property semantics
references/content/references/T10.md
- Network accessline 50
- [Google: structured data general policies (markup must match visible content)](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) - Network accessline 51
- [Google: date fields in Article structured data](https://developers.google.com/search/docs/appearance/structured-data/article)
references/content/references/T12.md
- Network accessline 37
citations: - https://www.uscis.gov/… # official sources - Network accessline 38
- https://www.uscis.gov/… # official sources - Network accessline 39
- https://www.healthcare.gov/… - Network accessline 66
- [Google Search Quality Rater Guidelines (YMYL and E-E-A-T definitions)](https://guidelines.raterhub.com/searchqualityevaluatorguidelines.pdf) - Network accessline 67
- [Google: creating helpful, reliable, people-first content](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)
references/content/references/T13.md
- Network accessline 56
- [Google: Product structured data](https://developers.google.com/search/docs/appearance/structured-data/product) - Network accessline 57
- [Google: structured data policies (self-serving reviews forbidden)](https://developers.google.com/search/docs/appearance/structured-data/sd-policies) - Network accessline 58
- [schema.org InsuranceProduct](https://schema.org/InsuranceProduct)
references/content/references/T14.md
- Network accessline 57
- [Google: image SEO best practices](https://developers.google.com/search/docs/appearance/google-images) — what alt does and how to write it - Network accessline 58
- [W3C WAI: deciding what to write in alt](https://www.w3.org/WAI/tutorials/images/decision-tree) — the content-vs-decoration decision tree
references/content/references/T2.md
- Network accessline 50
- [llmstxt.org](https://llmstxt.org) — the format convention
references/content/references/T3.md
- Network accessline 46
- [Google: URL structure best practices](https://developers.google.com/search/docs/crawling-indexing/url-structure)
references/content/references/T4.md
- Network accessline 53
- [Google Search Quality Rater Guidelines (YMYL definition)](https://guidelines.raterhub.com/searchqualityevaluatorguidelines.pdf)
references/content/references/T5.md
references/content/references/T8.md
- Network accessline 53
- [Google: localized versions (hreflang)](https://developers.google.com/search/docs/specialty/international/localized-versions) — the authoritative word on reciprocity and x-default
references/decisions.md
- Network accessline 33
| C23 indexed pages carry no noindex | Template and deployment config; content expresses "should this page be indexed" through **sitemap membership**, not by writing meta | | C24 viewport meta | One line in the base template, unrelated to c - Network accessline 35
| C25 no mixed content | Writers pasting `http://` external images into copy is indeed a common source, but **the real fix is frontend rewriting the protocol or re-hosting on our own CDN at ingest** (implementation guidance in [C25.md](chec
references/report.example.md
- Network accessline 3
- Target: https://www.example.com (domain mode) - Network accessline 11
| ID | Priority | Check | Result | Evidence | Docs | |---|---|---|---|---|---| | C1 | P0 | robots.txt allows all AI crawler UAs | ✅ pass | all 18 UAs allowed | [C1 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checkli - Network accessline 12
|---|---|---|---|---|---| | C1 | P0 | robots.txt allows all AI crawler UAs | ✅ pass | all 18 UAs allowed | [C1 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C1.md) | | C2 | P0 | sitemap reachable, - Network accessline 13
| C1 | P0 | robots.txt allows all AI crawler UAs | ✅ pass | all 18 UAs allowed | [C1 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C1.md) | - Network accessline 14
| C2 | P0 | sitemap reachable, no 4xx/5xx entries, truthful lastmod, <=50k URLs per file | 🔴 fail | sitemap /<U+200B>sitemap.xml… [full ↓](#c2) | [C2 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C2.md) - Possible obfuscationline 14
| C2 | P0 | sitemap reachable, no 4xx/5xx entries, truthful lastmod, <=50k URLs per file | 🔴 fail | sitemap /<U+200B>sitemap.xml… [full ↓](#c2) | [C2 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C2.md) - Network accessline 15
| C3 | P0 | URL canonicalization: www/apex, http/https, trailing slash all 301 to one canonical host | 🔴 fail | http:<U+200B>/<U+200B>/<U+200B>www.frontend.… [full ↓](#c3) | [C3 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/refe - Possible obfuscationline 15
| C3 | P0 | URL canonicalization: www/apex, http/https, trailing slash all 301 to one canonical host | 🔴 fail | http:<U+200B>/<U+200B>/<U+200B>www.frontend.… [full ↓](#c3) | [C3 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/refe - Network accessline 16
| C26 | P0 | no Accept-Language redirects: every language version has its own fixed URL, no auto-jump | ✅ pass | sampled 1 page(s),… [full ↓](#c26) | [C26 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/refere - Network accessline 17
| C4 | P1 | Core Web Vitals pass: LCP<2.5s / INP<200ms / CLS<0.1 | ⚪ N.A. | need-<U+200B>crux-<U+200B>data… [full ↓](#c4) | [C4 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C4.md) | - Possible obfuscationline 17
| C4 | P1 | Core Web Vitals pass: LCP<2.5s / INP<200ms / CLS<0.1 | ⚪ N.A. | need-<U+200B>crux-<U+200B>data… [full ↓](#c4) | [C4 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C4.md) | - Network accessline 18
| C5 | P1 | IndexNow key file reachable at the site root | ⚪ N.A. | need-<U+200B>key-<U+200B>declaration… [full ↓](#c5) | [C5 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C5.md) | - Possible obfuscationline 18
| C5 | P1 | IndexNow key file reachable at the site root | ⚪ N.A. | need-<U+200B>key-<U+200B>declaration… [full ↓](#c5) | [C5 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C5.md) | - Network accessline 19
| C6 | P1 | internal outlinks free of 4xx/5xx: links on pages don't point at broken pages | 🔴 fail | 1 dead internal… [full ↓](#c6) | [C6 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C6.md) | - Network accessline 20
| C7 | P2 | llms.txt exists: a site directory for AI engines at the root | 🔴 fail | /<U+200B>llms.txt → 404 | [C7 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C7.md) | - Possible obfuscationline 20
| C7 | P2 | llms.txt exists: a site directory for AI engines at the root | 🔴 fail | /<U+200B>llms.txt → 404 | [C7 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C7.md) | - Network accessline 24
| ID | Priority | Check | Result | Evidence | Docs | |---|---|---|---|---|---| | C8 | P0 | self-referencing canonical: every page names its own canonical URL, HTML and header agree | 🔴 fail | /<U+200B>(canonical=<U+200B>https:<U+200B>/<U+200B>/… [full ↓](#c8) | [C8 do - Network accessline 25
|---|---|---|---|---|---| | C8 | P0 | self-referencing canonical: every page names its own canonical URL, HTML and header agree | 🔴 fail | /<U+200B>(canonical=<U+200B>https:<U+200B>/<U+200B>/… [full ↓](#c8) | [C8 docs](https://github.com/tigerless-labs/seo-ops/blob/ma - Network accessline 26
| C8 | P0 | self-referencing canonical: every page names its own canonical URL, HTML and header agree | 🔴 fail | /<U+200B>(canonical=<U+200B>https:<U+200B>/<U+200B>/… [full ↓](#c8) | [C8 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/re - Possible obfuscationline 26
| C8 | P0 | self-referencing canonical: every page names its own canonical URL, HTML and header agree | 🔴 fail | /<U+200B>(canonical=<U+200B>https:<U+200B>/<U+200B>/… [full ↓](#c8) | [C8 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/re - Network accessline 27
| C9 | P0 | full body served server-side: readable without executing JS (no CSR shell) | ✅ pass | 1/<U+200B>1 pages pass;… [full ↓](#c9) | [C9 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C9.md) | - Possible obfuscationline 27
| C9 | P0 | full body served server-side: readable without executing JS (no CSR shell) | ✅ pass | 1/<U+200B>1 pages pass;… [full ↓](#c9) | [C9 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C9.md) | - Network accessline 28
| C10 | P0 | cached HTML is a public non-personalized version: nothing user-specific in it | 🔴 fail | /<U+200B>(two fetches diff… [full ↓](#c10) | [C10 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C10.m - Possible obfuscationline 28
| C10 | P0 | cached HTML is a public non-personalized version: nothing user-specific in it | 🔴 fail | /<U+200B>(two fetches diff… [full ↓](#c10) | [C10 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C10.m - Network accessline 29
| C23 | P0 | indexed pages carry no noindex: neither meta robots nor X-Robots-Tag blocks | ✅ pass | 1/<U+200B>1 pages pass | [C23 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C23.md) | - Possible obfuscationline 29
| C23 | P0 | indexed pages carry no noindex: neither meta robots nor X-Robots-Tag blocks | ✅ pass | 1/<U+200B>1 pages pass | [C23 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C23.md) | - Network accessline 30
| C11 | P1 | title / description unique per page and within limits (<=70 / <=160) | 🔴 fail | /<U+200B>(title 75 chars >… [full ↓](#c11) | [C11 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C11.md) | - Possible obfuscationline 30
| C11 | P1 | title / description unique per page and within limits (<=70 / <=160) | 🔴 fail | /<U+200B>(title 75 chars >… [full ↓](#c11) | [C11 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C11.md) | - Network accessline 31
| C12 | P1 | JSON-LD: blocks parse, required fields present, no rejected types | 🔴 fail | /<U+200B>(missing WebSite) | [C12 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C12.md) | - Possible obfuscationline 31
| C12 | P1 | JSON-LD: blocks parse, required fields present, no rejected types | 🔴 fail | /<U+200B>(missing WebSite) | [C12 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C12.md) | - Network accessline 32
| C13 | P1 | no soft 404s: never a 200 serving an empty or error page (retire via 301/410) | ✅ pass | 1/<U+200B>1 pages pass;… [full ↓](#c13) | [C13 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C13.md) - Possible obfuscationline 32
| C13 | P1 | no soft 404s: never a 200 serving an empty or error page (retire via 301/410) | ✅ pass | 1/<U+200B>1 pages pass;… [full ↓](#c13) | [C13 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C13.md) - Network accessline 33
| C14 | P1 | no anti-flicker script hiding the whole page (crawlers may get a blank) | ✅ pass | 1/<U+200B>1 pages pass | [C14 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C14.md) | - Possible obfuscationline 33
| C14 | P1 | no anti-flicker script hiding the whole page (crawlers may get a blank) | ✅ pass | 1/<U+200B>1 pages pass | [C14 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C14.md) | - Network accessline 34
| C16 | P1 | snippet controls: max-snippet:-1 + max-image-preview:large | 🔴 fail | /<U+200B>(robots meta:… [full ↓](#c16) | [C16 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C16.md) | - Possible obfuscationline 34
| C16 | P1 | snippet controls: max-snippet:-1 + max-image-preview:large | 🔴 fail | /<U+200B>(robots meta:… [full ↓](#c16) | [C16 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C16.md) | - Network accessline 35
| C24 | P1 | viewport meta includes width=device-width | ✅ pass | 1/<U+200B>1 pages pass | [C24 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C24.md) | - Possible obfuscationline 35
| C24 | P1 | viewport meta includes width=device-width | ✅ pass | 1/<U+200B>1 pages pass | [C24 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C24.md) | - Network accessline 36
| C17 | P2 | heading hierarchy: exactly one h1, h2->h3 with no skipped levels | 🔴 fail | /<U+200B>(skips h1→h4) | [C17 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C17.md) | - Possible obfuscationline 36
| C17 | P2 | heading hierarchy: exactly one h1, h2->h3 with no skipped levels | 🔴 fail | /<U+200B>(skips h1→h4) | [C17 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C17.md) | - Network accessline 37
| C18 | P2 | every img has explicit width/height + alt | 🔴 fail | /<U+200B>(3/<U+200B>20 imgs missing… [full ↓](#c18) | [C18 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C18.md) | - Possible obfuscationline 37
| C18 | P2 | every img has explicit width/height + alt | 🔴 fail | /<U+200B>(3/<U+200B>20 imgs missing… [full ↓](#c18) | [C18 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C18.md) | - Network accessline 38
| C19 | P2 | full Open Graph set + twitter:card: social preview cards complete and correct | ✅ pass | 1/<U+200B>1 pages pass | [C19 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C19.md) | - Possible obfuscationline 38
| C19 | P2 | full Open Graph set + twitter:card: social preview cards complete and correct | ✅ pass | 1/<U+200B>1 pages pass | [C19 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C19.md) | - Network accessline 39
| C20 | P2 | redirect hops <=1: no chained redirects | ✅ pass | 1/<U+200B>1 pages pass | [C20 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C20.md) | - Possible obfuscationline 39
| C20 | P2 | redirect hops <=1: no chained redirects | ✅ pass | 1/<U+200B>1 pages pass | [C20 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C20.md) | - Network accessline 40
| C15 | P2 | render cost not per-request: SSR needs CDN caching (s-maxage + SWR), SSG exempt | ⚪ N.A. | need-<U+200B>declaration… [full ↓](#c15) | [C15 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C15.m - Possible obfuscationline 40
| C15 | P2 | render cost not per-request: SSR needs CDN caching (s-maxage + SWR), SSG exempt | ⚪ N.A. | need-<U+200B>declaration… [full ↓](#c15) | [C15 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C15.m - Network accessline 41
| C25 | P2 | no mixed content: no http:// subresources on HTTPS pages | ✅ pass | 1/<U+200B>1 pages pass | [C25 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C25.md) | - Possible obfuscationline 41
| C25 | P2 | no mixed content: no http:// subresources on HTTPS pages | ✅ pass | 1/<U+200B>1 pages pass | [C25 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C25.md) | - Network accessline 45
| ID | Priority | Check | Result | Evidence | Docs | |---|---|---|---|---|---| | C21 | P0 | YMYL trust block: author, review attribution, authoritative citations | 👤 human review | before launch, walk… [full ↓](#c21) | [C21 docs](https://gi - Network accessline 46
|---|---|---|---|---|---| | C21 | P0 | YMYL trust block: author, review attribution, authoritative citations | 👤 human review | before launch, walk… [full ↓](#c21) | [C21 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/ - Network accessline 47
| C21 | P0 | YMYL trust block: author, review attribution, authoritative citations | 👤 human review | before launch, walk… [full ↓](#c21) | [C21 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C21.m - Network accessline 48
| C22 | P1 | hreflang reciprocal pairs + x-default | 👤 human review | manually verify… [full ↓](#c22) | [C22 docs](https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references/C22.md) | - Network accessline 71
http://www.example.com/ → HTTPConnectionPool(host='www.example.com', port=80): Max retries exceeded with url: / (Caused by NameResolut - Network accessline 72
https://www.example.com/ → HTTPSConnectionPool(host='www.example.com', port=443): Max retries exceeded with url: / (Caused by NameResol - Network accessline 122
/(canonical=https://example.net/ ≠ /)
references/sites.example.yaml
- Network accessline 1
# Site roster — copy to sites.yaml, then fill in your own sites. # Not needed for a single site: python3 scripts/run.py --target https://example.com - Network accessline 2
# Not needed for a single site: python3 scripts/run.py --target https://example.com - Network accessline 3
sites: - id: example-com # used for the report filename and the checks table's site column production: https://www.example.com # site root URL (origin), required - Network accessline 4
- id: example-com # used for the report filename and the checks table's site column production: https://www.example.com # site root URL (origin), required rendering: ssr # ssr / ssg - Network accessline 5
production: https://www.example.com # site root URL (origin), required - Network accessline 6
rendering: ssr # ssr / ssg / isr — C15 branches on it; N.A. if unset sitemap: https://www.example.com/sitemap.xml # defaults to <production>/sitemap.xml if unset samples: # mus - Network accessline 7
sitemap: https://www.example.com/sitemap.xml # defaults to <production>/sitemap.xml if unset
scripts/config.py
- Executable scriptline 1
Executable file - Access to secretsline 5
[Credential-related source omitted] - Access to secretsline 32
[Credential-related source omitted] - Access to secretsline 83
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 101
[Credential-related source omitted] - Access to secretsline 102
[Credential-related source omitted] - Access to secretsline 106
[Credential-related source omitted] - Access to secretsline 108
[Credential-related source omitted] - Access to secretsline 109
[Credential-related source omitted] - Access to secretsline 110
[Credential-related source omitted] - Access to secretsline 125
[Credential-related source omitted] - Access to secretsline 127
[Credential-related source omitted] - Access to secretsline 128
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 135
[Credential-related source omitted] - Network accessline 146
# ── run target (one parameter, mode auto-detected) ──── # TARGET: the site's **root URL (origin)** = scheme + host[:port], no path/query/fragment # (valid: "http://localhost:3000", "https://www.example.com"; - Network accessline 147
# TARGET: the site's **root URL (origin)** = scheme + host[:port], no path/query/fragment # (valid: "http://localhost:3000", "https://www.example.com"; # invalid: "…/blog", "…?x=1" — validated at startup, errors out, never guesses). - Network accessline 148
# (valid: "http://localhost:3000", "https://www.example.com"; - Network accessline 160
TARGET = "" # e.g. "http://localhost:3000" or "https://www.example.com" - Access to secretsline 218
[Credential-related source omitted] - Access to secretsline 225
[Credential-related source omitted] - Access to secretsline 232
[Credential-related source omitted] - Access to secretsline 233
[Credential-related source omitted] - Access to secretsline 236
[Credential-related source omitted] - Network accessline 261
DOC_BASE_URL = "https://github.com/tigerless-labs/seo-ops/blob/main/references/checklist/references" - Access to secretsline 373
[Credential-related source omitted] - Access to secretsline 432
[Credential-related source omitted] - Access to secretsline 462
[Credential-related source omitted]
scripts/run.py
- Executable scriptline 1
#!/usr/bin/env python3 - Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 12
python3 scripts/run.py # config.TARGET empty → run every site in sites.yaml python3 scripts/run.py --site example-com # run just one site from sites.yaml python3 scripts/run.py --target http://localhost:3000 # - Network accessline 12
python3 scripts/run.py # config.TARGET empty → run every site in sites.yaml python3 scripts/run.py --site example-com # run just one site from sites.yaml python3 scripts/run.py --target http://localhost:3000 # - Network accessline 14
python3 scripts/run.py --target http://localhost:3000 # single-site override (local mode auto-detected) - Network accessline 14
python3 scripts/run.py --target http://localhost:3000 # single-site override (local mode auto-detected) - Access to secretsline 20
[Credential-related source omitted] - Access to secretsline 20
[Credential-related source omitted] - Network accessline 113
s = getattr(self.local, "s", None) if s is None: s = requests.Session() - Network accessline 113
s = getattr(self.local, "s", None) if s is None: s = requests.Session() - Network accessline 114
if s is None: s = requests.Session() s.headers["User-Agent"] = CFG.UA - Network accessline 114
if s is None: s = requests.Session() s.headers["User-Agent"] = CFG.UA - Network accessline 115
s = requests.Session() - Network accessline 115
s = requests.Session() - Network accessline 444
else: bare = host[4:] if host.startswith("www.") else host variants = [f"http://{bare}/", f"http://www.{bare}/", - Network accessline 444
else: bare = host[4:] if host.startswith("www.") else host variants = [f"http://{bare}/", f"http://www.{bare}/", - Network accessline 445
bare = host[4:] if host.startswith("www.") else host variants = [f"http://{bare}/", f"http://www.{bare}/", f"https://{bare}/", f"https://www.{bare}/"] - Network accessline 445
bare = host[4:] if host.startswith("www.") else host variants = [f"http://{bare}/", f"http://www.{bare}/", f"https://{bare}/", f"https://www.{bare}/"] - Network accessline 446
variants = [f"http://{bare}/", f"http://www.{bare}/", - Network accessline 446
variants = [f"http://{bare}/", f"http://www.{bare}/", - Network accessline 447
f"https://{bare}/", f"https://www.{bare}/"] - Network accessline 447
f"https://{bare}/", f"https://www.{bare}/"] - Access to secretsline 464
[Credential-related source omitted] - Access to secretsline 464
[Credential-related source omitted] - Network accessline 952
sub_re = re.compile(r"<(?:%s)\s[^>]*\bsrc\s*=\s*[\"']http://([^\"']+)" - Network accessline 952
sub_re = re.compile(r"<(?:%s)\s[^>]*\bsrc\s*=\s*[\"']http://([^\"']+)" - Network accessline 953
% "|".join(CFG.SUBRESOURCE_TAGS), flags=re.I) link_re = re.compile(r"<link\s[^>]*\bhref\s*=\s*[\"']http://([^\"']+)", flags=re.I) st = [] - Network accessline 953
% "|".join(CFG.SUBRESOURCE_TAGS), flags=re.I) link_re = re.compile(r"<link\s[^>]*\bhref\s*=\s*[\"']http://([^\"']+)", flags=re.I) st = [] - Network accessline 954
link_re = re.compile(r"<link\s[^>]*\bhref\s*=\s*[\"']http://([^\"']+)", flags=re.I) - Network accessline 954
link_re = re.compile(r"<link\s[^>]*\bhref\s*=\s*[\"']http://([^\"']+)", flags=re.I) - Network accessline 1157
host = urlparse(site["origin"]).netloc try: r = requests.post( - Network accessline 1157
host = urlparse(site["origin"]).netloc try: r = requests.post( - Network accessline 1158
try: r = requests.post( f"https://chromeuxreport.googleapis.com/v1/records:queryRecord?key={CFG.CRUX_API_KEY}", - Network accessline 1158
try: r = requests.post( f"https://chromeuxreport.googleapis.com/v1/records:queryRecord?key={CFG.CRUX_API_KEY}", - Network accessline 1159
r = requests.post( - Network accessline 1159
r = requests.post( - Network accessline 1160
[Credential-related source omitted] - Network accessline 1160
[Credential-related source omitted] - Access to secretsline 1160
[Credential-related source omitted] - Access to secretsline 1160
[Credential-related source omitted] - Network accessline 1161
json={"origin": f"https://{host}"}, timeout=CFG.REQUEST_TIMEOUT) - Network accessline 1161
json={"origin": f"https://{host}"}, timeout=CFG.REQUEST_TIMEOUT) - Network accessline 1629
f" mkdir -p {cd}\n" f" cp {ROOT / 'sites.example.yaml'} {cd / 'sites.yaml'}\n" f"then edit it per its comments for your own sites. A single-site run doesn't need this file: --target https://example.com" - Network accessline 1629
f" mkdir -p {cd}\n" f" cp {ROOT / 'sites.example.yaml'} {cd / 'sites.yaml'}\n" f"then edit it per its comments for your own sites. A single-site run doesn't need this file: --target https://example.com" - Network accessline 1630
f" cp {ROOT / 'sites.example.yaml'} {cd / 'sites.yaml'}\n" f"then edit it per its comments for your own sites. A single-site run doesn't need this file: --target https://example.com" ) - Network accessline 1630
f" cp {ROOT / 'sites.example.yaml'} {cd / 'sites.yaml'}\n" f"then edit it per its comments for your own sites. A single-site run doesn't need this file: --target https://example.com" ) - Network accessline 1631
f"then edit it per its comments for your own sites. A single-site run doesn't need this file: --target https://example.com" - Network accessline 1631
f"then edit it per its comments for your own sites. A single-site run doesn't need this file: --target https://example.com" - Access to secretsline 1677
[Credential-related source omitted] - Access to secretsline 1677
[Credential-related source omitted]
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 1 fact
- Contacts chromeuxreport.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionscripts/run.py:1160High confidence
Signal confidence: 364 facts
- Network access in prose of documentationREADME.md:4Low confidence
- Network access in prose of documentationREADME.md:5Low confidence
- Network access in code of documentationREADME.md:33Low confidence
- Network access in prose of documentationREADME.md:64Low confidence
- Network access in prose of the SKILL.mdSKILL.md:17Low confidence
- Network access in prose of the SKILL.mdSKILL.md:17Low confidence
- Network access in prose of the SKILL.mdSKILL.md:18Low confidence
- Network access in prose of the SKILL.mdSKILL.md:18Low confidence
- Network access in code of the SKILL.mdSKILL.md:100High confidence
- Network access in code of the SKILL.mdSKILL.md:100High confidence
- Network access in code of the SKILL.mdSKILL.md:101High confidence
- Network access in code of the SKILL.mdSKILL.md:101High confidence
- Network access in prose of the SKILL.mdSKILL.md:106Low confidence
- Network access in prose of the SKILL.mdSKILL.md:106Low confidence
- Network access in prose of the SKILL.mdSKILL.md:107Low confidence
- Network access in prose of the SKILL.mdSKILL.md:107Low confidence
- Network access in prose of documentationredlines.md:23Low confidence
- Network access in prose of documentationredlines.md:24Low confidence
- Network access in prose of documentationredlines.md:25Low confidence
- Network access in prose of documentationredlines.md:26Low confidence
- Network access in prose of documentationredlines.md:27Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:12Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:13Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:14Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:40Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:41Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:42Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:64Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:65Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:66Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:67Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:68Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:69Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:70Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:71Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:72Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:73Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:74Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:75Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:76Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:77Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:78Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:79Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:80Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:81Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:82Low confidence
- Network access in prose of documentationreferences/checklist/checklist.md:83Low confidence
- Network access in code of documentationreferences/checklist/references/C1.md:34Low confidence
- Network access in prose of documentationreferences/checklist/references/C1.md:43Low confidence
- Network access in prose of documentationreferences/checklist/references/C1.md:45Low confidence
and 314 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/tigerless-labs-seo-ops/)