Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when auditing a site for indexability issues, investigating why pages appear in Google's index that should be excluded (or vice versa), or reviewing robots.txt and meta robots configurations for consistency.
.claude/skills/thedaviddias-indexability-conflicts/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 23% | 0% |
| case-03 | ✓→✓ | = Same ✓ | -20% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 20% | 0% |
Conflicting indexability directives create unpredictable crawling and indexing behaviour. The most dangerous combination is robots.txt blocking a page that also has a noindex tag — the noindex is never read, but the URL is still known to Google, leaving it in a limbo state that wastes crawl budget.
noindex blocks indexing — they are different mechanisms and should not be applied togethernoindex directive because crawlers never read the pagenoindex page create an unresolvable conflict — canonicalise to an indexable URL insteadFor each page, collect four signals: (1) Is the URL path blocked by robots.txt? (2) Does the page HTML contain <meta name='robots' content='noindex'>? (3) Does the HTTP response include an X-Robots-Tag: noindex header? (4) Does the page's <link rel='canonical'> point to a different URL? Flag: pages blocked in robots.txt that also have noindex directives, pages with canonical pointing to a noindex URL, and pages with conflicting index/noindex signals from meta and HTTP header.
noindex:noindex so crawlers can read it.noindex (irrelevant if not crawled); keep the robots.txt block.noindex pages:noindex from the destination.index and noindex in meta robots (from different tags or sources):robots.txt is a crawl directive; noindex is an indexing directive. They operate at different stages of Google's pipeline. A page blocked in robots.txt is never fetched, so its noindex tag is never read — yet the URL is still known from sitemaps or links, keeping it in a crawl ambiguity state. Google's documentation explicitly warns against blocking pages in robots.txt that you also want to declare as noindex.
Programmatically fetch robots.txt and parse its Disallow rules. For each page URL, determine if it matches a Disallow pattern. If yes, fetch the page HTML and check for <meta name='robots'> tags — flag if noindex is present. Also check the X-Robots-Tag HTTP response header for conflicts with the meta tag. Report the specific conflict type for each flagged URL.
For full implementation details, code examples, and framework-specific guidance, see references/rule.md.
Rule page: https://frontendchecklist.io/en/rules/seo/indexability-conflicts
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,978 | 14,930 | -12% | 1 | 1 | 0% | 3,106 | 3,770 | +21% | 0 | 0 | — |
case-02 | pass→pass | 11,236 | 9,380 | -17% | 1 | 1 | 0% | 1,966 | 2,419 | +23% | 0 | 0 | — |
case-03 | pass→pass | 12,039 | 6,292 | -48% | 1 | 1 | 0% | 2,551 | 2,040 | -20% | 0 | 0 | — |
case-04 | pass→pass | 9,558 | 6,174 | -35% | 1 | 1 | 0% | 1,783 | 2,140 | +20% | 0 | 0 | — |
case-05 | pass→pass | 8,186 | 10,856 | +33% | 1 | 1 | 0% | 1,734 | 2,314 | +33% | 0 | 0 | — |
case-06 | pass→pass | 8,652 | 8,438 | -2% | 1 | 1 | 0% | 1,699 | 2,434 | +43% | 0 | 0 | — |
case-07 | pass→pass | 7,976 | 5,050 | -37% | 1 | 1 | 0% | 1,306 | 1,622 | +24% | 0 | 0 | — |
case-08 | fail→pass | 18,258 | 13,331 | -27% | 1 | 1 | 0% | 3,171 | 3,293 | +4% | 0 | 0 | — |
case-09 | pass→pass | 11,118 | 9,472 | -15% | 1 | 1 | 0% | 2,070 | 2,504 | +21% | 0 | 0 | — |
case-10 | pass→pass | 10,571 | 7,654 | -28% | 1 | 1 | 0% | 2,009 | 2,312 | +15% | 0 | 0 | — |
case-16 | pass→pass | 11,734 | 8,374 | -29% | 1 | 1 | 0% | 2,091 | 2,265 | +8% | 0 | 0 | — |
case-11 | pass→pass | 12,920 | 9,351 | -28% | 1 | 1 | 0% | 1,866 | 2,467 | +32% | 0 | 0 | — |
case-12 | pass→pass | 19,016 | 20,005 | +5% | 1 | 1 | 0% | 1,709 | 2,020 | +18% | 0 | 0 | — |
case-13 | pass→pass | 17,448 | 13,137 | -25% | 1 | 1 | 0% | 1,821 | 2,066 | +13% | 0 | 0 | — |
case-14 | pass→pass | 14,866 | 19,608 | +32% | 1 | 1 | 0% | 1,649 | 1,950 | +18% | 0 | 0 | — |
case-15 | pass→pass | 13,722 | 13,126 | -4% | 1 | 1 | 0% | 2,188 | 3,036 | +39% | 0 | 0 | — |
case-17 | pass→pass | 8,899 | 7,187 | -19% | 1 | 1 | 0% | 1,651 | 1,973 | +20% | 0 | 0 | — |
case-18 | pass→pass | 12,159 | 12,047 | -1% | 1 | 1 | 0% | 2,035 | 2,625 | +29% | 0 | 0 | — |
case-19 | pass→pass | 12,068 | 2,623 | -78% | 1 | 1 | 0% | 1,981 | 1,100 | -44% | 0 | 0 | — |
case-20 | pass→pass | 21,428 | 16,024 | -25% | 1 | 1 | 0% | 3,343 | 3,435 | +3% | 0 | 0 | — |
case-21 | pass→pass | 15,903 | 15,744 | -1% | 1 | 1 | 0% | 2,368 | 3,071 | +30% | 0 | 0 | — |
case-22 | pass→pass | 15,932 | 10,839 | -32% | 1 | 1 | 0% | 2,604 | 2,661 | +2% | 0 | 0 | — |
case-23 | pass→pass | 17,339 | 16,113 | -7% | 1 | 1 | 0% | 2,777 | 3,273 | +18% | 0 | 0 | — |
case-24 | pass→pass | 11,907 | 10,139 | -15% | 1 | 1 | 0% | 1,822 | 2,219 | +22% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +8 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.