Repository Analysis

AgriciDaniel/claude-seo

Universal SEO skill for Claude Code. 25 sub-skills + 18 sub-agents covering technical SEO, E-E-A-T, schema, GEO/AEO, backlinks, local SEO, maps intelligence, semantic clustering, e-commerce SEO, international SEO, Google APIs, and PDF/Excel reporting. Optional DataForSEO, Firecrawl, and Banana extensions.

25.0 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of AgriciDaniel/claude-seo, a Python project with 13,074 GitHub stars. SynthScan v2.0 examined 58,140 lines of code across 355 source files, recording 843 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 25.0 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

25.0
Adjusted Score
25.0
Raw Score
100%
Time Factor
2026-07-27
Last Push
13.1K
Stars
Python
Language
58.1K
Lines of Code
355
Files
843
Pattern Hits
2026-08-02
Scan Date
0.04
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 14MEDIUM 256LOW 573

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 843 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Decorative Section Separators158 hits · 557 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_phase_j_executable.py33# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_phase_j_executable.py35# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_phase_j_executable.py120# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_phase_j_executable.py122# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_phase_j_executable.py202# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_phase_j_executable.py204# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_phase_j_executable.py316# ---------------------------------------------------------------------------STRING
MEDIUMtests/test_phase_j_executable.py318# ---------------------------------------------------------------------------STRING
MEDIUMtests/test_portability.py23# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_portability.py25# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_portability.py99# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_portability.py101# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_gbp_lint_and_polish.py24# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_gbp_lint_and_polish.py26# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_gbp_lint_and_polish.py81# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_gbp_lint_and_polish.py83# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_gbp_lint_and_polish.py101# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_gbp_lint_and_polish.py103# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py116# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py118# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py201# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py203# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py217# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py219# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py239# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py241# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py412# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py414# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py445# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py447# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py36# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py38# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py257# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_render_page.py259# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py33# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py35# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py95# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py97# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py142# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py144# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py160# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_technical_depth.py162# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py33# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py35# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py111# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py113# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py166# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py168# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py212# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_content_quality.py214# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_sync_flow.py82# ── Task 1 tests ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_sync_flow.py107# ── Module-level loader for unit tests (no network calls) ─────────────────────COMMENT
MEDIUMtests/test_sync_flow.py118# ── Task 2 tests ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_sync_flow.py183# ── Task 3 tests ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_sync_flow.py221# ── Task 4 tests ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_sync_flow.py233# ── Task 5 tests ──────────────────────────────────────────────────────────────COMMENT
MEDIUMtests/test_schema_v2.py28# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_schema_v2.py30# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_schema_v2.py113# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_schema_v2.py115# ---------------------------------------------------------------------------COMMENT
98 more matches not shown…
Hyper-Verbose Identifiers310 hits · 336 pts
SeverityFileLineSnippetContext
LOWtests/test_agent_mcp_permissions.py16def test_dataforseo_agent_mirrors_allow_only_sanctioned_mcp_path():CODE
LOWtests/test_agent_mcp_permissions.py25def test_dataforseo_agent_mirrors_fail_closed_without_mcp():CODE
LOWtests/test_agent_mcp_permissions.py37def test_dataforseo_agent_bodies_stay_mirrored():CODE
LOWtests/test_agent_mcp_permissions.py43def test_dataforseo_installers_use_matching_mcp_server_name():CODE
LOWtests/test_audit_instructions.py10def test_seo_audit_starts_with_render_page_auto() -> None:CODE
LOWtests/test_audit_instructions.py19def test_seo_audit_requires_persistent_artifacts() -> None:CODE
LOWtests/test_audit_instructions.py32def test_audit_agents_use_renderer_or_capture_script() -> None:CODE
LOWtests/test_audit_instructions.py45def test_audit_agents_document_output_dir_findings_contract() -> None:CODE
LOWtests/test_audit_instructions.py68def test_seo_audit_report_command_keeps_outputs_in_audit_dir() -> None:CODE
LOWtests/test_phase_j_executable.py38def test_discovery_url_for_normalizes_to_well_known():CODE
LOWtests/test_phase_j_executable.py107def test_parse_profile_rejects_non_object_root():CODE
LOWtests/test_phase_j_executable.py112def test_known_capabilities_cover_core_commerce_verbs():CODE
LOWtests/test_phase_j_executable.py125def test_iptc_vocab_contains_required_merchant_center_value():CODE
LOWtests/test_phase_j_executable.py133def test_audit_reports_target_not_found(tmp_path):CODE
LOWtests/test_phase_j_executable.py138def test_audit_reports_exiftool_unavailable(tmp_path, monkeypatch):CODE
LOWtests/test_phase_j_executable.py147def test_inject_rejects_unknown_source_type(tmp_path):CODE
LOWtests/test_phase_j_executable.py155def test_inject_reports_missing_exiftool(tmp_path, monkeypatch):CODE
LOWtests/test_phase_j_executable.py164def test_inject_succeeds_when_subprocess_returns_zero(tmp_path, monkeypatch):CODE
LOWtests/test_phase_j_executable.py207def test_analyze_html_counts_semantic_tags_and_widgets():CODE
LOWtests/test_phase_j_executable.py55def test_parse_profile_rejects_malformed_json():CODE
LOWtests/test_phase_j_executable.py61def test_parse_profile_valid_minimal_profile():CODE
LOWtests/test_phase_j_executable.py82def test_parse_profile_flags_missing_fields_and_unknown_capability():CODE
LOWtests/test_phase_j_executable.py176def test_audit_classifies_files_via_mocked_exiftool(tmp_path, monkeypatch):CODE
LOWtests/test_phase_j_executable.py321def test_render_page_result_dict_includes_accessibility_tree_key():STRING
LOWtests/test_phase_j_executable.py225def test_analyze_html_detects_unlabeled_inputs():STRING
LOWtests/test_phase_j_executable.py240def test_analyze_accessibility_tree_handles_none_input():STRING
LOWtests/test_phase_j_executable.py246def test_analyze_accessibility_tree_counts_roles_and_names():STRING
LOWtests/test_phase_j_executable.py269def test_score_clean_page_scores_high():STRING
LOWtests/test_phase_j_executable.py292def test_score_deducts_for_div_onclick_and_unnamed_interactives():STRING
LOWtests/test_phase_j_executable.py332def test_render_page_accepts_extract_accessibility_kwarg():STRING
LOWtests/test_portability.py28def test_whole_repo_passes_portability_lint() -> None:CODE
LOWtests/test_portability.py44def test_check_one_flags_missing_frontmatter(tmp_path) -> None:CODE
LOWtests/test_portability.py52def test_check_one_flags_missing_name(tmp_path) -> None:CODE
LOWtests/test_portability.py60def test_check_one_flags_camelcase_name(tmp_path) -> None:CODE
LOWtests/test_portability.py68def test_check_one_flags_missing_description(tmp_path) -> None:CODE
LOWtests/test_portability.py76def test_check_one_warns_on_inline_comment_in_tools(tmp_path) -> None:CODE
LOWtests/test_portability.py87def test_check_one_clean_skill_returns_no_findings(tmp_path) -> None:CODE
LOWtests/test_portability.py104def test_agents_md_covers_all_target_platforms() -> None:CODE
LOWtests/test_portability.py111def test_agents_md_documents_portability_check() -> None:CODE
LOWtests/test_portability.py116def test_agents_md_tool_mapping_table_includes_codex_cline_aider() -> None:CODE
LOWtests/test_fetch_page_decoding.py28def test_explicit_charset_from_content_type_wins() -> None:CODE
LOWtests/test_fetch_page_decoding.py33def test_meta_charset_is_used_when_header_has_no_charset() -> None:CODE
LOWtests/test_fetch_page_decoding.py39def test_invalid_bytes_are_replaced_not_dropped() -> None:CODE
LOWtests/test_gsc_pagination.py60def test_small_limit_is_one_small_request_plus_aggregate():CODE
LOWtests/test_gsc_pagination.py67def test_exact_api_page_limit_does_not_fetch_an_extra_dimension_page():CODE
LOWtests/test_gsc_pagination.py73def test_limit_over_api_page_size_fetches_only_the_remaining_row():CODE
LOWtests/test_gsc_pagination.py80def test_short_page_stops_before_total_cap():CODE
LOWtests/test_gsc_pagination.py86def test_invalid_limits_fail_before_building_service():CODE
LOWtests/test_gsc_pagination.py94def test_invalid_programmatic_dimensions_fail_before_building_service():CODE
LOWtests/test_gsc_pagination.py110def test_none_programmatic_dimensions_preserve_default():CODE
LOWtests/test_gsc_pagination.py120def test_blank_cli_dimensions_parse_to_empty_list():CODE
LOWtests/test_gsc_pagination.py125def test_dimensionless_primary_query_is_reused_for_totals():CODE
LOWtests/test_gsc_pagination.py134def test_filters_are_copied_to_dimensionless_aggregate():CODE
LOWtests/test_banana_api_key_safety.py49def test_banana_generate_redacts_upstream_http_error_body() -> None:CODE
LOWtests/test_banana_api_key_safety.py68def test_banana_edit_redacts_upstream_http_error_body(tmp_path: Path) -> None:CODE
LOWtests/test_extension_installer_injection.py40def test_installer_uses_safe_credential_pattern(rel: str, argc: int) -> None:CODE
LOWtests/test_extension_installer_injection.py51def test_installer_credential_injection_is_inert(tmp_path: Path, rel: str, argc: int) -> None:CODE
LOWtests/test_drift_portability.py21def test_fetch_page_data_uses_tempfile_not_dev_stdout_or_stdin() -> None:CODE
LOWtests/test_gbp_lint_and_polish.py29def test_clean_page_returns_ok() -> None:CODE
LOWtests/test_gbp_lint_and_polish.py35def test_detects_gbp_chat_cta() -> None:CODE
250 more matches not shown…
Excessive Try-Catch Wrapping147 hits · 242 pts
SeverityFileLineSnippetContext
LOWextensions/ahrefs/install.sh77except Exception:CODE
LOWextensions/dataforseo/install.sh146except Exception:CODE
LOWextensions/firecrawl/install.sh115except Exception:CODE
LOWextensions/banana/install.sh126except Exception:CODE
MEDIUMextensions/banana/scripts/cost_tracker.py46 print(f"Error: Missing pricing config at {PRICING_PATH}.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/cost_tracker.py54 print("Error: pricing.json must include checked_date and models.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/cost_tracker.py70 print(f"Error: No pricing for model '{model}' in {PRICING_PATH}.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/cost_tracker.py79 print(f"Error: No pricing for resolution '{resolution}' in {PRICING_PATH}.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/cost_tracker.py163 print("Error: Pass --confirm to reset the cost ledger.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/presets.py32 print("Error: Preset name must contain only letters, numbers, hyphens, and underscores.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/presets.py47 print(f"Error: Preset '{name}' not found.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/presets.py82 print(f"Error: Preset '{args.name}' already exists. Use a different name.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/presets.py109 print("Error: Pass --confirm to delete the preset.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/presets.py113 print(f"Error: Preset '{args.name}' not found.", file=sys.stderr)CODE
MEDIUMextensions/banana/scripts/setup_mcp.py76 print("Error: API key cannot be empty.")CODE
MEDIUMscripts/bing_webmaster.py25 print("Error: requests library required. Install with: pip install requests")CODE
MEDIUMscripts/bing_webmaster.py34 print("Error: backlinks_auth.py and google_auth.py required in scripts/", file=sys.stderr)CODE
MEDIUMscripts/bing_webmaster.py519 print(f"Error: {result['error']}", file=sys.stderr)CODE
MEDIUMscripts/bing_webmaster.py523 print("Error: compare command requires a competitor URL", file=sys.stderr)CODE
MEDIUMscripts/bing_webmaster.py543 print(f"Error: {result['error']}", file=sys.stderr)CODE
MEDIUMscripts/bing_webmaster.py559 print(f"Error: {result['error']}", file=sys.stderr)CODE
MEDIUMscripts/bing_webmaster.py606 print(f"Error: {result['error']}", file=sys.stderr)CODE
MEDIUMscripts/sitemap_discovery.py281 print(f"Error: {result['error']}", file=sys.stderr)CODE
MEDIUMscripts/verify_release.py117 print(f"Error: manifest not found: {args.manifest}", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py482 print(f"Error exchanging authorization code: {e}", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py175 print(f"Error loading service account: {e}", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py186 print(f"Error reading OAuth client file: {e}", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py308 print(f"Error refreshing OAuth token: {e}", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py358 print("Error: google-auth required. Install with: pip install google-auth", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py381 print("Error: Could not load OAuth client credentials.", file=sys.stderr)CODE
MEDIUMscripts/google_auth.py554 print(f"Error building {api_name} service: {e}", file=sys.stderr)CODE
LOWscripts/google_auth.py472 except Exception as e:CODE
LOWscripts/google_auth.py481 except Exception as e:CODE
LOWscripts/google_auth.py174 except Exception as e:CODE
LOWscripts/google_auth.py278 except Exception:CODE
LOWscripts/google_auth.py307 except Exception as e:CODE
LOWscripts/google_auth.py418 except Exception:CODE
LOWscripts/google_auth.py553 except Exception as e:CODE
MEDIUMscripts/google_auth.py833 print("Error: --creds is required with --auth", file=sys.stderr)STRING
MEDIUMscripts/google_auth.py840 print("Error: --creds and --code are required with --exchange", file=sys.stderr)STRING
MEDIUMscripts/drift_report.py347 print(f"Error: File not found: {args.file}", file=sys.stderr)CODE
MEDIUMscripts/drift_report.py352 print("Error: Provide a JSON file path or use --stdin", file=sys.stderr)CODE
MEDIUMscripts/drift_report.py358 print(f"Error: Invalid JSON: {e}", file=sys.stderr)CODE
MEDIUMscripts/drift_report.py362 print(f"Error: Comparison has error: {comparison['error']}", file=sys.stderr)CODE
MEDIUMscripts/iptc_ai_label.py206 print(f"Error: {report['summary']['error']}", file=sys.stderr)CODE
MEDIUMscripts/iptc_ai_label.py220 print(f"Error: {out['error']}", file=sys.stderr)CODE
MEDIUMscripts/google_report.py2676 print(f"Error reading data file: {e}", file=sys.stderr)CODE
MEDIUMscripts/google_report.py2682 print(f"Error parsing stdin JSON: {e}", file=sys.stderr)CODE
MEDIUMscripts/google_report.py2685 print("Error: Provide --data file or pipe JSON via stdin.", file=sys.stderr)CODE
MEDIUMscripts/google_report.py2697 print(f"Error: {result['error']}", file=sys.stderr)CODE
LOWscripts/google_report.py2400 except Exception as e:CODE
MEDIUMscripts/gbp_deprecation_lint.py116 print(f"Error: url_safety: {exc}", file=sys.stderr)CODE
LOWscripts/capture_screenshot.py151 except Exception as e:CODE
MEDIUMscripts/capture_screenshot.py173 print("Error: Output path must be within current directory or home directory", file=sys.stderr)CODE
MEDIUMscripts/capture_screenshot.py182 print(f"Error: {e}", file=sys.stderr)CODE
LOWscripts/ga4_report.py56 except Exception as e:CODE
MEDIUMscripts/ga4_report.py57 print(f"Error building GA4 client: {e}", file=sys.stderr)CODE
LOWscripts/ga4_report.py164 except Exception as e:CODE
LOWscripts/ga4_report.py224 except Exception as e:CODE
LOWscripts/ga4_report.py329 except Exception as e:CODE
87 more matches not shown…
Unused Imports85 hits · 79 pts
SeverityFileLineSnippetContext
LOWtests/test_audit_instructions.py3CODE
LOWtests/test_phase_j_executable.py13CODE
LOWtests/test_phase_j_executable.py20CODE
LOWtests/test_portability.py7CODE
LOWtests/test_portability.py9CODE
LOWtests/test_portability.py13CODE
LOWtests/test_fetch_page_decoding.py3CODE
LOWtests/test_nlp_analyze.py3CODE
LOWtests/test_gsc_pagination.py3CODE
LOWtests/test_banana_api_key_safety.py3CODE
LOWtests/test_extension_installer_injection.py11CODE
LOWtests/test_drift_portability.py3CODE
LOWtests/test_gbp_lint_and_polish.py8CODE
LOWtests/test_gbp_lint_and_polish.py10CODE
LOWtests/test_gbp_lint_and_polish.py14CODE
LOWtests/test_gsc_totals_aggregate.py6CODE
LOWtests/test_runtime.py3CODE
LOWtests/test_cross_platform_hooks.py3CODE
LOWtests/test_render_page.py19CODE
LOWtests/test_technical_depth.py15CODE
LOWtests/test_technical_depth.py21CODE
LOWtests/test_sitemap_discovery.py3CODE
LOWtests/test_google_api_key_safety.py7CODE
LOWtests/test_google_report_full_audit.py3CODE
LOWtests/test_moz_api.py3CODE
LOWtests/test_schema_hook_policy.py8CODE
LOWtests/test_content_quality.py14CODE
LOWtests/test_pyproject_metadata.py3CODE
LOWtests/test_bing_webmaster.py3CODE
LOWtests/test_contributors.py3CODE
LOWtests/test_schema_v2.py12CODE
LOWtests/test_schema_v2.py14CODE
LOWtests/test_schema_v2.py18CODE
LOWtests/test_url_safety.py12CODE
LOWtests/test_gsc_query.py3CODE
LOWtests/test_gsc_query.py5CODE
LOWtests/test_parasite_risk_and_extensions.py8CODE
LOWtests/test_parasite_risk_and_extensions.py10CODE
LOWscripts/sitemap_discovery.py9CODE
LOWscripts/verify_release.py30CODE
LOWscripts/backlinks_auth.py29CODE
LOWscripts/content_quality.py47CODE
LOWscripts/schema_generate.py47CODE
LOWscripts/iptc_ai_label.py33CODE
LOWscripts/iptc_ai_label.py37CODE
LOWscripts/google_report.py23CODE
LOWscripts/gbp_deprecation_lint.py26CODE
LOWscripts/drift_compare.py29CODE
LOWscripts/capture_screenshot.py16CODE
LOWscripts/ga4_report.py18CODE
LOWscripts/url_safety.py73CODE
LOWscripts/schema_ecommerce_validate.py33CODE
LOWscripts/commoncrawl_graph.py20CODE
LOWscripts/commoncrawl_graph.py38CODE
LOWscripts/ucp_check.py32CODE
LOWscripts/ucp_check.py38CODE
LOWscripts/parse_html.py25CODE
LOWscripts/dataforseo_costs.py29CODE
LOWscripts/indexing_notify.py24CODE
LOWscripts/indexing_notify.py28CODE
25 more matches not shown…
Structural Annotation Overuse34 hits · 54 pts
SeverityFileLineSnippetContext
LOWagents/seo-backlinks.md89### Step 1: Automated validationCOMMENT
LOWagents/seo-backlinks.md97### Step 2: Manual checks (not automatable)COMMENT
LOWscripts/drift_baseline.py153 # Step 1: Fetch the page via fetch_page.pySTRING
LOWscripts/drift_baseline.py188 # Step 2: Parse the HTML via parse_html.pySTRING
LOWscripts/verify_backlinks.py130 # Step 1: HEAD checkCOMMENT
LOWscripts/verify_backlinks.py153 # Step 2: Full GET + parseCOMMENT
LOWscripts/verify_backlinks.py170 # Step 3: Parse HTML and find target linkCOMMENT
LOWskills/seo-google/references/auth-setup.md13## Step 1: Create a Google Cloud ProjectCOMMENT
LOWskills/seo-google/references/auth-setup.md20## Step 2: Enable APIsCOMMENT
LOWskills/seo-google/references/auth-setup.md33## Step 3: Create an API KeyCOMMENT
LOWskills/seo-google/references/auth-setup.md40## Step 4: Create a Service AccountCOMMENT
LOWskills/seo-google/references/auth-setup.md64## Step 5: Grant Search Console AccessCOMMENT
LOWskills/seo-google/references/auth-setup.md74## Step 6: Grant GA4 AccessCOMMENT
LOWskills/seo-google/references/auth-setup.md82## Step 7: Create Config FileCOMMENT
LOWskills/seo-google/references/auth-setup.md106## Step 8: Verify SetupCOMMENT
LOWskills/seo-cluster/SKILL.md45### Step 1: Seed Keyword ExpansionCOMMENT
LOWskills/seo-cluster/SKILL.md59### Step 2: SERP Overlap ClusteringCOMMENT
LOWskills/seo-cluster/SKILL.md87### Step 3: Intent ClassificationCOMMENT
LOWskills/seo-cluster/SKILL.md102### Step 4: Hub-and-Spoke ArchitectureCOMMENT
LOWskills/seo-cluster/SKILL.md131### Step 5: Internal Link MatrixCOMMENT
LOWskills/seo-cluster/SKILL.md158### Step 6: Interactive Cluster MapCOMMENT
LOW…lls/seo-cluster/references/serp-overlap-methodology.md12### Step 1: Collect SERP DataCOMMENT
LOW…lls/seo-cluster/references/serp-overlap-methodology.md20### Step 2: Pairwise ComparisonCOMMENT
LOW…lls/seo-cluster/references/serp-overlap-methodology.md27### Step 3: Apply ThresholdsCOMMENT
LOW…lls/seo-cluster/references/serp-overlap-methodology.md36### Step 4: Handle Ambiguous Scores (3-4 Range)COMMENT
LOWskills/seo-sxo/SKILL.md44### Step 1: Target AcquisitionCOMMENT
LOWskills/seo-sxo/SKILL.md52### Step 2: SERP Backwards AnalysisCOMMENT
LOWskills/seo-sxo/SKILL.md77### Step 3: Page-Type Mismatch DetectionCOMMENT
LOWskills/seo-sxo/SKILL.md98### Step 4: User Story DerivationCOMMENT
LOWskills/seo-sxo/SKILL.md120### Step 5: Gap AnalysisCOMMENT
LOWskills/seo-sxo/SKILL.md136### Step 6: Persona-Based ScoringCOMMENT
LOWskills/seo-sxo/SKILL.md152### Step 7: Wireframe Generation (Optional)COMMENT
LOW…rompts/optimize/step-1-the-chatgpt-discovery-prompt.md11# Step 1: The ChatGPT Discovery PromptCOMMENT
LOW…pts/optimize/step-2-the-follow-up-qualifying-prompt.md11# Step 2: The Follow-Up Qualifying PromptCOMMENT
Deep Nesting56 hits · 53 pts
SeverityFileLineSnippetContext
LOWextensions/banana/scripts/batch.py35CODE
LOWhooks/validate-schema.py124CODE
LOWscripts/bing_webmaster.py190CODE
LOWscripts/bing_webmaster.py383CODE
LOWscripts/bing_webmaster.py474CODE
LOWscripts/sitemap_discovery.py74CODE
LOWscripts/sitemap_discovery.py183CODE
LOWscripts/sitemap_discovery.py272CODE
LOWscripts/backlinks_auth.py60CODE
LOWscripts/backlinks_auth.py104CODE
LOWscripts/backlinks_auth.py370CODE
LOWscripts/google_auth.py312CODE
LOWscripts/google_auth.py558CODE
LOWscripts/google_auth.py644CODE
LOWscripts/google_auth.py784CODE
LOWscripts/schema_generate.py246CODE
LOWscripts/google_report.py1094CODE
LOWscripts/google_report.py2057CODE
LOWscripts/google_report.py2464CODE
LOWscripts/dataforseo_normalize.py88CODE
LOWscripts/ga4_report.py397CODE
LOWscripts/schema_ecommerce_validate.py113CODE
LOWscripts/commoncrawl_graph.py148CODE
LOWscripts/commoncrawl_graph.py215CODE
LOWscripts/ucp_check.py72CODE
LOWscripts/parse_html.py76CODE
LOWscripts/dataforseo_costs.py144CODE
LOWscripts/dataforseo_costs.py164CODE
LOWscripts/gsc_query.py421CODE
LOWscripts/indexing_notify.py67CODE
LOWscripts/indexing_notify.py250CODE
LOWscripts/analyze_visual.py46CODE
LOWscripts/parasite_risk.py113CODE
LOWscripts/crux_history.py54CODE
LOWscripts/sync_flow.py274CODE
LOWscripts/pagespeed_check.py82CODE
LOWscripts/pagespeed_check.py311CODE
LOWscripts/pagespeed_check.py486CODE
LOWscripts/runtime.py244CODE
LOWscripts/agent_ux_check.py101CODE
LOWscripts/seo_updates.py63CODE
LOWscripts/lcp_subparts.py90CODE
LOWscripts/keyword_planner.py48CODE
LOWscripts/keyword_planner.py246CODE
LOWscripts/youtube_search.py288CODE
LOWscripts/domain_history.py107CODE
LOWscripts/domain_history.py216CODE
LOWscripts/moz_api.py347CODE
LOWscripts/gsc_inspect.py56CODE
LOWscripts/gsc_inspect.py177CODE
LOWscripts/gsc_inspect.py242CODE
LOWscripts/render_page.py168CODE
LOWscripts/render_page.py308CODE
LOWscripts/verify_backlinks.py95CODE
LOWscripts/consistency_check.py142CODE
LOWscripts/unlighthouse_run.py128CODE
Synthetic Comment Markers6 hits · 39 pts
SeverityFileLineSnippetContext
HIGHREADME.md20- **AI-search first.** Aligned with [Google's AI Optimization Guide](https://developers.google.com/search/docs/fundamentCODE
HIGHREADME.md477Most SEO tools treat AI search as a separate optimization discipline. Claude SEO follows [Google's own position](https:/CODE
HIGHtests/test_phase_j_executable.py126 # Google Merchant Center requires this exact label on AI-generated images.COMMENT
HIGHscripts/drift_report.py309 Generated by Claude SEO Drift Monitor | {report_time}CODE
HIGHscripts/google_report.py2046 f' Report generated by Claude SEO — Google SEO Intelligence Skill — 'CODE
HIGHskills/seo-cluster/templates/cluster-map.html315 <footer>Generated by Claude SEO</footer>CODE
Fake / Example Data17 hits · 20 pts
SeverityFileLineSnippetContext
LOWtests/test_render_page.py73 + ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 5)CODE
LOWtests/test_render_page.py73 + ("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " * 5)CODE
LOWtests/test_bing_webmaster.py46 result = bing.get_link_counts("https://site.test/", "placeholder")CODE
LOWtests/test_bing_webmaster.py56 result = bing.get_link_counts("https://site.test/", "placeholder", max_pages=1)CODE
LOWtests/test_bing_webmaster.py67 result = bing.get_link_counts("https://site.test/", "placeholder")CODE
LOWtests/test_bing_webmaster.py75 result = bing.get_link_counts("https://site.test/", "placeholder")CODE
LOWtests/test_bing_webmaster.py90 result = bing.get_link_details("https://site.test/", "placeholder", max_detail_pages=2)CODE
LOWtests/test_bing_webmaster.py112 result = bing.get_link_details("https://site.test/", "placeholder")CODE
LOWtests/test_bing_webmaster.py125 result = bing.get_link_details("https://site.test/", "placeholder")CODE
LOWtests/test_bing_webmaster.py132 result = bing.get_link_details("https://site.test/", "placeholder", page=-1)CODE
LOWtests/test_bing_webmaster.py146 result = bing.get_link_details("https://site.test/", "placeholder")CODE
LOWtests/test_bing_webmaster.py154 result = bing.compare_links("https://a.test", "https://b.test", "placeholder")CODE
LOWtests/test_bing_webmaster.py166 result = bing.compare_links("https://a.test", "https://b.test", "placeholder")CODE
LOWtests/test_bing_webmaster.py180 result = bing._bing_request("GetLinkCounts", "placeholder", params)CODE
LOWtests/test_bing_webmaster.py186 assert sent_params == {"siteUrl": "https://site.test/", "page": 0, "apikey": "placeholder"}CODE
LOWhooks/validate-schema.py178 critical_keywords = ["placeholder", "deprecated", "retired"]CODE
LOWskills/seo-plan/assets/local-service.md76 "streetAddress": "123 Main St",CODE
Cross-Language Confusion5 hits · 20 pts
SeverityFileLineSnippetContext
HIGHscripts/capture_screenshot.py31 "pip install playwright && playwright install chromium"CODE
HIGHscripts/analyze_visual.py18 print("Error: playwright required. Install with: pip install playwright && playwright install chromium")CODE
HIGHscripts/domain_history.py44 "years_registered": float or null,STRING
HIGHscripts/domain_history.py45 "topical_shift": true|false|null,STRING
HIGHscripts/render_page.py290 "(document.body && document.body.innerText || '').trim().length,"CODE
Magic Placeholder Names3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHdocs/MCP-INTEGRATION.md57 "PAGESPEED_API_KEY": "your-api-key"CODE
HIGHextensions/firecrawl/docs/FIRECRAWL-SETUP.md31 "FIRECRAWL_API_KEY": "fc-your-api-key-here"CODE
HIGHextensions/banana/docs/BANANA-SETUP.md25 "GOOGLE_AI_API_KEY": "your-api-key-here"CODE
Redundant / Tautological Comments8 hits · 12 pts
SeverityFileLineSnippetContext
LOWextensions/dataforseo/install.sh82 # Check if running from repo or standaloneCOMMENT
LOWextensions/firecrawl/install.sh64 # Check if running from repo or standaloneCOMMENT
LOWextensions/banana/uninstall.sh16 # Check if standalone banana skill still existsCOMMENT
LOWextensions/banana/install.sh50 # Check if running from repo or standaloneCOMMENT
LOWextensions/banana/install.sh61 # Check if nanobanana-mcp is already configuredCOMMENT
LOWscripts/google_auth.py329 # Check if token needs refreshCOMMENT
LOWscripts/validate_backlink_report.py42 # Check if it's a @graph wrapper that wasn't flattenedCOMMENT
LOWscripts/validate_backlink_report.py131 # Check if ALL H1s are suspicious (likely no real heading)COMMENT
Modern AI Meta-Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMextensions/ahrefs/skills/seo-ahrefs/SKILL.md45## Cost guardrailsCOMMENT
MEDIUMextensions/seranking/skills/seo-seranking/SKILL.md42## Cost guardrailsCOMMENT
MEDIUMskills/seo/references/thinking-framework.md121### 6. CONNECT — system orchestrationCOMMENT
Verbosity Indicators5 hits · 6 pts
SeverityFileLineSnippetContext
LOWscripts/drift_baseline.py153 # Step 1: Fetch the page via fetch_page.pySTRING
LOWscripts/drift_baseline.py188 # Step 2: Parse the HTML via parse_html.pySTRING
LOWscripts/verify_backlinks.py130 # Step 1: HEAD checkCOMMENT
LOWscripts/verify_backlinks.py153 # Step 2: Full GET + parseCOMMENT
LOWscripts/verify_backlinks.py170 # Step 3: Parse HTML and find target linkCOMMENT
Self-Referential Comments1 hit · 4 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_phase_j_executable.py139 # Create a real file so we get past the target-exists check.COMMENT
Over-Commented Block2 hits · 2 pts
SeverityFileLineSnippetContext
LOWuninstall.sh1#!/usr/bin/env bashCOMMENT
LOWscripts/url_safety.py101 "make_safe_playwright_route_handler",COMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMscripts/content_quality.py120 "it's worth noting that",CODE
Modern Structural Boilerplate1 hit · 1 pts
SeverityFileLineSnippetContext
LOWscripts/url_safety.py92__all__ = [CODE
AI Structural Patterns1 hit · 1 pts
SeverityFileLineSnippetContext
LOWscripts/drift_baseline.py401CODE