#880 by GitHub stars
Bhanunamikaze/Agentic-SEO-Skill
Deterministic LLM-first SEO audits for websites, blog posts, and GitHub repositories. Use this when the user asks to "perform SEO analysis", "run SEO audit", "analyze SEO", "check technical SEO", "review schema", "Core Web Vitals", "E-E-A-T", "hreflang", "GEO", "AEO", or GitHub repository SEO optimi
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 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
445c46c268d9 → 445c46c268d9
Heat
5.3- Star growth, last 7 daysAhead of 84% of tracked repositories
- Star growth, last 24 hoursAhead of 73% of tracked repositories
- Rank movement, last 7 daysAhead of 4% of tracked repositories
- Commits, last 30 daysAhead of 54% 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
- seo
/
How it works
seo
When your agent uses it
Deterministic LLM-first SEO audits for websites, blog posts, and GitHub repositories. Use this when the user asks to "perform SEO analysis", "run SEO audit", "analyze SEO", "check technical SEO", "review schema", "Core Web Vitals", "E-E-A-T", "hreflang", "GEO", "AEO", or GitHub repository SEO optimization. For full/page/repo audits, run bundled scripts for evidence and return prioritized, confidence-labeled fixes.
What it loads into context
Frontmatter
121 tokensAlways available to the agent
SKILL.md
4,849 tokensWhen the skill is activated
Reference documents
77,553 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Deterministic Trigger Mapping
- Available Commands
- Orchestration Logic
- Industry Detection
- Schema Templates
- Validation Scripts
- Output Format
- Critical Rules
- Dependencies
Scripts executed separately
install.ps1install.shscripts/__init__.pyscripts/a11y_seo_checker.pyscripts/ai_crawler_policy_matrix.pyscripts/analyze_visual.pyscripts/anchor_text_audit.pyscripts/answer_block_scanner.pyscripts/article_seo.pyscripts/audit_runner.pyscripts/broken_links.pyscripts/cache_compression_checker.pyscripts/canonical_checker.pyscripts/capture_screenshot.pyscripts/citation_readiness.pyscripts/collection_page_checker.pyscripts/competitor_gap.pyscripts/content_decay_detector.pyscripts/content_intent_matcher.pyscripts/crawl_audit.pyscripts/critical_request_chain.pyscripts/duplicate_content.pyscripts/eeat_signal_checker.pyscripts/entity_checker.pyscripts/env_loader.pyscripts/external_link_quality.pyscripts/faceted_nav_audit.pyscripts/fetch_page.pyscripts/finding_verifier.pyscripts/font_audit.pyscripts/freshness_checker.pyscripts/generate_report.pyscripts/github_api.pyscripts/github_community_health.pyscripts/github_competitor_research.pyscripts/github_readme_lint.pyscripts/github_repo_audit.pyscripts/github_search_benchmark.pyscripts/github_seo_report.pyscripts/github_traffic_archiver.pyscripts/github_weekly_scorecard.pyscripts/gsc_checker.pyscripts/hreflang_checker.pyscripts/hreflang_sitemap_validator.pyscripts/image_inventory.pyscripts/image_weight_audit.pyscripts/indexability_matrix.pyscripts/indexnow_checker.pyscripts/internal_links.pyscripts/javascript_render_audit.pyscripts/lcp_subparts.pyscripts/lib/__init__.pyscripts/lib/safe_http.pyscripts/lighthouse_runner.pyscripts/link_profile.pyscripts/llms_txt_checker.pyscripts/llms_txt_generator.pyscripts/local_seo_checker.pyscripts/log_file_analyzer.pyscripts/mobile_render_checker.pyscripts/orphan_pages_from_sitemap.pyscripts/pagespeed.pyscripts/parse_html.pyscripts/pre_commit_seo_check.shscripts/product_schema_checker.pyscripts/readability.pyscripts/redirect_backlink_reclaim.pyscripts/redirect_checker.pyscripts/reference_freshness.pyscripts/repo_docs_site_checker.pyscripts/repo_file_inventory.pyscripts/repo_release_seo.pyscripts/repo_social_preview_checker.pyscripts/repo_topic_suggester.pyscripts/review_schema_checker.pyscripts/rich_results_guard.pyscripts/robots_checker.pyscripts/robots_path_tester.pyscripts/schema_diff.pyscripts/schema_required_props.pyscripts/schema_template_generator.pyscripts/security_headers.pyscripts/seo_common.pyscripts/sitemap_checker.pyscripts/sitemap_generator.pyscripts/social_meta.pyscripts/third_party_script_audit.pyscripts/topical_cluster_mapper.pyscripts/url_quality.pyscripts/validate_schema.pyscripts/validate_skill_inventory.pyscripts/video_schema_checker.pyscripts/visual_regression_snapshot.pyscripts/x_robots_header_checker.pytests/test_content_ai_scripts.pytests/test_core_seo_scripts.pytests/test_duplicate_content.pytests/test_link_and_github_depth_scripts.pytests/test_pagespeed.pytests/test_performance_scripts.pytests/test_readability.pytests/test_reporting.pytests/test_schema_local_ecommerce_scripts.py
Files
.env.exampleasset2,039 bytes.github/CODEOWNERSasset17 bytes.github/ISSUE_TEMPLATE/bug_report.mddoc309 bytes.github/ISSUE_TEMPLATE/feature_request.mddoc250 bytes.github/dependabot.ymlasset270 bytes.github/pull_request_template.mddoc437 bytes.github/workflows/ci.ymlasset609 bytes.github/workflows/package-on-tag.ymlasset2,136 bytes.gitignoreasset497 bytesCHANGELOG.mddoc1,692 bytesCITATION.cffasset616 bytesCODE_OF_CONDUCT.mddoc870 bytesCONTRIBUTING.mddoc1,560 bytesLICENSEasset1,103 bytesREADME.mddoc27,922 bytesSECURITY.mddoc1,025 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSKILL.mdcore19,845 bytesSUPPORT.mddoc576 bytesdocs/images/example-prompt-output.pngasset75,771 bytesdocs/images/report-dashboard.pngasset232,849 bytesimprovements.mddoc34,371 bytesinstall.ps1runs39,122 bytesinstall.shruns27,368 bytespyproject.tomlasset860 bytesrequirements.txtdoc190 bytesresources/agents/seo-content.mddoc5,814 bytesresources/agents/seo-github-analyst.mddoc1,764 bytesresources/agents/seo-github-benchmark.mddoc1,275 bytesresources/agents/seo-github-data.mddoc1,314 bytesresources/agents/seo-performance.mddoc5,012 bytesresources/agents/seo-schema.mddoc4,279 bytesresources/agents/seo-sitemap.mddoc4,583 bytesresources/agents/seo-technical.mddoc5,076 bytesresources/agents/seo-verifier.mddoc1,207 bytesresources/agents/seo-visual.mddoc5,150 bytesresources/config/scoring.jsonasset1,313 bytesresources/references/cwv-thresholds.mddoc5,183 bytesresources/references/eeat-framework.mddoc7,503 bytesresources/references/github-api-ops.mddoc1,799 bytesresources/references/github-ranking-factors.mddoc1,833 bytesresources/references/google-seo-reference.mddoc7,766 bytesresources/references/link-building.mddoc5,965 bytesresources/references/llm-audit-rubric.mddoc5,050 bytesresources/references/quality-gates.mddoc5,240 bytesresources/references/readme-audit-rubric.mddoc1,795 bytesresources/references/schema-types.mddoc5,949 bytesresources/schema/templates.jsonasset12,733 bytesresources/skills/seo-aeo.mddoc6,633 bytesresources/skills/seo-article.mddoc1,984 bytesresources/skills/seo-audit.mddoc3,614 bytesresources/skills/seo-competitor-pages.mddoc6,960 bytesresources/skills/seo-content.mddoc7,083 bytesresources/skills/seo-geo.mddoc8,692 bytesresources/skills/seo-github.mddoc4,775 bytesresources/skills/seo-hreflang.mddoc7,986 bytesresources/skills/seo-images.mddoc5,457 bytesresources/skills/seo-links.mddoc4,442 bytesresources/skills/seo-page.mddoc4,023 bytesresources/skills/seo-plan.mddoc5,917 bytesresources/skills/seo-programmatic.mddoc8,007 bytesresources/skills/seo-schema.mddoc5,101 bytesresources/skills/seo-sitemap.mddoc3,686 bytesresources/skills/seo-technical.mddoc9,280 bytesresources/templates/agency.mddoc4,522 bytesresources/templates/blog-post.mddoc2,546 bytesresources/templates/ecommerce.mddoc4,888 bytesresources/templates/generic.mddoc4,171 bytesresources/templates/github-seo-report.mddoc866 bytesresources/templates/github-weekly-scorecard.mddoc954 bytesresources/templates/local-service.mddoc5,446 bytesresources/templates/news-article.mddoc2,354 bytesresources/templates/publisher.mddoc4,568 bytesresources/templates/saas.mddoc4,487 bytesresources/templates/technical-article.mddoc2,415 bytesscripts/__init__.pyruns34 bytesscripts/a11y_seo_checker.pyruns3,440 bytesscripts/ai_crawler_policy_matrix.pyruns2,220 bytesscripts/analyze_visual.pyruns6,629 bytesscripts/anchor_text_audit.pyruns7,930 bytesscripts/answer_block_scanner.pyruns3,986 bytesscripts/article_seo.pyruns27,770 bytesscripts/audit_runner.pyruns3,171 bytesscripts/broken_links.pyruns8,510 bytesscripts/cache_compression_checker.pyruns6,818 bytesscripts/canonical_checker.pyruns3,511 bytesscripts/capture_screenshot.pyruns4,490 bytesscripts/citation_readiness.pyruns5,247 bytesscripts/collection_page_checker.pyruns4,303 bytesscripts/competitor_gap.pyruns10,475 bytesscripts/content_decay_detector.pyruns6,329 bytesscripts/content_intent_matcher.pyruns5,554 bytesscripts/crawl_audit.pyruns7,355 bytesscripts/critical_request_chain.pyruns4,890 bytesscripts/duplicate_content.pyruns14,300 bytesscripts/eeat_signal_checker.pyruns5,616 bytesscripts/entity_checker.pyruns19,843 bytesscripts/env_loader.pyruns3,642 bytesscripts/external_link_quality.pyruns6,732 bytesscripts/faceted_nav_audit.pyruns3,404 bytesscripts/fetch_page.pyruns3,721 bytesscripts/finding_verifier.pyruns4,976 bytesscripts/font_audit.pyruns6,048 bytesscripts/freshness_checker.pyruns6,344 bytesscripts/generate_report.pyruns82,657 bytesscripts/github_api.pyruns13,081 bytesscripts/github_community_health.pyruns9,068 bytesscripts/github_competitor_research.pyruns17,567 bytesscripts/github_readme_lint.pyruns15,245 bytesscripts/github_repo_audit.pyruns21,464 bytesscripts/github_search_benchmark.pyruns7,902 bytesscripts/github_seo_report.pyruns32,814 bytesscripts/github_traffic_archiver.pyruns6,481 bytesscripts/github_weekly_scorecard.pyruns4,532 bytesscripts/gsc_checker.pyruns11,695 bytesscripts/hreflang_checker.pyruns24,738 bytesscripts/hreflang_sitemap_validator.pyruns6,527 bytesscripts/image_inventory.pyruns2,900 bytesscripts/image_weight_audit.pyruns4,875 bytesscripts/indexability_matrix.pyruns3,576 bytesscripts/indexnow_checker.pyruns9,578 bytesscripts/internal_links.pyruns10,724 bytesscripts/javascript_render_audit.pyruns2,984 bytesscripts/lcp_subparts.pyruns7,505 bytesscripts/lib/__init__.pyruns46 bytesscripts/lib/safe_http.pyruns6,260 bytesscripts/lighthouse_runner.pyruns6,096 bytesscripts/link_profile.pyruns12,851 bytesscripts/llms_txt_checker.pyruns7,638 bytesscripts/llms_txt_generator.pyruns2,990 bytesscripts/local_seo_checker.pyruns3,738 bytesscripts/log_file_analyzer.pyruns6,137 bytesscripts/mobile_render_checker.pyruns7,070 bytesscripts/orphan_pages_from_sitemap.pyruns6,352 bytesscripts/pagespeed.pyruns13,253 bytesscripts/parse_html.pyruns12,493 bytesscripts/pre_commit_seo_check.shruns2,972 bytesscripts/product_schema_checker.pyruns4,971 bytesscripts/readability.pyruns14,799 bytesscripts/redirect_backlink_reclaim.pyruns5,811 bytesscripts/redirect_checker.pyruns6,341 bytesscripts/reference_freshness.pyruns2,979 bytesscripts/repo_docs_site_checker.pyruns5,885 bytesscripts/repo_file_inventory.pyruns3,674 bytesscripts/repo_release_seo.pyruns6,720 bytesscripts/repo_social_preview_checker.pyruns4,167 bytesscripts/repo_topic_suggester.pyruns6,445 bytesscripts/review_schema_checker.pyruns4,054 bytesscripts/rich_results_guard.pyruns3,524 bytesscripts/robots_checker.pyruns7,415 bytesscripts/robots_path_tester.pyruns1,831 bytesscripts/schema_diff.pyruns3,127 bytesscripts/schema_required_props.pyruns8,311 bytesscripts/schema_template_generator.pyruns5,481 bytesscripts/security_headers.pyruns6,961 bytesscripts/seo_common.pyruns14,429 bytesscripts/sitemap_checker.pyruns6,623 bytesscripts/sitemap_generator.pyruns3,503 bytesscripts/social_meta.pyruns8,912 bytesscripts/third_party_script_audit.pyruns4,804 bytesscripts/topical_cluster_mapper.pyruns6,549 bytesscripts/url_quality.pyruns2,567 bytesscripts/validate_schema.pyruns4,387 bytesscripts/validate_skill_inventory.pyruns4,876 bytesscripts/video_schema_checker.pyruns3,706 bytesscripts/visual_regression_snapshot.pyruns5,455 bytesscripts/x_robots_header_checker.pyruns2,049 bytestests/fixtures/pagespeed_field_data.jsonasset945 bytestests/fixtures/pagespeed_lab_data.jsonasset810 bytestests/fixtures/report_data.jsonasset2,136 bytestests/test_content_ai_scripts.pyruns5,021 bytestests/test_core_seo_scripts.pyruns1,824 bytestests/test_duplicate_content.pyruns2,908 bytestests/test_link_and_github_depth_scripts.pyruns2,545 bytestests/test_pagespeed.pyruns3,432 bytestests/test_performance_scripts.pyruns4,088 bytestests/test_readability.pyruns1,387 bytestests/test_reporting.pyruns1,958 bytestests/test_schema_local_ecommerce_scripts.pyruns2,408 byteswiki/Audit-Workflow.mddoc2,283 byteswiki/Command-Reference.mddoc1,733 byteswiki/Example-Prompts.mddoc12,989 byteswiki/Home.mddoc5,916 byteswiki/Installation.mddoc8,432 byteswiki/Release-and-Packaging.mddoc1,136 byteswiki/Reports-and-Outputs.mddoc6,242 byteswiki/Script-Inventory.mddoc11,551 byteswiki/Troubleshooting.mddoc1,677 byteswiki/_Sidebar.mddoc218 bytes
Read SKILL.md
# SEO Skill (Agentic / Claude / Codex)
LLM-first SEO analysis skill with 16 specialized sub-skills, 10 specialist agents, and 89 scripts for website, blog, and GitHub repository optimization.
## Deterministic Trigger Mapping
For prompt reliability in Codex/agent IDEs, map common user wording to a fixed workflow:
- If user says `perform seo analysis on <url>` (or similar generic SEO request with a URL), treat it as a **single-URL full audit**.
- If no explicit sub-skill is specified, run the full/page audit path with **LLM-first reasoning** and script-backed evidence.
- For full/page audits, always produce:
- `FULL-AUDIT-REPORT.md` (detailed findings)
- `ACTION-PLAN.md` (prioritized fixes)
- If `generate_report.py` is run, also return the saved HTML path (for example `SEO-REPORT.html`).View the complete source on GitHubSkills included
- seo
Repository facts
- License
- MIT
- Created
- Mar 2, 2026
- Last pushed
- Oct 14, 2026
- Forks
- 152
- Open issues
- 5
- Project activity
- Active
Rank over the last 12 weeks
Now #880 · best #620 · down 116 in 30 days
- #866 on Nov 2
- #871 on Nov 3
- #875 on Nov 4
- #876 on Nov 5
- #877 on Nov 6
- #880 since Nov 7
72 earlier periods
- #621 on Aug 2
- #609 on Aug 8
- #620 on Aug 9
- #646 on Aug 10
- #654 on Aug 11
- #650 on Aug 12
- #644 on Aug 14
- #624 on Aug 15
- #637 on Aug 16
- #646 on Aug 17
- #659 on Aug 18
- #644 on Aug 20
- #649 on Aug 21
- #620 on Aug 22
- #650 on Aug 23
- #664 on Aug 24
- #669 on Aug 25
- #654 on Aug 26
- #659 on Aug 27
- #682 on Aug 28
- #633 on Aug 29
- #634 on Aug 30
- #663 on Aug 31
- #676 on Sep 1
- #661 on Sep 2
- #666 on Sep 3
- #657 on Sep 6
- #693 on Sep 8
- #681 from Sep 9 to Sep 10
- #668 on Sep 11
- #671 on Sep 12
- #670 on Sep 13
- #692 on Sep 14
- #681 on Sep 15
- #693 on Sep 16
- #694 on Sep 17
- #663 on Sep 19
- #677 on Sep 20
- #692 on Sep 21
- #710 on Sep 22
- #702 on Sep 23
- #675 on Sep 24
- #661 on Sep 25
- #663 on Sep 26
- #695 on Sep 27
- #700 on Sep 28
- #719 on Sep 30
- #689 on Oct 2
- #667 on Oct 3
- #706 on Oct 5
- #714 on Oct 6
- #723 on Oct 7
- #764 on Oct 8
- #727 on Oct 9
- #712 on Oct 10
- #714 on Oct 11
- #732 on Oct 12
- #737 on Oct 13
- #748 on Oct 14
- #739 on Oct 15
- #743 on Oct 16
- #723 on Oct 17
- #757 on Oct 20
- #766 on Oct 21
- #750 on Oct 23
- #712 on Oct 24
- #843 on Oct 25
- #851 on Oct 28
- #855 on Oct 29
- #857 on Oct 30
- #858 on Oct 31
- #860 on Nov 1
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 14 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 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 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 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 analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 20 dangerous shell commandsin 4 files: install.sh:94 wiki/Installation.md:39 README.md:152 and 1 more
- 650 network referencesin 77 files: resources/schema/templates.json:5 README.md:5 install.sh:5 and 74 more
- 2 obfuscation signalsin 2 files: scripts/github_competitor_research.py:165 scripts/github_readme_lint.py:57
- No instruction overrides
- 103 executable scriptsin 103 files: install.ps1:1 install.sh:1 scripts/__init__.py:1 and 100 more
- 66 references to secretsin 24 files: scripts/env_loader.py:2 scripts/pagespeed.py:10 scripts/entity_checker.py:237 and 21 more
- No requests to vote in Hot
Show all 841 signals by file
.env.example
- Network accessline 11
# Google PageSpeed Insights (scripts/pagespeed.py, scripts/generate_report.py) # --------------------------------------------------------------------------- # Get one at https://console.cloud.google.com/ → enable "PageSpeed Insights API". - Network accessline 12
# --------------------------------------------------------------------------- # Get one at https://console.cloud.google.com/ → enable "PageSpeed Insights API". # Without a key the public PSI endpoint works but is heavily rate-limited. - Network accessline 13
# Get one at https://console.cloud.google.com/ → enable "PageSpeed Insights API". - Access to secretsline 15
[Credential-related source omitted] - Network accessline 18
# Google Knowledge Graph (scripts/entity_checker.py) # --------------------------------------------------------------------------- # Get one at https://console.cloud.google.com/ → enable "Knowledge Graph Search API". - Network accessline 19
[Credential-related source omitted] - Network accessline 20
# Get one at https://console.cloud.google.com/ → enable "Knowledge Graph Search API". - Access to secretsline 21
[Credential-related source omitted] - Access to secretsline 25
[Credential-related source omitted]
.gitignore
- Access to secretsline 35
[Credential-related source omitted]
CITATION.cff
- Network accessline 5
authors: - family-names: "Bhanunamikaze" repository-code: "https://github.com/Bhanunamikaze/Agentic-SEO-Skill" - Network accessline 6
- family-names: "Bhanunamikaze" repository-code: "https://github.com/Bhanunamikaze/Agentic-SEO-Skill" url: "https://github.com/Bhanunamikaze/Agentic-SEO-Skill" - Network accessline 7
repository-code: "https://github.com/Bhanunamikaze/Agentic-SEO-Skill" - Network accessline 8
url: "https://github.com/Bhanunamikaze/Agentic-SEO-Skill"
README.md
- Network accessline 5
For detailed installation guidance, example prompts, report generation, troubleshooting, and the full script inventory, see the **[Agentic SEO Skill Wiki](https://github.com/Bhanunamikaze/Agentic-SEO-Skill/wiki)**. - Network accessline 38
The README only highlights the scripts most users reach for first. See the full 89-script list with purpose notes in the [Script Inventory wiki](https://github.com/Bhanunamikaze/Agentic-SEO-Skill/wiki/Script-Inventory). - Network accessline 151
# Default: installs to every target at once curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online - Dangerous shell operationline 152
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online - Network accessline 152
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online - Network accessline 154
# Claude Code only curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target claude - Dangerous shell operationline 155
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target claude - Network accessline 155
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target claude - Network accessline 157
# User-wide (Claude + Codex) curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target global - Dangerous shell operationline 158
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target global - Network accessline 158
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target global - Network accessline 160
# Every target, scoped to a project curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target all --project-dir /path/to/your/project - Dangerous shell operationline 161
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target all --project-dir /path/to/your/project - Network accessline 161
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target all --project-dir /path/to/your/project - Network accessline 166
# Download installer, then run with --online irm https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.ps1 -OutFile install.ps1 - Network accessline 167
irm https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.ps1 -OutFile install.ps1 - Network accessline 182
git clone https://github.com/Bhanunamikaze/Agentic-SEO-Skill.git - Network accessline 234
curl -fsSLO https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh - Network accessline 280
For expanded copy-paste prompt templates across full audits, technical SEO, schema, content, GEO/AEO, local SEO, ecommerce, and GitHub SEO, see the [Example Prompts wiki](https://github.com/Bhanunamikaze/Agentic-SEO-Skill/wiki/Example-Promp - Network accessline 326
Run a full SEO audit for https://hackingdream.net and prioritize fixes by impact. - Network accessline 332
Analyze this article: https://www.hackingdream.net/2026/02/cobalt-strike-beacon-commands-red-team-field-guide.html - Network accessline 336
Do a single-page SEO analysis of https://hackingdream.net and show critical issues first. - Network accessline 342
Analyze technical SEO for https://hackingdream.net (robots, crawlability, canonicals, redirects, headers). - Network accessline 348
Review content quality and E-E-A-T signals on https://hackingdream.net and suggest concrete rewrites. - Network accessline 354
Check schema markup on https://hackingdream.net, validate errors, and generate corrected JSON-LD. - Network accessline 360
Run Core Web Vitals analysis on https://hackingdream.net and break down LCP subparts. - Network accessline 366
Evaluate GEO readiness for https://hackingdream.net (AI crawler access, llms.txt, citation structure). - Network accessline 372
Analyze AEO signals for https://hackingdream.net — Featured Snippet targeting, PAA optimization, Knowledge Panel readiness. - Network accessline 378
Analyze internal link structure and backlink profile for https://hackingdream.net. - Network accessline 384
Check entity SEO for https://hackingdream.net — Wikidata presence, sameAs links, Knowledge Graph signals. - Network accessline 390
Find content gaps between https://hackingdream.net and competitors https://hackerone.com https://portswigger.net. - Network accessline 396
Validate hreflang implementation on https://hackingdream.net — BCP-47 tags, bidirectional links, x-default. - Network accessline 402
Check IndexNow implementation for https://hackingdream.net with key abc123def456. - Network accessline 408
Create a topical authority cluster plan for https://hackingdream.net covering cybersecurity topics. - Network accessline 414
Pull GSC performance data for https://hackingdream.net and identify striking-distance keywords. - Network accessline 420
Audit sitemap quality for https://hackingdream.net and flag missing, redirected, or noindex URLs. - Network accessline 426
Run image SEO checks for https://hackingdream.net (alt text, lazy loading, dimensions, format suggestions). - Network accessline 432
Create a 6-month SEO strategy for https://hackingdream.net with milestones and KPIs. - Network accessline 438
Take desktop and mobile screenshots of https://hackingdream.net and analyze above-the-fold content. - Network accessline 448
Run a complete SEO audit on https://hackingdream.net — include technical, content, schema, performance, - Network accessline 467
Run a full SEO audit for https://hackingdream.net and produce a prioritized action plan with evidence for each finding. - Network accessline 473
python3 scripts/generate_report.py "https://hackingdream.net" --output seo-report-hackingdream.html - Access to secretsline 498
[Credential-related source omitted] - Access to secretsline 499
[Credential-related source omitted] - Network accessline 504
| Variable | Used by | How to get one | |---|---|---| | `PAGESPEED_API_KEY` | `pagespeed.py`, `generate_report.py` | [Google Cloud Console](https://console.cloud.google.com/) → enable "PageSpeed Insights API" | - Network accessline 505
|---|---|---| | `PAGESPEED_API_KEY` | `pagespeed.py`, `generate_report.py` | [Google Cloud Console](https://console.cloud.google.com/) → enable "PageSpeed Insights API" | | `GOOGLE_KG_API_KEY` | `entity_checker.py` | Same console → enable " - Network accessline 506
[Credential-related source omitted] - Access to secretsline 506
[Credential-related source omitted] - Access to secretsline 507
[Credential-related source omitted] - Access to secretsline 513
[Credential-related source omitted] - Network accessline 518
# Example target URL="https://example.com" - Network accessline 519
URL="https://example.com" - Network accessline 550
python3 scripts/duplicate_content.py "$URL" --json python3 scripts/link_profile.py "$URL" --json python3 scripts/competitor_gap.py "$URL" --competitor https://competitor.com --json - Network accessline 551
python3 scripts/link_profile.py "$URL" --json python3 scripts/competitor_gap.py "$URL" --competitor https://competitor.com --json python3 scripts/faceted_nav_audit.py "$URL" --json - Network accessline 552
python3 scripts/competitor_gap.py "$URL" --competitor https://competitor.com --json - Network accessline 611
This project was originally inspired by **[claude-seo](https://github.com/AgriciDaniel/claude-seo)** by **[AgriciDaniel](https://github.com/AgriciDaniel)**. - Network accessline 621
Earlier inspiration and some concepts trace back to [claude-seo](https://github.com/AgriciDaniel/claude-seo), which is also MIT-licensed.
SKILL.md
- Access to secretsline 143
[Credential-related source omitted]
improvements.md
- Network accessline 16
| P1 | Scoring weights are inconsistent. | `SKILL.md` and `seo-audit.md` define canonical weights. `generate_report.py` has its own category weights. - Network accessline 17
| P1 | Network safety is inconsistent across scripts. | `fetch_page.py` has SSRF prevention for the initial URL. `analyze_visual.py` also blocks private/internal I - Network accessline 18
| P1 | `fetch_page.py` still uses the upstream project’s old user agent. | User-Agent says `ClaudeSEO/1.0; +https://github.com/AgriciDaniel/claude-seo`.
install.ps1
- Executable scriptline 1
#!/usr/bin/env pwsh - Network accessline 5
$REPO_URL = if ($env:REPO_URL) { $env:REPO_URL } else { 'https://github.com/Bhanunamikaze/Agentic-SEO-Skill.git' } - Network accessline 606
try { $releaseInfo = Invoke-RestMethod ` -Uri "https://api.github.com/repos/$GITHUB_REPO/releases/latest" ` - Network accessline 607
$releaseInfo = Invoke-RestMethod -Uri "https://api.github.com/repos/$GITHUB_REPO/releases/latest" - Network accessline 608
-Uri "https://api.github.com/repos/$GITHUB_REPO/releases/latest" ` - Network accessline 621
} else { $downloadUrl = "https://github.com/$GITHUB_REPO/archive/refs/tags/$latestTag.zip" - Network accessline 622
else { $downloadUrl = "https://github.com/$GITHUB_REPO/archive/refs/tags/$latestTag.zip" $downloadDesc = "source archive for tag $latestTag" - Network accessline 623
$downloadUrl = "https://github.com/$GITHUB_REPO/archive/refs/tags/$latestTag.zip" - Network accessline 630
} if (-not $downloadUrl) { $downloadUrl = "https://github.com/$GITHUB_REPO/archive/refs/heads/$GITHUB_REF.zip" - Network accessline 631
if (-not $downloadUrl) { $downloadUrl = "https://github.com/$GITHUB_REPO/archive/refs/heads/$GITHUB_REF.zip" $downloadDesc = "branch archive: $GITHUB_REF" - Network accessline 632
$downloadUrl = "https://github.com/$GITHUB_REPO/archive/refs/heads/$GITHUB_REF.zip" - Network accessline 689
$gitCmd = Get-Command -Name 'git' -CommandType Application -ErrorAction SilentlyContinue | Select-Object -First 1 if (-not $gitCmd) { throw "Error: git executable not found on PATH. Install Git for Windows (https://git-s - Network accessline 690
if (-not $gitCmd) { throw "Error: git executable not found on PATH. Install Git for Windows (https://git-scm.com/download/win) or pass --online to download a release archive instead." } - Network accessline 691
throw "Error: git executable not found on PATH. Install Git for Windows (https://git-scm.com/download/win) or pass --online to download a release archive instead." - Network accessline 827
Write-Host 'Next steps:' Write-Host ' 1. Restart your IDE/agent session to pick up the skill.' Write-Host " 2. Ask: 'perform seo analysis on https://example.com'" - Network accessline 828
Write-Host ' 1. Restart your IDE/agent session to pick up the skill.' Write-Host " 2. Ask: 'perform seo analysis on https://example.com'" Write-Host " 3. Or: 'seo github https://github.com/owner/repo'" - Network accessline 829
Write-Host " 2. Ask: 'perform seo analysis on https://example.com'" - Network accessline 830
Write-Host " 3. Or: 'seo github https://github.com/owner/repo'"
install.sh
- Executable scriptline 1
#!/usr/bin/env bash - Network accessline 5
REPO_URL="${REPO_URL:-https://github.com/Bhanunamikaze/Agentic-SEO-Skill.git}" - Network accessline 86
Safer remote install: curl -fsSLO https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh - Network accessline 87
curl -fsSLO https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh - Dangerous shell operationline 94
rm -rf "${TEMP_DIR}" - Dangerous shell operationline 140
rm -rf "${dest}" - Dangerous shell operationline 183
find "${dest}" -type d -name "__pycache__" -prune -exec rm -rf {} + 2>/dev/null || true - Dangerous shell operationline 184
find "${dest}" -type f -name "*.pyc" -delete 2>/dev/null || true - Dangerous shell operationline 185
find "${dest}" -type f -name "seo-report-*.html" -delete 2>/dev/null || true - Dangerous shell operationline 439
rm -rf "${build_dir}" - Dangerous shell operationline 464
rm -rf "${build_dir}" - Network accessline 548
if [[ "${ONLINE_MODE}" -eq 1 ]]; then require_cmd curl require_cmd tar - Network accessline 549
require_cmd curl require_cmd tar TEMP_DIR="$(mktemp -d)" - Network accessline 560
echo "Fetching latest release info from ${GITHUB_REPO}..." RELEASE_JSON=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/releases/latest" 2>/dev/null || true) - Network accessline 561
RELEASE_JSON=$(curl -fsSL "https://api.github.com/repos/${GITHUB_REPO}/releases/latest" 2>/dev/null || true) - Network accessline 576
DOWNLOAD_DESC="release asset: $(basename "${ASSET_URL}")" else DOWNLOAD_URL="https://github.com/${GITHUB_REPO}/archive/refs/tags/${LATEST_TAG}.tar.gz" - Network accessline 577
else DOWNLOAD_URL="https://github.com/${GITHUB_REPO}/archive/refs/tags/${LATEST_TAG}.tar.gz" DOWNLOAD_DESC="source archive for tag ${LATEST_TAG}" - Network accessline 578
DOWNLOAD_URL="https://github.com/${GITHUB_REPO}/archive/refs/tags/${LATEST_TAG}.tar.gz" - Network accessline 580
fi fi if [[ -z "${DOWNLOAD_URL}" ]]; then - Network accessline 581
fi if [[ -z "${DOWNLOAD_URL}" ]]; then DOWNLOAD_URL="https://github.com/${GITHUB_REPO}/archive/refs/heads/${GITHUB_REF}.tar.gz" - Network accessline 582
if [[ -z "${DOWNLOAD_URL}" ]]; then - Network accessline 583
DOWNLOAD_URL="https://github.com/${GITHUB_REPO}/archive/refs/heads/${GITHUB_REF}.tar.gz" - Network accessline 585
fi echo " Downloading ${DOWNLOAD_DESC}..." if ! curl -fsSL -o "${PKG}" "${DOWNLOAD_URL}"; then - Network accessline 586
echo " Downloading ${DOWNLOAD_DESC}..." if ! curl -fsSL -o "${PKG}" "${DOWNLOAD_URL}"; then echo "Error: download failed: ${DOWNLOAD_URL}" >&2 - Network accessline 587
if ! curl -fsSL -o "${PKG}" "${DOWNLOAD_URL}"; then - Network accessline 588
echo "Error: download failed: ${DOWNLOAD_URL}" >&2 - Dangerous shell operationline 595
rm -f "${PKG}" - Network accessline 610
if [[ -z "${SRC_DIR}" ]]; then echo "Error: downloaded archive did not contain SKILL.md." >&2 echo " Source URL: ${DOWNLOAD_URL}" >&2 - Network accessline 611
echo "Error: downloaded archive did not contain SKILL.md." >&2 echo " Source URL: ${DOWNLOAD_URL}" >&2 echo " Extract dir: ${EXTRACT_DIR}" >&2 - Network accessline 612
echo " Source URL: ${DOWNLOAD_URL}" >&2 - Network accessline 636
require_cmd git TEMP_DIR="$(mktemp -d)" echo "Cloning source repo: ${REPO_URL}" - Network accessline 637
TEMP_DIR="$(mktemp -d)" echo "Cloning source repo: ${REPO_URL}" if ! git clone --depth 1 "${REPO_URL}" "${TEMP_DIR}/repo" >/dev/null 2>&1; then - Network accessline 638
echo "Cloning source repo: ${REPO_URL}" - Network accessline 639
if ! git clone --depth 1 "${REPO_URL}" "${TEMP_DIR}/repo" >/dev/null 2>&1; then - Network accessline 640
echo "Error: failed to clone source repo: ${REPO_URL}" >&2 - Network accessline 727
echo "Next steps:" echo " 1. Restart your IDE/agent session to pick up the skill." echo " 2. Ask: 'perform seo analysis on https://example.com'" - Network accessline 728
echo " 1. Restart your IDE/agent session to pick up the skill." echo " 2. Ask: 'perform seo analysis on https://example.com'" echo " 3. Or: 'seo github https://github.com/owner/repo'" - Network accessline 729
echo " 2. Ask: 'perform seo analysis on https://example.com'" - Network accessline 730
echo " 3. Or: 'seo github https://github.com/owner/repo'"
resources/agents/seo-performance.md
- Network accessline 102
|------|-------| | **Lighthouse 13.0** (Oct 2025) | Major audit restructuring. Lab tool only — validate with field data | | **CrUX Vis** (Nov 2025) | Replaced CrUX Dashboard. Use [cruxvis.withgoogle.com](https://cruxvis.withgoogle.com) or C - Network accessline 103
| **Lighthouse 13.0** (Oct 2025) | Major audit restructuring. Lab tool only — validate with field data | | **CrUX Vis** (Nov 2025) | Replaced CrUX Dashboard. Use [cruxvis.withgoogle.com](https://cruxvis.withgoogle.com) or CrUX API | | **Pag - Network accessline 104
| **CrUX Vis** (Nov 2025) | Replaced CrUX Dashboard. Use [cruxvis.withgoogle.com](https://cruxvis.withgoogle.com) or CrUX API | - Network accessline 110
# PageSpeed Insights API curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=URL&key=API_KEY" - Network accessline 111
[Credential-related source omitted] - Access to secretsline 111
[Credential-related source omitted] - Network accessline 116
# CrUX API (field data) curl "https://chromeuxreport.googleapis.com/v1/records:queryRecord?key=API_KEY" \ - Network accessline 117
[Credential-related source omitted] - Access to secretsline 117
[Credential-related source omitted] - Network accessline 118
-d '{"url": "https://example.com"}'
resources/agents/seo-schema.md
- Network accessline 46
### Always Prefer - JSON-LD format over Microdata or RDFa - `https://schema.org` as `@context` (not http) - Network accessline 47
- JSON-LD format over Microdata or RDFa - `https://schema.org` as `@context` (not http) - Absolute URLs (not relative) - Network accessline 48
- `https://schema.org` as `@context` (not http) - Network accessline 54
For any schema block, verify: 1. ✅ `@context` is `"https://schema.org"` - Network accessline 55
1. ✅ `@context` is `"https://schema.org"`
resources/agents/seo-sitemap.md
- Network accessline 68
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 69
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 70
<url> <loc>https://example.com/page</loc> <lastmod>2026-02-07</lastmod> - Network accessline 71
<loc>https://example.com/page</loc> - Network accessline 79
<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 80
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 81
<sitemap> <loc>https://example.com/sitemap-posts.xml</loc> <lastmod>2026-02-07</lastmod> - Network accessline 82
<loc>https://example.com/sitemap-posts.xml</loc> - Network accessline 84
</sitemap> <sitemap> <loc>https://example.com/sitemap-pages.xml</loc> - Network accessline 85
<sitemap> <loc>https://example.com/sitemap-pages.xml</loc> <lastmod>2026-01-15</lastmod> - Network accessline 86
<loc>https://example.com/sitemap-pages.xml</loc> - Network accessline 94
<url> <loc>https://example.com/page</loc> - Network accessline 95
<loc>https://example.com/page</loc> - Network accessline 96
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/page"/> - Network accessline 97
<xhtml:link rel="alternate" hreflang="es" href="https://example.com/es/page"/> - Network accessline 98
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page"/> - Network accessline 104
<url> <loc>https://example.com/page</loc> - Network accessline 105
<loc>https://example.com/page</loc> - Network accessline 106
<image:image> <image:loc>https://example.com/images/hero.webp</image:loc> <image:title>Descriptive title</image:title> - Network accessline 107
<image:loc>https://example.com/images/hero.webp</image:loc> - Network accessline 115
Ensure your sitemap is discoverable: 1. **robots.txt**: `Sitemap: https://example.com/sitemap.xml` - Network accessline 116
1. **robots.txt**: `Sitemap: https://example.com/sitemap.xml`
resources/agents/seo-technical.md
- Network accessline 64
Check these response headers (use `curl -I <url>`):
resources/references/cwv-thresholds.md
- Network accessline 94
# PageSpeed Insights API curl "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=URL&key=API_KEY" - Network accessline 95
[Credential-related source omitted] - Access to secretsline 95
[Credential-related source omitted] - Network accessline 103
- **Lighthouse 13.0** (October 2025): Major audit restructuring with reorganized performance categories and updated scoring weights. Lighthouse is a lab tool (simulated conditions) — always cross-reference with CrUX field data for real-worl - Network accessline 104
- **CrUX Vis** replaced the CrUX Dashboard (November 2025). The old Looker Studio dashboard was deprecated. Use [CrUX Vis](https://cruxvis.withgoogle.com) or the CrUX API directly.
resources/references/google-seo-reference.md
- Network accessline 138
- [Google Search Essentials](https://developers.google.com/search/docs/essentials) - Network accessline 139
- [How Google Search Works](https://developers.google.com/search/docs/fundamentals/how-search-works) - Network accessline 140
- [Structured Data Overview](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data) - Network accessline 141
- [Rich Results Test](https://search.google.com/test/rich-results) - Network accessline 142
- [Core Web Vitals Report](https://support.google.com/webmasters/answer/9205520) - Network accessline 143
- [PageSpeed Insights](https://pagespeed.web.dev/) - Network accessline 144
- [Search Console Help](https://support.google.com/webmasters) - Network accessline 145
- [Manual Actions Report](https://support.google.com/webmasters/answer/9044175) - Network accessline 146
- [Google Search Status Dashboard](https://status.search.google.com/) - Network accessline 147
- [Google Search Central Blog](https://developers.google.com/search/blog) - Network accessline 148
- [Spam Policies](https://developers.google.com/search/docs/essentials/spam-policies) - Network accessline 149
- [E-E-A-T and Quality Rater Guidelines](https://developers.google.com/search/docs/fundamentals/creating-helpful-content)
resources/references/link-building.md
resources/references/schema-types.md
resources/schema/templates.json
- Network accessline 5
"description": "Video content pages with thumbnails, duration, and playback URLs. Enables video rich results in Google Search.", "template": { "@context": "https://schema.org", - Network accessline 6
"template": { "@context": "https://schema.org", "@type": "VideoObject", - Network accessline 7
"@context": "https://schema.org", - Network accessline 28
"description": "Live streaming content for LIVE badge in Google Search results. Requires VideoObject and isLiveBroadcast flag.", "template": { "@context": "https://schema.org", - Network accessline 29
"template": { "@context": "https://schema.org", "@type": "VideoObject", - Network accessline 30
"@context": "https://schema.org", - Network accessline 48
"description": "Key moments or chapters within a video. Enables key moments rich results with timestamp links.", "template": { "@context": "https://schema.org", - Network accessline 49
"template": { "@context": "https://schema.org", "@type": "VideoObject", - Network accessline 50
"@context": "https://schema.org", - Network accessline 77
"description": "Enable seek functionality in video rich results. Allows users to jump to specific timestamps from search.", "template": { "@context": "https://schema.org", - Network accessline 78
"template": { "@context": "https://schema.org", "@type": "VideoObject", - Network accessline 79
"@context": "https://schema.org", - Network accessline 95
"description": "Open source and code repository pages. Describes programming language, platform, and repository location.", "template": { "@context": "https://schema.org", - Network accessline 96
"template": { "@context": "https://schema.org", "@type": "SoftwareSourceCode", - Network accessline 97
"@context": "https://schema.org", - Network accessline 99
"name": "[Repository Name]", "description": "[Repository Description]", "codeRepository": "[Repository URL, e.g. https://github.com/org/repo]", - Network accessline 100
"description": "[Repository Description]", "codeRepository": "[Repository URL, e.g. https://github.com/org/repo]", "programmingLanguage": "[Language, e.g. Python]", - Network accessline 101
"codeRepository": "[Repository URL, e.g. https://github.com/org/repo]", - Network accessline 106
"name": "[Author Name]" }, "license": "[License URL, e.g. https://opensource.org/licenses/MIT]", - Network accessline 107
}, "license": "[License URL, e.g. https://opensource.org/licenses/MIT]", "dateCreated": "[YYYY-MM-DD]", - Network accessline 108
"license": "[License URL, e.g. https://opensource.org/licenses/MIT]", - Network accessline 115
"description": "E-commerce product variants grouped by attributes like size, color. Enables variant-aware rich results with variesBy and hasVariant properties.", "template": { "@context": "https://schema.org", - Network accessline 116
"template": { "@context": "https://schema.org", "@type": "ProductGroup", - Network accessline 117
"@context": "https://schema.org", - Network accessline 120
"description": "[Product group description]", "productGroupID": "[product-group-id]", "variesBy": ["https://schema.org/size", "https://schema.org/color"], - Network accessline 121
"productGroupID": "[product-group-id]", "variesBy": ["https://schema.org/size", "https://schema.org/color"], "hasVariant": [ - Network accessline 122
"variesBy": ["https://schema.org/size", "https://schema.org/color"], - Network accessline 132
"price": "[29.99]", "priceCurrency": "USD", "availability": "https://schema.org/InStock" - Network accessline 133
"priceCurrency": "USD", "availability": "https://schema.org/InStock" } - Network accessline 134
"availability": "https://schema.org/InStock" - Network accessline 142
"description": "Author, creator, or team member profile pages. Enhances E-E-A-T signals with mainEntity Person markup and sameAs links.", "template": { "@context": "https://schema.org", - Network accessline 143
"template": { "@context": "https://schema.org", "@type": "ProfilePage", - Network accessline 144
"@context": "https://schema.org", - Network accessline 160
"description": "Product certifications (Energy Star, safety, organic, etc.). Replaced EnergyConsumptionDetails in April 2025.", "template": { "@context": "https://schema.org", - Network accessline 161
"template": { "@context": "https://schema.org", "@type": "Product", - Network accessline 162
"@context": "https://schema.org", - Network accessline 177
"description": "Shipping and delivery information for e-commerce products. Includes shipping rate, handling time, and transit time.", "template": { "@context": "https://schema.org", - Network accessline 178
"template": { "@context": "https://schema.org", "@type": "Product", - Network accessline 179
"@context": "https://schema.org", - Network accessline 214
"description": "Blog articles with author attribution, dates, and images. Core type for content-heavy sites and E-E-A-T signals.", "template": { "@context": "https://schema.org", - Network accessline 215
"template": { "@context": "https://schema.org", "@type": "BlogPosting", - Network accessline 216
"@context": "https://schema.org", - Network accessline 246
"description": "News and general articles. Use instead of BlogPosting for news sites, magazines, and journalistic content.", "template": { "@context": "https://schema.org", - Network accessline 247
"template": { "@context": "https://schema.org", "@type": "Article", - Network accessline 248
"@context": "https://schema.org", - Network accessline 274
"description": "Company or brand identity with logo, contact, and social profiles. Essential for knowledge panel and brand SERP.", "template": { "@context": "https://schema.org", - Network accessline 275
"template": { "@context": "https://schema.org", "@type": "Organization", - Network accessline 276
"@context": "https://schema.org", - Network accessline 299
"description": "Physical business with address, hours, and geo coordinates. Critical for local SEO and Google Business Profile.", "template": { "@context": "https://schema.org", - Network accessline 300
"template": { "@context": "https://schema.org", "@type": "LocalBusiness", - Network accessline 301
"@context": "https://schema.org", - Network accessline 335
"description": "Navigation breadcrumbs showing page hierarchy. Enhances SERP display with breadcrumb trail instead of raw URL.", "template": { "@context": "https://schema.org", - Network accessline 336
"template": { "@context": "https://schema.org", "@type": "BreadcrumbList", - Network accessline 337
"@context": "https://schema.org", - Network accessline 363
"description": "Site-level markup with SearchAction for sitelinks search box in Google. Place on homepage only.", "template": { "@context": "https://schema.org", - Network accessline 364
"template": { "@context": "https://schema.org", "@type": "WebSite", - Network accessline 365
"@context": "https://schema.org",
resources/skills/seo-aeo.md
- Network accessline 97
"name": "Example Corp", "sameAs": [ "https://en.wikipedia.org/wiki/Example_Corp", - Network accessline 98
"sameAs": [ "https://en.wikipedia.org/wiki/Example_Corp", "https://www.linkedin.com/company/example-corp", - Network accessline 99
"https://en.wikipedia.org/wiki/Example_Corp", - Network accessline 100
"https://www.linkedin.com/company/example-corp", - Network accessline 101
"https://twitter.com/examplecorp" - Network accessline 124
{ "@context": "https://schema.org", - Network accessline 125
"@context": "https://schema.org", - Network accessline 126
"@type": "WebSite", "url": "https://example.com/", "potentialAction": { - Network accessline 127
"url": "https://example.com/", - Network accessline 130
"target": { "@type": "EntryPoint", "urlTemplate": "https://example.com/search?q={search_term_string}" - Network accessline 131
"@type": "EntryPoint", "urlTemplate": "https://example.com/search?q={search_term_string}" }, - Network accessline 132
"urlTemplate": "https://example.com/search?q={search_term_string}"
resources/skills/seo-competitor-pages.md
- Network accessline 61
{ "@context": "https://schema.org", - Network accessline 62
"@context": "https://schema.org", - Network accessline 82
{ "@context": "https://schema.org", - Network accessline 83
"@context": "https://schema.org", - Network accessline 98
{ "@context": "https://schema.org", - Network accessline 99
"@context": "https://schema.org", - Network accessline 100
"@type": "ItemList", "name": "Best [Category] Tools [Year]", "itemListOrder": "https://schema.org/ItemListOrderDescending", - Network accessline 101
"name": "Best [Category] Tools [Year]", "itemListOrder": "https://schema.org/ItemListOrderDescending", "numberOfItems": "[Count]", - Network accessline 102
"itemListOrder": "https://schema.org/ItemListOrderDescending",
resources/skills/seo-github.md
resources/skills/seo-hreflang.md
- Network accessline 88
<link rel="alternate" hreflang="en-US" href="https://example.com/page" /> - Network accessline 89
<link rel="alternate" hreflang="en-GB" href="https://example.co.uk/page" /> - Network accessline 90
<link rel="alternate" hreflang="fr" href="https://example.com/fr/page" /> - Network accessline 91
<link rel="alternate" hreflang="x-default" href="https://example.com/page" /> - Network accessline 100
Link: <https://example.com/page>; rel="alternate"; hreflang="en-US", - Network accessline 101
<https://example.com/fr/page>; rel="alternate"; hreflang="fr", - Network accessline 102
<https://example.com/page>; rel="alternate"; hreflang="x-default" - Network accessline 134
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" - Network accessline 135
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" - Network accessline 136
xmlns:xhtml="http://www.w3.org/1999/xhtml"> - Network accessline 137
<url> <loc>https://example.com/page</loc> <xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" /> - Network accessline 138
<loc>https://example.com/page</loc> - Network accessline 139
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" /> - Network accessline 140
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" /> - Network accessline 141
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" /> - Network accessline 142
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" /> - Network accessline 143
</url> <url> <loc>https://example.com/fr/page</loc> - Network accessline 144
<url> <loc>https://example.com/fr/page</loc> <xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" /> - Network accessline 145
<loc>https://example.com/fr/page</loc> - Network accessline 146
<xhtml:link rel="alternate" hreflang="en-US" href="https://example.com/page" /> - Network accessline 147
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/page" /> - Network accessline 148
<xhtml:link rel="alternate" hreflang="de" href="https://example.de/page" /> - Network accessline 149
<xhtml:link rel="alternate" hreflang="x-default" href="https://example.com/page" /> - Network accessline 170
| Language | URL | Self-Ref | Return Tags | x-default | Status | |----------|-----|----------|-------------|-----------|--------| | en-US | https://... | ✅ | ✅ | ✅ | ✅ | - Network accessline 171
|----------|-----|----------|-------------|-----------|--------| | en-US | https://... | ✅ | ✅ | ✅ | ✅ | | fr | https://... | ❌ | ⚠<U+FE0F> | ✅ | ❌ | - Network accessline 172
| en-US | https://... | ✅ | ✅ | ✅ | ✅ | - Network accessline 173
| fr | https://... | ❌ | ⚠<U+FE0F> | ✅ | ❌ | - Network accessline 174
| de | https://... | ✅ | ❌ | ✅ | ❌ |
resources/skills/seo-links.md
- Network accessline 95
https://index.commoncrawl.org/CC-MAIN-latest/cdx?url=example.com/*
resources/skills/seo-schema.md
- Network accessline 71
{ "@context": "https://schema.org", - Network accessline 72
"@context": "https://schema.org", - Network accessline 92
{ "@context": "https://schema.org", - Network accessline 93
"@context": "https://schema.org", - Network accessline 116
{ "@context": "https://schema.org", - Network accessline 117
"@context": "https://schema.org",
resources/skills/seo-sitemap.md
- Network accessline 70
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 71
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 72
<url> <loc>https://example.com/page</loc> <lastmod>2026-02-07</lastmod> - Network accessline 73
<loc>https://example.com/page</loc> - Network accessline 81
<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 82
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> - Network accessline 83
<sitemap> <loc>https://example.com/sitemap-pages.xml</loc> <lastmod>2026-02-07</lastmod> - Network accessline 84
<loc>https://example.com/sitemap-pages.xml</loc> - Network accessline 86
</sitemap> <sitemap> <loc>https://example.com/sitemap-posts.xml</loc> - Network accessline 87
<sitemap> <loc>https://example.com/sitemap-posts.xml</loc> <lastmod>2026-02-07</lastmod> - Network accessline 88
<loc>https://example.com/sitemap-posts.xml</loc>
resources/skills/seo-technical.md
resources/templates/agency.md
- Network accessline 59
{ "@context": "https://schema.org", - Network accessline 60
"@context": "https://schema.org", - Network accessline 62
"name": "Agency Name", "description": "What the agency does", "url": "https://example.com", - Network accessline 63
"description": "What the agency does", "url": "https://example.com", "logo": "https://example.com/logo.png", - Network accessline 64
"url": "https://example.com", - Network accessline 65
"logo": "https://example.com/logo.png",
resources/templates/blog-post.md
- Network accessline 52
{ "@context": "https://schema.org", - Network accessline 53
"@context": "https://schema.org", - Network accessline 55
"mainEntityOfPage": { "@type": "WebPage", "@id": "https://example.com/blog/your-post-url" - Network accessline 56
"@type": "WebPage", "@id": "https://example.com/blog/your-post-url" }, - Network accessline 57
"@id": "https://example.com/blog/your-post-url" - Network accessline 59
"headline": "Your Post Headline", "description": "Your meta description here.", "image": "https://example.com/featured-image.jpg", - Network accessline 60
"description": "Your meta description here.", "image": "https://example.com/featured-image.jpg", "author": { - Network accessline 61
"image": "https://example.com/featured-image.jpg", - Network accessline 63
"@type": "Person", "name": "Author Name", "url": "https://example.com/author-bio" - Network accessline 64
"name": "Author Name", "url": "https://example.com/author-bio" }, - Network accessline 65
"url": "https://example.com/author-bio" - Network accessline 70
"logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" - Network accessline 71
"@type": "ImageObject", "url": "https://example.com/logo.png" } - Network accessline 72
"url": "https://example.com/logo.png"
resources/templates/ecommerce.md
- Network accessline 67
{ "@context": "https://schema.org", - Network accessline 68
"@context": "https://schema.org", - Network accessline 69
"@type": "Product", "name": "Product Name", "image": ["https://example.com/product.jpg"], - Network accessline 70
"name": "Product Name", "image": ["https://example.com/product.jpg"], "description": "Product description", - Network accessline 71
"image": ["https://example.com/product.jpg"], - Network accessline 80
"price": "99.99", "priceCurrency": "USD", "availability": "https://schema.org/InStock", - Network accessline 81
"priceCurrency": "USD", "availability": "https://schema.org/InStock", "url": "https://example.com/product" - Network accessline 82
"availability": "https://schema.org/InStock", - Network accessline 83
"url": "https://example.com/product"
resources/templates/local-service.md
resources/templates/news-article.md
- Network accessline 41
{ "@context": "https://schema.org", - Network accessline 42
"@context": "https://schema.org", - Network accessline 44
"headline": "Breaking News Headline", "image": [ "https://example.com/photos/1x1/photo.jpg", - Network accessline 45
"image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", - Network accessline 46
"https://example.com/photos/1x1/photo.jpg", - Network accessline 47
"https://example.com/photos/4x3/photo.jpg", - Network accessline 48
"https://example.com/photos/16x9/photo.jpg" - Network accessline 53
"@type": "Person", "name": "Jane Journalist", "url": "https://example.com/profile/jane-journalist" - Network accessline 54
"name": "Jane Journalist", "url": "https://example.com/profile/jane-journalist" }] - Network accessline 55
"url": "https://example.com/profile/jane-journalist"
resources/templates/publisher.md
- Network accessline 52
{ "@context": "https://schema.org", - Network accessline 53
"@context": "https://schema.org", - Network accessline 59
"@type": "Person", "name": "Author Name", "url": "https://example.com/authors/author-name" - Network accessline 60
"name": "Author Name", "url": "https://example.com/authors/author-name" }, - Network accessline 61
"url": "https://example.com/authors/author-name" - Network accessline 66
"logo": { "@type": "ImageObject", "url": "https://example.com/logo.png" - Network accessline 67
"@type": "ImageObject", "url": "https://example.com/logo.png" } - Network accessline 68
"url": "https://example.com/logo.png" - Network accessline 69
} }, "image": ["https://example.com/article-image.jpg"], - Network accessline 70
}, "image": ["https://example.com/article-image.jpg"], "mainEntityOfPage": { - Network accessline 71
"image": ["https://example.com/article-image.jpg"], - Network accessline 72
"mainEntityOfPage": { "@type": "WebPage", "@id": "https://example.com/article-url" - Network accessline 73
"@type": "WebPage", "@id": "https://example.com/article-url" } - Network accessline 74
"@id": "https://example.com/article-url"
resources/templates/technical-article.md
scripts/__init__.py
- Executable scriptline 1
Executable file
scripts/a11y_seo_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/ai_crawler_policy_matrix.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/analyze_visual.py
scripts/anchor_text_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/answer_block_scanner.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/article_seo.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 15
Usage: python article_seo.py https://example.com/article - Network accessline 16
python article_seo.py https://example.com/article - Network accessline 17
python article_seo.py https://example.com/article --keyword "red team ops" - Network accessline 18
python article_seo.py https://example.com/article --json - Network accessline 106
if soup.find("link", attrs={"rel": "https://api.w.org/"}): - Network accessline 414
try: url = ( "https://suggestqueries.google.com/complete/search" - Network accessline 415
url = ( "https://suggestqueries.google.com/complete/search" f"?client=chrome&q={urllib.parse.quote(query)}" - Network accessline 416
"https://suggestqueries.google.com/complete/search" f"?client=chrome&q={urllib.parse.quote(query)}" )
scripts/audit_runner.py
scripts/broken_links.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python broken_links.py https://example.com - Network accessline 9
python broken_links.py https://example.com - Network accessline 10
python broken_links.py https://example.com --json - Network accessline 11
python broken_links.py https://example.com --internal-only
scripts/cache_compression_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/canonical_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/capture_screenshot.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
Usage: python capture_screenshot.py https://example.com - Network accessline 6
python capture_screenshot.py https://example.com - Network accessline 7
python capture_screenshot.py https://example.com --mobile - Network accessline 8
python capture_screenshot.py https://example.com --output screenshots/
scripts/citation_readiness.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/collection_page_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/competitor_gap.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 10
Usage: python competitor_gap.py https://yoursite.com --competitor https://competitor.com --json - Network accessline 11
python competitor_gap.py https://yoursite.com --competitor https://competitor.com --json - Network accessline 12
python competitor_gap.py https://yoursite.com --competitor https://c1.com --competitor https://c2.com
scripts/content_decay_detector.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/content_intent_matcher.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/crawl_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/critical_request_chain.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 88
if node["cross_origin"]: host = urlparse(node["url"]).netloc has_preconnect = host in preconnects or f"https://{host}" in preconnects - Network accessline 89
host = urlparse(node["url"]).netloc has_preconnect = host in preconnects or f"https://{host}" in preconnects node["preconnected"] = has_preconnect - Network accessline 90
has_preconnect = host in preconnects or f"https://{host}" in preconnects
scripts/duplicate_content.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python duplicate_content.py https://example.com --depth 2 --json - Network accessline 9
python duplicate_content.py https://example.com --depth 2 --json - Network accessline 10
python duplicate_content.py https://example.com --threshold 0.85
scripts/eeat_signal_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/entity_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 9
Usage: python entity_checker.py https://example.com --json - Network accessline 10
python entity_checker.py https://example.com --json - Network accessline 11
python entity_checker.py https://example.com --entity "Example Corp" - Network accessline 12
python entity_checker.py https://example.com --kg-api-key YOUR_KEY - Network accessline 187
try: query = urllib.parse.quote(entity_name) url = f"https://www.wikidata.org/w/api.php?action=wbsearchentities&search={query}&language=en&format=json&limit=3" - Network accessline 188
query = urllib.parse.quote(entity_name) url = f"https://www.wikidata.org/w/api.php?action=wbsearchentities&search={query}&language=en&format=json&limit=3" data = safe_get(url, timeout=8).json() - Network accessline 189
url = f"https://www.wikidata.org/w/api.php?action=wbsearchentities&search={query}&language=en&format=json&limit=3" - Network accessline 198
"label": best.get("label"), "description": best.get("description", ""), "url": f"https://www.wikidata.org/wiki/{best.get('id')}", - Network accessline 199
"description": best.get("description", ""), "url": f"https://www.wikidata.org/wiki/{best.get('id')}", "confidence": "High" if best.get("label", "").lower() == entity_name.lower() else "Medium", - Network accessline 200
"url": f"https://www.wikidata.org/wiki/{best.get('id')}", - Network accessline 218
try: query = urllib.parse.quote(entity_name.replace(" ", "_")) url = f"https://en.wikipedia.org/w/api.php?action=query&titles={query}&format=json&redirects=1" - Network accessline 219
query = urllib.parse.quote(entity_name.replace(" ", "_")) url = f"https://en.wikipedia.org/w/api.php?action=query&titles={query}&format=json&redirects=1" data = safe_get(url, timeout=8).json() - Network accessline 220
url = f"https://en.wikipedia.org/w/api.php?action=query&titles={query}&format=json&redirects=1" - Network accessline 227
"found": True, "title": page_data.get("title"), "url": f"https://en.wikipedia.org/wiki/{urllib.parse.quote(page_data.get('title', '').replace(' ', '_'))}", - Network accessline 228
"title": page_data.get("title"), "url": f"https://en.wikipedia.org/wiki/{urllib.parse.quote(page_data.get('title', '').replace(' ', '_'))}", } - Network accessline 229
"url": f"https://en.wikipedia.org/wiki/{urllib.parse.quote(page_data.get('title', '').replace(' ', '_'))}", - Access to secretsline 237
[Credential-related source omitted] - Access to secretsline 239
[Credential-related source omitted] - Network accessline 244
try: response = safe_get( "https://kgsearch.googleapis.com/v1/entities:search", - Network accessline 245
response = safe_get( "https://kgsearch.googleapis.com/v1/entities:search", params={ - Network accessline 246
"https://kgsearch.googleapis.com/v1/entities:search", - Access to secretsline 249
[Credential-related source omitted] - Access to secretsline 320
[Credential-related source omitted] - Access to secretsline 359
[Credential-related source omitted] - Access to secretsline 457
[Credential-related source omitted] - Access to secretsline 462
[Credential-related source omitted] - Access to secretsline 463
[Credential-related source omitted]
scripts/env_loader.py
- Executable scriptline 1
Executable file - Access to secretsline 2
[Credential-related source omitted] - Access to secretsline 4
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 34
[Credential-related source omitted] - Access to secretsline 40
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 79
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Access to secretsline 92
[Credential-related source omitted] - Access to secretsline 99
[Credential-related source omitted] - Access to secretsline 126
[Credential-related source omitted]
scripts/external_link_quality.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/faceted_nav_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/fetch_page.py
scripts/finding_verifier.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/font_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/freshness_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/generate_report.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python generate_report.py https://example.com - Network accessline 9
python generate_report.py https://example.com - Network accessline 10
python generate_report.py https://example.com --output my-report.html - Access to secretsline 331
[Credential-related source omitted] - Network accessline 1292
}} </style> <link rel="preconnect" href="https://fonts.googleapis.com"> - Network accessline 1293
</style> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - Network accessline 1294
<link rel="preconnect" href="https://fonts.googleapis.com"> - Network accessline 1295
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> - Network accessline 1296
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet"> - Access to secretsline 1516
[Credential-related source omitted]
scripts/github_api.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 19
API_BASE = "https://api.github.com" - Access to secretsline 33
[Credential-related source omitted] - Access to secretsline 41
[Credential-related source omitted] - Access to secretsline 42
[Credential-related source omitted] - Network accessline 128
if text.startswith("git@github.com:"): text = text.split(":", 1)[1] elif text.startswith(("https://github.com/", "http://github.com/")): - Network accessline 129
text = text.split(":", 1)[1] elif text.startswith(("https://github.com/", "http://github.com/")): parsed = urllib.parse.urlparse(text) - Network accessline 130
elif text.startswith(("https://github.com/", "http://github.com/")): parsed = urllib.parse.urlparse(text) text = parsed.path.strip("/")
scripts/github_community_health.py
scripts/github_competitor_research.py
- Executable scriptline 1
#!/usr/bin/env python3 - Possible obfuscationline 165
raw = base64.b64decode(content.encode("utf-8"), validate=False) - Dangerous shell operationline 211
rm = item.get("readme_metrics", {}) - Network accessline 325
"best_rank": None, "query_ranks": {}, "sample_item": {"description": "", "topics": [], "stargazers_count": 0, "html_url": f"https://github.com/{slug}"}, - Network accessline 326
"query_ranks": {}, "sample_item": {"description": "", "topics": [], "stargazers_count": 0, "html_url": f"https://github.com/{slug}"}, } - Network accessline 327
"sample_item": {"description": "", "topics": [], "stargazers_count": 0, "html_url": f"https://github.com/{slug}"}, - Dangerous shell operationline 363
[Credential-related source omitted] - Network accessline 389
"stargazers_count": int(target_repo_data.get("stargazers_count", 0)), "forks_count": int(target_repo_data.get("forks_count", 0)), "html_url": target_repo_data.get("html_url") or f"https://github.com/{repo}", - Network accessline 390
"forks_count": int(target_repo_data.get("forks_count", 0)), "html_url": target_repo_data.get("html_url") or f"https://github.com/{repo}", } - Network accessline 391
"html_url": target_repo_data.get("html_url") or f"https://github.com/{repo}", - Access to secretsline 423
[Credential-related source omitted]
scripts/github_readme_lint.py
scripts/github_repo_audit.py
scripts/github_search_benchmark.py
scripts/github_seo_report.py
scripts/github_traffic_archiver.py
scripts/github_weekly_scorecard.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/gsc_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 13
Usage: python gsc_checker.py https://example.com --credentials creds.json --json - Network accessline 14
python gsc_checker.py https://example.com --credentials creds.json --json - Network accessline 15
python gsc_checker.py https://example.com --credentials creds.json --days 28 - Network accessline 16
python gsc_checker.py https://example.com --credentials creds.json --query "red team" - Network accessline 33
SCOPES = ["https://www.googleapis.com/auth/webmasters.readonly"] - Network accessline 248
description="Google Search Console Data Checker — pulls GSC data for LLM analysis" ) parser.add_argument("site_url", help="GSC property URL (e.g., https://example.com)") - Network accessline 249
) parser.add_argument("site_url", help="GSC property URL (e.g., https://example.com)") parser.add_argument("--credentials", default="", help="Path to service account JSON credentials file. Falls back to GSC_CREDENTIALS_PATH env var - Network accessline 250
parser.add_argument("site_url", help="GSC property URL (e.g., https://example.com)") - Access to secretsline 251
[Credential-related source omitted] - Access to secretsline 261
[Credential-related source omitted]
scripts/hreflang_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 17
Usage: python hreflang_checker.py https://example.com/page - Network accessline 18
python hreflang_checker.py https://example.com/page - Network accessline 19
python hreflang_checker.py https://example.com/page --json - Network accessline 20
python hreflang_checker.py https://example.com/page --verify-returns
scripts/hreflang_sitemap_validator.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 40
continue attrs = child.attrib rel = attrs.get("rel") or attrs.get("{http://www.w3.org/1999/xhtml}rel") - Network accessline 41
attrs = child.attrib rel = attrs.get("rel") or attrs.get("{http://www.w3.org/1999/xhtml}rel") hreflang = attrs.get("hreflang") or attrs.get("{http://www.w3.org/1999/xhtml}hreflang") - Network accessline 42
rel = attrs.get("rel") or attrs.get("{http://www.w3.org/1999/xhtml}rel") - Network accessline 43
hreflang = attrs.get("hreflang") or attrs.get("{http://www.w3.org/1999/xhtml}hreflang") - Network accessline 44
href = attrs.get("href") or attrs.get("{http://www.w3.org/1999/xhtml}href")
scripts/image_inventory.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/image_weight_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/indexability_matrix.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/indexnow_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 16
Usage: python indexnow_checker.py https://example.com --key YOUR_KEY --json - Network accessline 17
python indexnow_checker.py https://example.com --key YOUR_KEY --json - Network accessline 18
python indexnow_checker.py https://example.com --key YOUR_KEY --ping https://example.com/updated-page - Network accessline 19
python indexnow_checker.py https://example.com --key YOUR_KEY --ping-sitemap - Network accessline 39
INDEXNOW_ENDPOINTS = { "bing": "https://www.bing.com/indexnow", - Network accessline 40
"bing": "https://www.bing.com/indexnow", - Network accessline 41
"yandex": "https://yandex.com/indexnow", - Network accessline 42
"seznam": "https://search.seznam.cz/indexnow", - Network accessline 43
"naver": "https://searchadvisor.naver.com/indexnow",
scripts/internal_links.py
scripts/javascript_render_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/lcp_subparts.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/lib/__init__.py
- Executable scriptline 1
Executable file
scripts/lib/safe_http.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 16
AGENTIC_SEO_USER_AGENT = ( "Mozilla/5.0 (compatible; AgenticSEOSkill/1.0; " "+https://github.com/Bhanunamikaze/Agentic-SEO-Skill)" - Network accessline 17
"Mozilla/5.0 (compatible; AgenticSEOSkill/1.0; " "+https://github.com/Bhanunamikaze/Agentic-SEO-Skill)" ) - Network accessline 18
"+https://github.com/Bhanunamikaze/Agentic-SEO-Skill)" - Network accessline 144
current = assert_safe_url(url) request_headers = default_headers(headers) requester = session or requests.Session() - Network accessline 145
request_headers = default_headers(headers) requester = session or requests.Session() history = [] - Network accessline 146
requester = session or requests.Session()
scripts/lighthouse_runner.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/link_profile.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 12
Usage: python link_profile.py https://example.com --json - Network accessline 13
python link_profile.py https://example.com --json - Network accessline 14
python link_profile.py https://example.com --max-pages 100 --json - Network accessline 15
python link_profile.py https://example.com --gsc-credentials creds.json - Network accessline 270
scopes = ["https://www.googleapis.com/auth/webmasters.readonly"] - Access to secretsline 300
[Credential-related source omitted]
scripts/llms_txt_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
llms.txt is a proposed standard for providing LLM-friendly site information. See: https://llmstxt.org/ - Network accessline 6
See: https://llmstxt.org/ - Network accessline 8
Usage: python llms_txt_checker.py https://example.com - Network accessline 9
python llms_txt_checker.py https://example.com - Network accessline 10
python llms_txt_checker.py https://example.com --json - Network accessline 43
parsed = urlparse(url) if not parsed.scheme: url = f"https://{url}" - Network accessline 44
if not parsed.scheme: url = f"https://{url}" parsed = urlparse(url) - Network accessline 45
url = f"https://{url}"
scripts/llms_txt_generator.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/local_seo_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/log_file_analyzer.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/mobile_render_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/orphan_pages_from_sitemap.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/pagespeed.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 10
[Credential-related source omitted] - Access to secretsline 11
[Credential-related source omitted] - Network accessline 15
Usage: python pagespeed.py https://example.com - Network accessline 16
python pagespeed.py https://example.com - Network accessline 17
python pagespeed.py https://example.com --strategy mobile - Network accessline 18
python pagespeed.py https://example.com --json - Network accessline 19
[Credential-related source omitted] - Access to secretsline 19
[Credential-related source omitted] - Network accessline 42
PSI_API = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed" - Access to secretsline 184
[Credential-related source omitted] - Access to secretsline 191
[Credential-related source omitted] - Access to secretsline 207
[Credential-related source omitted] - Access to secretsline 208
[Credential-related source omitted] - Access to secretsline 249
[Credential-related source omitted] - Access to secretsline 251
[Credential-related source omitted] - Access to secretsline 335
[Credential-related source omitted] - Access to secretsline 338
[Credential-related source omitted] - Access to secretsline 350
[Credential-related source omitted]
scripts/parse_html.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
Usage: python parse_html.py page.html python parse_html.py page.html --url https://example.com - Network accessline 6
python parse_html.py page.html python parse_html.py page.html --url https://example.com python parse_html.py --fetch https://example.com --json - Network accessline 7
python parse_html.py page.html --url https://example.com - Network accessline 8
python parse_html.py --fetch https://example.com --json
scripts/pre_commit_seo_check.sh
- Executable scriptline 1
#!/usr/bin/env bash
scripts/product_schema_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 14
VALID_AVAILABILITY = { "https://schema.org/InStock", - Network accessline 15
"https://schema.org/InStock", - Network accessline 16
"https://schema.org/OutOfStock", - Network accessline 17
"https://schema.org/PreOrder", - Network accessline 18
"https://schema.org/BackOrder", - Network accessline 19
"https://schema.org/LimitedAvailability",
scripts/readability.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python readability.py page.html --json python readability.py --url https://example.com --json - Network accessline 9
python readability.py page.html --json python readability.py --url https://example.com --json python readability.py --text "Your text here" - Network accessline 10
python readability.py --url https://example.com --json
scripts/redirect_backlink_reclaim.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/redirect_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python redirect_checker.py https://example.com - Network accessline 9
python redirect_checker.py https://example.com - Network accessline 10
python redirect_checker.py https://example.com http://example.com --json - Network accessline 45
parsed = urlparse(url) if not parsed.scheme: url = f"https://{url}" - Network accessline 47
url = f"https://{url}"
scripts/reference_freshness.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/repo_docs_site_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 70
if resolved_repo: owner, name = resolved_repo.split("/", 1) candidate_urls.extend([f"https://{owner}.github.io/{name}/", f"https://github.com/{resolved_repo}#readme"]) - Network accessline 71
owner, name = resolved_repo.split("/", 1) candidate_urls.extend([f"https://{owner}.github.io/{name}/", f"https://github.com/{resolved_repo}#readme"]) for url in _readme_urls(path): - Network accessline 72
candidate_urls.extend([f"https://{owner}.github.io/{name}/", f"https://github.com/{resolved_repo}#readme"])
scripts/repo_file_inventory.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/repo_release_seo.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/repo_social_preview_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/repo_topic_suggester.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/review_schema_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/rich_results_guard.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/robots_checker.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 5
Usage: python robots_checker.py https://example.com - Network accessline 6
python robots_checker.py https://example.com - Network accessline 7
python robots_checker.py https://example.com --json - Network accessline 54
parsed = urlparse(url) if not parsed.scheme: url = f"https://{url}" - Network accessline 55
if not parsed.scheme: url = f"https://{url}" parsed = urlparse(url) - Network accessline 56
url = f"https://{url}"
scripts/robots_path_tester.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/schema_diff.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/schema_required_props.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/schema_template_generator.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 21
"description": "Standard ecommerce product page with Offer, product identifiers, images, and rating/review hooks.", "template": { "@context": "https://schema.org", - Network accessline 22
"template": { "@context": "https://schema.org", "@type": "Product", - Network accessline 23
"@context": "https://schema.org", - Network accessline 33
"price": "[Price]", "priceCurrency": "USD", "availability": "https://schema.org/InStock", - Network accessline 34
"priceCurrency": "USD", "availability": "https://schema.org/InStock", }, - Network accessline 35
"availability": "https://schema.org/InStock", - Network accessline 41
"description": "Review markup for first-party or editorial reviews with rating and reviewed entity.", "template": { "@context": "https://schema.org", - Network accessline 42
"template": { "@context": "https://schema.org", "@type": "Review", - Network accessline 43
"@context": "https://schema.org",
scripts/security_headers.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 8
Usage: python security_headers.py https://example.com - Network accessline 9
python security_headers.py https://example.com - Network accessline 10
python security_headers.py https://example.com --json - Network accessline 81
parsed = urlparse(url) if not parsed.scheme: url = f"https://{url}" - Network accessline 82
if not parsed.scheme: url = f"https://{url}" parsed = urlparse(url) - Network accessline 83
url = f"https://{url}"
scripts/seo_common.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/sitemap_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/sitemap_generator.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 34
def build_urlset(rows: list[dict], default_lastmod: str | None = None) -> str: ET.register_namespace("", "http://www.sitemaps.org/schemas/sitemap/0.9") - Network accessline 35
ET.register_namespace("", "http://www.sitemaps.org/schemas/sitemap/0.9") - Network accessline 36
root = ET.Element("{http://www.sitemaps.org/schemas/sitemap/0.9}urlset") - Network accessline 50
def build_index(sitemap_urls: list[str], default_lastmod: str | None = None) -> str: ET.register_namespace("", "http://www.sitemaps.org/schemas/sitemap/0.9") - Network accessline 51
ET.register_namespace("", "http://www.sitemaps.org/schemas/sitemap/0.9") - Network accessline 52
root = ET.Element("{http://www.sitemaps.org/schemas/sitemap/0.9}sitemapindex")
scripts/social_meta.py
scripts/third_party_script_audit.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/topical_cluster_mapper.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/url_quality.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/validate_schema.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 50
if "@context" not in obj: errors.append(f"{prefix}: Missing @context") elif obj["@context"] not in ("https://schema.org", "http://schema.org"): - Network accessline 51
errors.append(f"{prefix}: Missing @context") elif obj["@context"] not in ("https://schema.org", "http://schema.org"): errors.append(f"{prefix}: @context should be 'https://schema.org'") - Network accessline 52
elif obj["@context"] not in ("https://schema.org", "http://schema.org"): - Network accessline 53
errors.append(f"{prefix}: @context should be 'https://schema.org'")
scripts/validate_skill_inventory.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/video_schema_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/visual_regression_snapshot.py
- Executable scriptline 1
#!/usr/bin/env python3
scripts/x_robots_header_checker.py
- Executable scriptline 1
#!/usr/bin/env python3
tests/fixtures/report_data.json
- Network accessline 1
{ "url": "https://example.com/", - Network accessline 2
"url": "https://example.com/", - Network accessline 34
}, "social": {"score": 80}, "robots": {"status": 200, "sitemaps": ["https://example.com/sitemap.xml"], "ai_crawler_status": {}}, - Network accessline 35
"social": {"score": 80}, "robots": {"status": 200, "sitemaps": ["https://example.com/sitemap.xml"], "ai_crawler_status": {}}, "broken_links": {"summary": {"total": 10, "broken": 1}}, - Network accessline 36
"robots": {"status": 200, "sitemaps": ["https://example.com/sitemap.xml"], "ai_crawler_status": {}}, - Network accessline 49
] }, "onpage": {"title": "Example page", "meta_description": "", "h1": ["Example"], "canonical": "https://example.com/"}, - Network accessline 50
}, "onpage": {"title": "Example page", "meta_description": "", "h1": ["Example"], "canonical": "https://example.com/"}, "readability": {"flesch_reading_ease": 62}, - Network accessline 51
"onpage": {"title": "Example page", "meta_description": "", "h1": ["Example"], "canonical": "https://example.com/"},
tests/test_content_ai_scripts.py
- Executable scriptline 1
Executable file - Network accessline 17
<meta property="article:published_time" content="2024-01-10"> <meta property="article:modified_time" content="2026-05-01"> <link rel="canonical" href="https://example.com/technical-seo-audit"> - Network accessline 18
<meta property="article:modified_time" content="2026-05-01"> <link rel="canonical" href="https://example.com/technical-seo-audit"> <script type="application/ld+json"> - Network accessline 19
<link rel="canonical" href="https://example.com/technical-seo-audit"> - Network accessline 20
<script type="application/ld+json"> {"@context":"https://schema.org","@type":"Article","author":{"@type":"Person","name":"Ada Analyst","sameAs":["https://www.wikidata.org/wiki/Q42"]},"datePublished":"2024-01-10","dateModified":"2026-05-01 - Network accessline 21
{"@context":"https://schema.org","@type":"Article","author":{"@type":"Person","name":"Ada Analyst","sameAs":["https://www.wikidata.org/wiki/Q42"]},"datePublished":"2024-01-10","dateModified":"2026-05-01"} - Network accessline 36
<p>According to research in 2024, 64% of large sites had indexability issues.</p> <p>We tested the checklist on 25 customer sites in 2026.</p> <a href="https://www.gov.uk/service-manual">Government service manual</a> - Network accessline 37
<p>We tested the checklist on 25 customer sites in 2026.</p> <a href="https://www.gov.uk/service-manual">Government service manual</a> </main> - Network accessline 38
<a href="https://www.gov.uk/service-manual">Government service manual</a> - Network accessline 84
cluster_csv.write_text( "url,title,cluster,links\n" "https://example.com/seo,Technical SEO Hub,technical seo,https://example.com/seo/crawl\n" - Network accessline 85
"url,title,cluster,links\n" "https://example.com/seo,Technical SEO Hub,technical seo,https://example.com/seo/crawl\n" "https://example.com/seo/crawl,Crawl Audit,technical seo,https://example.com/seo\n", - Network accessline 86
"https://example.com/seo,Technical SEO Hub,technical seo,https://example.com/seo/crawl\n" - Network accessline 87
"https://example.com/seo/crawl,Crawl Audit,technical seo,https://example.com/seo\n", - Network accessline 96
decay_csv.write_text( "date,url,query,clicks,impressions,position\n" "2026-04-01,https://example.com/seo,technical seo audit,100,1000,3\n" - Network accessline 97
"date,url,query,clicks,impressions,position\n" "2026-04-01,https://example.com/seo,technical seo audit,100,1000,3\n" "2026-04-02,https://example.com/seo,technical seo checklist,10,500,9\n" - Network accessline 98
"2026-04-01,https://example.com/seo,technical seo audit,100,1000,3\n" - Network accessline 99
"2026-04-02,https://example.com/seo,technical seo checklist,10,500,9\n" - Network accessline 100
"2026-05-01,https://example.com/seo,technical seo audit,40,950,5\n" - Network accessline 101
"2026-05-02,https://example.com/seo,technical seo checklist,15,600,8\n",
tests/test_core_seo_scripts.py
- Executable scriptline 1
Executable file - Network accessline 16
sitemap_generator = load_script("sitemap_generator") xml = sitemap_generator.build_urlset([ {"url": "https://example.com/", "lastmod": "2026-05-15"}, - Network accessline 17
xml = sitemap_generator.build_urlset([ {"url": "https://example.com/", "lastmod": "2026-05-15"}, {"url": "https://example.com/about"}, - Network accessline 18
{"url": "https://example.com/", "lastmod": "2026-05-15"}, - Network accessline 19
{"url": "https://example.com/about"}, - Network accessline 22
assert "<loc>https://example.com/</loc>" in xml - Network accessline 28
url_quality = load_script("url_quality") result = url_quality.analyze_urls([ "https://example.com/Products/List?utm_source=x&sort=price&color=red", - Network accessline 29
result = url_quality.analyze_urls([ "https://example.com/Products/List?utm_source=x&sort=price&color=red", ]) - Network accessline 30
"https://example.com/Products/List?utm_source=x&sort=price&color=red",
tests/test_duplicate_content.py
- Executable scriptline 1
Executable file - Network accessline 16
duplicate_content = load_script("duplicate_content") report = duplicate_content.detect_duplicates({ "https://example.com/utility": { - Network accessline 17
report = duplicate_content.detect_duplicates({ "https://example.com/utility": { "text": "Short utility page", - Network accessline 18
"https://example.com/utility": { - Network accessline 40
report = duplicate_content.detect_duplicates( { "https://example.com/a": { - Network accessline 41
{ "https://example.com/a": { "text": base, - Network accessline 42
"https://example.com/a": { - Network accessline 45
"html": f"<html><body>{base}</body></html>", }, "https://example.com/b": { - Network accessline 46
}, "https://example.com/b": { "text": variant, - Network accessline 47
"https://example.com/b": { - Network accessline 67
report = duplicate_content.detect_duplicates({ "https://example.com/indexable": { - Network accessline 68
"https://example.com/indexable": { - Network accessline 71
"html": f"<html><body>{text}</body></html>", }, "https://example.com/noindex": { - Network accessline 72
}, "https://example.com/noindex": { "text": text, - Network accessline 73
"https://example.com/noindex": {
tests/test_link_and_github_depth_scripts.py
- Executable scriptline 1
Executable file - Network accessline 18
<html><body> <a href="/features">Learn more</a> <a href="https://example.com/pricing" rel="nofollow"></a> - Network accessline 19
<a href="/features">Learn more</a> <a href="https://example.com/pricing" rel="nofollow"></a> <a href="https://external.test/">External</a> - Network accessline 20
<a href="https://example.com/pricing" rel="nofollow"></a> - Network accessline 21
<a href="https://external.test/">External</a> - Network accessline 25
links = anchor_text_audit.extract_internal_anchors(html, "https://example.com/", "https://example.com/") - Network accessline 34
row = log_file_analyzer.parse_log_line( '127.0.0.1 - - [15/May/2026:10:20:30 +0000] "GET /missing HTTP/1.1" ' '404 123 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"' - Network accessline 35
'127.0.0.1 - - [15/May/2026:10:20:30 +0000] "GET /missing HTTP/1.1" ' '404 123 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"' ) - Network accessline 36
'404 123 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"'
tests/test_pagespeed.py
- Executable scriptline 1
Executable file - Network accessline 27
result = pagespeed.parse_pagespeed_response( load_fixture("pagespeed_field_data.json"), url="https://example.com/", - Network accessline 28
load_fixture("pagespeed_field_data.json"), url="https://example.com/", strategy="mobile", - Network accessline 29
url="https://example.com/", - Network accessline 46
result = pagespeed.parse_pagespeed_response( load_fixture("pagespeed_lab_data.json"), url="https://example.com/", - Network accessline 47
load_fixture("pagespeed_lab_data.json"), url="https://example.com/", strategy="desktop", - Network accessline 48
url="https://example.com/", - Network accessline 72
result = pagespeed.get_pagespeed("https://example.com/", strategy="mobile") - Network accessline 82
result = pagespeed.get_pagespeed("https://example.com/", strategy="mobile") - Access to secretsline 89
[Credential-related source omitted] - Network accessline 94
result = pagespeed.get_pagespeed_for_strategies("https://example.com/", ["mobile", "desktop"])
tests/test_performance_scripts.py
- Executable scriptline 1
Executable file - Network accessline 26
@font-face { font-family: Demo; src: url("font.woff2") format("woff2"); } </style> <script src="https://www.googletagmanager.com/gtm.js"></script> - Network accessline 27
</style> <script src="https://www.googletagmanager.com/gtm.js"></script> </head> - Network accessline 28
<script src="https://www.googletagmanager.com/gtm.js"></script>
tests/test_readability.py
- Executable scriptline 1
Executable file
tests/test_reporting.py
- Executable scriptline 1
Executable file
tests/test_schema_local_ecommerce_scripts.py
- Executable scriptline 1
Executable file - Network accessline 16
schema_required_props = load_script("schema_required_props") doc = { "@context": "https://schema.org", - Network accessline 17
doc = { "@context": "https://schema.org", "@graph": [ - Network accessline 18
"@context": "https://schema.org", - Network accessline 19
"@graph": [ {"@type": "Organization", "name": "Example Co", "url": "https://example.com"}, {"@type": "Product", "name": "Widget"}, - Network accessline 20
{"@type": "Organization", "name": "Example Co", "url": "https://example.com"}, - Network accessline 32
product_schema_checker = load_script("product_schema_checker") doc = { "@context": "https://schema.org", - Network accessline 33
doc = { "@context": "https://schema.org", "@type": "Product", - Network accessline 34
"@context": "https://schema.org", - Network accessline 56
hreflang_sitemap_validator = load_script("hreflang_sitemap_validator") xml = """<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" - Network accessline 57
xml = """<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"> - Network accessline 58
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" - Network accessline 59
xmlns:xhtml="http://www.w3.org/1999/xhtml"> - Network accessline 60
<url> <loc>https://example.com/en/</loc> <xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/> - Network accessline 61
<loc>https://example.com/en/</loc> - Network accessline 62
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/"/> - Network accessline 63
<xhtml:link rel="alternate" hreflang="fr" href="https://example.com/fr/"/> - Network accessline 68
result = hreflang_sitemap_validator.parse_hreflang_sitemap(xml, "https://example.com/sitemap.xml")
wiki/Audit-Workflow.md
- Network accessline 8
python3 <SKILL_DIR>/scripts/fetch_page.py https://example.com --output /tmp/page.html - Network accessline 9
python3 <SKILL_DIR>/scripts/parse_html.py /tmp/page.html --url https://example.com --json - Network accessline 10
python3 <SKILL_DIR>/scripts/readability.py /tmp/page.html --json python3 <SKILL_DIR>/scripts/pagespeed.py https://example.com --strategy mobile python3 <SKILL_DIR>/scripts/security_headers.py https://example.com - Network accessline 11
python3 <SKILL_DIR>/scripts/pagespeed.py https://example.com --strategy mobile - Network accessline 12
python3 <SKILL_DIR>/scripts/security_headers.py https://example.com - Network accessline 13
python3 <SKILL_DIR>/scripts/social_meta.py https://example.com - Network accessline 24
python3 <SKILL_DIR>/scripts/audit_runner.py https://example.com --output-dir audit-output - Network accessline 32
python3 <SKILL_DIR>/scripts/generate_report.py https://example.com --output SEO-REPORT.html - Access to secretsline 51
[Credential-related source omitted]
wiki/Command-Reference.md
- Network accessline 29
perform seo analysis on https://example.com
wiki/Home.md
- Network accessline 32
curl -fsSLO https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh - Network accessline 39
$seo audit https://example.com - Network accessline 45
Run a full SEO audit for https://example.com. - Network accessline 55
python3 ~/.codex/skills/seo/scripts/generate_report.py "https://example.com" --output SEO-REPORT.html - Network accessline 60

wiki/Installation.md
- Network accessline 9
https://github.com/Bhanunamikaze/Agentic-SEO-Skill/releases/tag/v3.0.0 - Dangerous shell operationline 39
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online - Network accessline 39
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online - Dangerous shell operationline 45
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target claude - Network accessline 45
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target claude - Dangerous shell operationline 51
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target codex - Network accessline 51
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target codex - Dangerous shell operationline 57
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target global - Network accessline 57
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target global - Dangerous shell operationline 63
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target project --project-dir /path/to/your/project - Network accessline 63
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target project --project-dir /path/to/your/project - Dangerous shell operationline 69
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target all --project-dir /path/to/your/project - Network accessline 69
curl -fsSL https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh | bash -s -- --online --target all --project-dir /path/to/your/project - Network accessline 75
curl -fsSLO https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh - Network accessline 84
iwr https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.ps1 -OutFile install.ps1 - Network accessline 122
git clone https://github.com/Bhanunamikaze/Agentic-SEO-Skill.git - Network accessline 197
curl -fsSLO https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.sh - Network accessline 205
iwr https://raw.githubusercontent.com/Bhanunamikaze/Agentic-SEO-Skill/main/install.ps1 -OutFile install.ps1 - Network accessline 261
Run an SEO audit on https://example.com. - Network accessline 269
Analyze Core Web Vitals for https://example.com and prioritize fixes. - Network accessline 279
$seo audit https://example.com
wiki/Release-and-Packaging.md
- Network accessline 7
https://github.com/Bhanunamikaze/Agentic-SEO-Skill/releases/tag/v3.0.0
wiki/Reports-and-Outputs.md
- Network accessline 18
Run a full SEO audit for https://example.com. - Network accessline 53
python3 scripts/generate_report.py "https://example.com" --output SEO-REPORT.html - Network accessline 59
python3 ~/.codex/skills/seo/scripts/generate_report.py "https://example.com" --output SEO-REPORT.html - Network accessline 72
 - Network accessline 88
python3 scripts/audit_runner.py "https://example.com" --output-dir audit-output - Network accessline 194
python3 <SKILL_DIR>/scripts/generate_report.py https://example.com --output SEO-REPORT.html
wiki/Troubleshooting.md
- Access to secretsline 24
[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.
Signal confidence: 18 facts
- Dangerous shell operation in code of documentationREADME.md:152Low confidence
- Network access in code of documentationREADME.md:152Low confidence
- Dangerous shell operation in code of documentationREADME.md:155Low confidence
- Network access in code of documentationREADME.md:155Low confidence
- Dangerous shell operation in code of documentationREADME.md:158Low confidence
- Network access in code of documentationREADME.md:158Low confidence
- Dangerous shell operation in code of documentationREADME.md:161Low confidence
- Network access in code of documentationREADME.md:161Low confidence
- Network access in code of documentationREADME.md:167Low confidence
- Network access in code of documentationREADME.md:182Low confidence
- Network access in code of documentationREADME.md:234Low confidence
- Network access in prose of documentationREADME.md:280Low confidence
- Network access in code of documentationREADME.md:473Low confidence
- Access to secrets in code of documentationREADME.md:498Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueREADME.md:499Low confidence
- Access to secrets in code of documentationREADME.md:513Low confidence
- Network access in code of documentationREADME.md:519Low confidence
- Network access in code of documentationREADME.md:552Low confidence
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .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/bhanunamikaze-agentic-seo-skill/)