Back to Tools

Anchor Text Relevance Checker

Use cases

Auditing internal link quality Finding irrelevant anchor text to fix Training content teams on anchor best practices Improving topical relevance signals

LLM evaluation of anchor text against target page via the OpenAI API (gpt-4o-mini by default, gpt-4o and gpt-4.1 selectable).

Three-dimension analysis: relevance accuracy, language naturalness, citation quality.

Four ratings: High, Medium, Fail, Typo.

Auto-fail criteria: questions, sentence fragments.

Batch processing with column mapping.

Streamlit App Requires API Key

Platform

Browser-based (no installation required)

Input

OpenAI API key

Anchor text and target URL pairs

Optional: H1 and title for context

Output

Relevance rating per pair with JSON schema output. Bulk export: anchor, URL, metadata, rating category.

Launch App View Source

Features

  • Three-dimension analysis (relevance/naturalness/citation)
  • Four-level ratings: High, Medium, Fail, Typo
  • Auto-fail for questions and fragments
  • Batch processing with column mapping
  • Optional H1 and title context

How to use

  1. 1 Enter your OpenAI API key
  2. 2 Upload CSV/Excel with anchor-URL pairs
  3. 3 Map columns (anchor, URL, optional H1/title)
  4. 4 Run semantic relevance check
  5. 5 Export with ratings: High/Medium/Fail/Typo

Frequently asked questions

Does the tool read the content of the target page?
No. It never fetches the URL. The model judges relevance from the anchor text, the URL string itself, and the target page H1 and title if you map those columns. Without an H1 or title the assessment leans entirely on what the URL slug implies, so map those optional columns whenever your export includes them.
What file format and column names does the bulk checker need?
CSV or Excel (.xlsx) with any column names. After upload you map the anchor text and target URL columns from dropdowns, plus optional H1 and title columns, so no fixed headers are required. A max rows setting (0 = all) lets you test on a small sample before committing a full run.
What drives the OpenAI cost?
One chat completion is made per batch of anchors, with a default batch size of 10 (adjustable 1 to 20), so cost scales with row count divided by batch size. The default model is gpt-4o-mini, with gpt-4o and gpt-4.1 selectable. A 1 second pause runs between batches, which also sets the overall runtime.
Why do some rows come back marked Error?
If an API call fails (invalid key, rate limit, network issue), every row in that batch is marked Error with the message attached. There is no automatic retry, so re-run the affected rows once the underlying problem is fixed.
Why does the output only contain a rating and no explanation?
By design: the prompt uses a strict JSON schema that returns only the rating (High, Medium, Fail or Typo) and explicitly tells the model not to include explanations. To interpret a Fail, check the auto-fail criteria: the anchor is a question, a sentence fragment, sounds SEO-manipulative, or does not indicate what the user will find after clicking.

Need something built for your business?

This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.

Tell Me What You Need