Link Quality Analyzer — Deep link health & quality scoring avatar

Link Quality Analyzer — Deep link health & quality scoring

Pricing

from $0.02 / actor start

Go to Apify Store
Link Quality Analyzer — Deep link health & quality scoring

Link Quality Analyzer — Deep link health & quality scoring

Protect your SEO by detecting broken links, redirect chains, and low-quality outbound links. Scans any webpage to analyze every external link — HTTP status, response time, SSL validity, content type. Each link gets a quality score (0-100) with full diagnostics. Batch scan up to 10 pages.

Pricing

from $0.02 / actor start

Rating

0.0

(0)

Developer

Perry AY

Perry AY

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Link Quality Analyzer 🔗

Detect broken links, redirect chains, and low-quality outbound links with automated scoring

Every broken link on your website damages credibility, wastes link equity, and frustrates visitors. Manually checking each outbound link across multiple pages is impractical — especially for content-heavy sites with hundreds of external references. Link Quality Analyzer automates the tedious work of crawling any webpage, extracting every external link, and giving each one a 0–100 quality score based on HTTP status, response time, redirect depth, and SSL certificate validity.

Supports batch scanning up to 10 pages in a single run, deep SSL inspection for HTTPS links, and multiple output formats for easy integration into your SEO toolchain, content management workflow, or monitoring pipeline.


✨ Features

  • Automatic link extraction — Parses every <a href> tag from a webpage, filters out internal links, anchor-only links, and non-HTTP protocols (mailto, javascript, tel) automatically

  • HTTP status validation — Checks each link with full redirect following; detects 4xx client errors, 5xx server errors, and suspicious HTTP response patterns

  • Redirect chain tracing — Records the full redirect path so you can identify unnecessary hops, broken intermediates, or redirect loops that harm user experience and SEO

  • Response timing — Measures load time per link in milliseconds; flags links slower than 2-second and 5-second thresholds for performance review

  • SSL deep check — Premium mode that connects to each HTTPS link's origin server, validates the TLS certificate, extracts subject/issuer/SANs, and deducts score points for certificate issues

  • Quality scoring algorithm — Composite 0–100 score per link: starts at 100 with deductions for broken status codes (−60 to −80), redirects (−5 per hop), slow response (−5 to −30), and SSL problems (−20)

  • Batch mode — Scan up to 10 pages in a single run; each page's links analyzed independently with per-page configuration support

  • Multiple output formats — Choose json for programmatic use and API integration, csv for spreadsheet analysis or dashboard import, or plain for quick visual inspection

  • Comprehensive summaries — Every run appends a summary row with total pages scanned, total links found, broken link count, average quality score, and number of SSL deep checks performed

🚀 Quick Start

Single URL — Basic Check

{
"url": "https://example.com",
"mode": "basic"
}

Response example (basic — healthy link):

{
"source_url": "https://example.com",
"link_url": "https://partner-site.com/resource",
"status_code": 200,
"quality_score": 100,
"redirect_chain": "",
"load_time_ms": 234.5,
"anchor_text": "Learn more about our partner",
"error": ""
}

Response example (basic — broken link):

{
"source_url": "https://example.com",
"link_url": "https://old-partner.com/page",
"status_code": 404,
"quality_score": 30,
"redirect_chain": "",
"load_time_ms": 156.2,
"anchor_text": "Old partner reference",
"error": ""
}

Single URL — With SSL Deep Inspection

{
"url": "https://example.com",
"mode": "ssl-deep"
}

Response example (ssl-deep mode):

{
"source_url": "https://example.com",
"link_url": "https://secure-partner.com",
"status_code": 200,
"quality_score": 80,
"redirect_chain": "http://secure-partner.com → https://secure-partner.com",
"load_time_ms": 567.1,
"anchor_text": "Secure partner portal",
"ssl_info": {
"has_ssl": true,
"ssl_valid": true,
"subject": {"CN": "secure-partner.com", "O": "Partner Corp"},
"issuer": {"CN": "R3", "O": "Let's Encrypt"},
"ssl_error": ""
},
"error": ""
}

Batch Mode — Multiple Pages

{
"batchMode": true,
"batchData": [
{ "url": "https://site1.com", "mode": "basic" },
{ "url": "https://site2.com", "mode": "ssl-deep" }
]
}

📋 Input Parameters

ParameterTypeDefaultDescription
urlstring""The webpage URL to scan for external links. Must start with http:// or https://.
modestring"basic"Analysis mode: basic (HTTP status + timing) or ssl-deep (adds TLS certificate validation via premium charge event)
outputFormatstring"json"Output format: json for structured results, plain for human-readable text, or csv for spreadsheet import
batchModebooleanfalseEnable batch processing for scanning multiple pages in a single run
batchDataarray[]Array of per-page input objects, each with its own url and mode. Maximum 10 entries.

📤 Output Format

Each analyzed link produces one result row:

FieldTypeDescription
source_urlstringThe page URL from which the link was extracted
link_urlstringThe full external link URL that was checked
status_codeintegerHTTP status code returned (e.g., 200, 301, 404, 500). 0 if the link could not be reached.
quality_scoreintegerComposite quality score 0–100 based on status, redirects, timing, and SSL
redirect_chainstringFull redirect path joined with arrow symbols (e.g., http:// → https:// → https://final). Empty for direct links.
load_time_msnumberResponse time in milliseconds, measured from request start to final response
anchor_textstringVisible anchor text of the link (first 200 characters). Empty for image-only links.
ssl_infoobjectPresent only in ssl-deep mode. Contains has_ssl, ssl_valid, subject, issuer, and ssl_error.
errorstringError description if the link could not be reached, timed out, or failed to resolve. Empty on success.

SSL Info Object (ssl-deep mode only)

FieldTypeDescription
has_sslbooleanWhether the server presented a TLS certificate
ssl_validbooleanWhether the certificate passed standard validation
subjectobjectCertificate subject fields (CN, O, C, etc.)
issuerobjectCertificate issuer fields (CN, O, C, etc.)
ssl_errorstringError description if SSL validation failed

Summary Row

A _summary row is appended at the end with aggregate statistics:

FieldTypeDescription
_summarybooleanAlways true for the summary row
total_pages_scannedintegerNumber of source pages that were processed
total_linksintegerTotal number of external links found and checked
broken_linksintegerNumber of links with HTTP 4xx/5xx status or connection errors
average_quality_scorenumberMean quality score across all checked links (0–100)
ssl_deep_checks_performedintegerNumber of pages analyzed in ssl-deep mode
modestringAnalysis mode used for the run

⚙️ Technical Details

The extraction process works in five steps:

  1. Page fetch: The source page URL is fetched using async HTTP (httpx) with automatic redirect following and a 15-second timeout. A custom User-Agent header ensures broad compatibility.
  2. HTML parsing: The response HTML is parsed with BeautifulSoup's HTML parser. Every <a> tag with an href attribute is enumerated.
  3. URL resolution: Relative URLs are resolved to absolute URLs using urllib.parse.urljoin(base_url, href).
  4. Filtering: The algorithm filters out:
    • Same-domain links (the source page's domain is excluded)
    • Non-HTTP protocols (mailto:, javascript:, tel:, ftp:, file:)
    • Anchor-only links (#section, #top)
    • Duplicate URLs (each unique URL is checked once per page)
  5. Collection: Remaining links are collected with their anchor text (first 200 characters) for subsequent quality checking.

Quality Scoring Algorithm

The 0–100 quality score starts at 100 and applies these deductions:

ConditionDeductionExample
HTTP 200 OK0 (perfect)Link is healthy
HTTP 301/302 redirect−10Permanently or temporarily moved
HTTP 403 Forbidden−40Access denied
HTTP 404 Not Found−60Page removed without redirect
HTTP 410 Gone−50Resource intentionally deleted
Other 4xx error−50429 Rate Limited, etc.
HTTP 5xx error−80Internal server error, bad gateway
Each redirect hop−5 per hopMultiple hops waste link equity
Response > 1000 ms−5Noticeable delay
Response > 2000 ms−15Slow user experience
Response > 5000 ms−30Severely degraded
SSL certificate error−20TLS validation failed
Connection error−100 (score = 0)DNS failure, timeout, refused

The final score is clamped to max(0, min(100, score)).

SSL Deep Check

In ssl-deep mode, each HTTPS link undergoes additional TLS validation:

  1. The hostname is extracted from the link URL using urllib.parse
  2. A TLS socket connection is established to port 443 with a 10-second timeout
  3. The server certificate is retrieved via getpeercert() and parsed for subject, issuer, and validity
  4. Certificate validity is confirmed through Python's default SSL context verification
  5. If any SSL error occurs, the link's quality score is reduced by an additional −20 points

Error Handling

  • Individual link failures are captured per-result and do not block checking of remaining links
  • If the source page itself is unreachable, a single error row is returned for that page
  • Batch processing isolates failures per page — one unreachable page does not affect others
  • The summary row reports broken_links count for at-a-glance health assessment

Performance Considerations

  • Each link is checked sequentially with a 15-second timeout
  • An average page with 30–50 external links completes in 30–90 seconds
  • SSL deep mode adds approximately 1–2 seconds per HTTPS link due to TLS handshake overhead
  • Pages with very large numbers of links (100+) may take several minutes to complete
  • Batch mode processes pages sequentially; total time scales linearly with batch size

Interpreting Quality Scores

The quality score is a composite metric designed to give you immediate actionable insight:

Score RangeMeaningRecommended Action
80–100Healthy linkNo action needed
50–79Minor issuesReview redirects and timing
20–49Significant problemsInvestigate status codes, SSL, or slow responses
0–19CriticalFix or remove the link immediately

Scores below 50 generally warrant attention. A single 404 (score 30–40) or SSL error (score 0–20) on an important outbound link can harm user trust and SEO rankings.

Scheduling Regular Audits

For ongoing link health monitoring, schedule the actor to run weekly or monthly via Apify scheduler. Comparing summary statistics across runs helps identify:

  • Link rot trends — Is the number of broken links increasing over time?
  • Redirect creep — Are more links accumulating redirect hops as sites restructure?
  • SSL degradation — Are more HTTPS links failing certificate validation?

🎯 Use Cases

  • SEO audits — Identify and fix broken outbound links before they harm search rankings, degrade user experience, and waste link equity across your entire domain

  • Content quality assurance — Ensure all referenced sources, citations, affiliate links, and partner references remain valid and reachable across your entire content library

  • Site migration validation — Verify that all external links are preserved, correctly redirected, and functional after domain migration, CMS change, or URL structure overhaul

  • Competitor link profiling — Analyze competitor outbound link profiles and redirect patterns to inform your own linking strategy and identify broken opportunities

  • Affiliate link monitoring — Automatically check that all affiliate links return 200 status and lead to the correct destination, preventing revenue loss from broken affiliate paths

  • Documentation maintenance — Keep technical documentation links current by regularly scanning for broken external references in API docs, guides, and tutorials

  • Client reporting — Generate per-page link quality reports (via CSV output) for client-facing SEO audits and content quality reviews

❓ FAQ & Troubleshooting

Q: What counts as an external link? A: Any <a href> tag pointing to a different domain than the source URL. Same-domain links, anchor-only links (#section), and non-HTTP protocols are excluded.

Q: Why is a link showing status code 0? A: Status code 0 means the link was completely unreachable — DNS resolution failed, connection was refused, or the request timed out. The error field provides details.

Q: How long does a scan take? A: Total time depends on the number of links found and their responsiveness. Each link has a 15-second timeout. An average page with 30–50 links typically completes in 30–90 seconds in basic mode.

Q: What is the difference between basic and ssl-deep mode? A: basic mode checks HTTP status, response time, and redirect chains. ssl-deep mode adds TLS certificate validation (subject, issuer, validity) for every HTTPS link, with an additional −20 point score deduction for SSL errors. SSL deep check is a premium feature.

Q: Can I scan internal/relative links too? A: Currently, the actor focuses on external outbound links. Internal links on the same domain are excluded by design, as they typically require a different crawling strategy.

Q: What happens if the source page itself is unreachable? A: The actor returns a single error row for that page with the failure description and continues processing any remaining pages in the batch. The page's links are not analyzed.

Q: How are redirects counted in the score? A: Each redirect hop costs 5 points from the quality score. A link that goes through 3 redirects (301 → 302 → 200) loses 15 points just from redirects, plus any status code deduction from intermediate responses.

Q: Can I use this for regular monitoring? A: Yes. Schedule the actor via Apify scheduler to run weekly or monthly link quality audits. The consistent scoring algorithm lets you track link health trends over time.

Q: Why are some HTTPS links showing SSL errors? A: SSL errors can occur if the server uses a self-signed certificate, an expired certificate, a hostname mismatch, or an untrusted CA. The ssl_info.ssl_error field describes the specific issue.

Q: Does the actor follow redirects on the target links? A: Yes. The HTTP client is configured with follow_redirects=True, so all redirects are followed automatically. The full redirect chain is recorded in the redirect_chain field.

Q: Can I exclude certain domains from the scan? A: Currently, the actor does not support domain exclusion filters. All external links on the page are analyzed. To skip specific domains, you would need to filter results after the run.

Q: How are anchor-less links handled? A: Links without visible anchor text (e.g., image-only links where the <a> wraps an <img>) return an empty anchor_text field. The link URL is still checked and scored normally.

Q: What HTTP status codes are considered "broken"? A: All 4xx (client errors) and 5xx (server errors) are considered broken. This includes 403 Forbidden, 404 Not Found, 410 Gone, 429 Rate Limited, 500 Internal Server Error, 502 Bad Gateway, and 503 Service Unavailable.

Q: Can the actor handle relative URLs? A: Yes. Relative URLs are automatically resolved to absolute URLs using urllib.parse.urljoin with the source page URL as the base. Only absolute URLs are checked.


Check out other developer utilities by perryay:

ToolDescription
JSON StudioFormat, validate, transform, and diff JSON data with 8 operation modes
QR CraftGenerate high-quality QR codes in PNG or SVG, batch up to 50
UUID LabGenerate UUID v4/v7, NanoID, Short ID, and ULID identifiers
Domain IntelWHOIS, DNS, and SSL lookup for domain intelligence
Meta MateExtract Open Graph, Twitter Cards, and JSON-LD metadata
IP GeoMulti-provider IP geolocation with ISP detection
URL HealthCheck URL accessibility, redirects, and SSL health
PW ForgeGenerate secure passwords with entropy calculation
TZ MateConvert timezones and check DST offsets
Regex LabTest and debug regular expressions online
Brand Monitor LiteTrack brand mentions across multiple URLs
Link Quality AnalyzerDetect broken links and audit link quality
Mock Data GeneratorGenerate realistic test data for development
HTML to MarkdownConvert web pages or HTML to clean Markdown
SSL Cert InspectorDeep SSL/TLS certificate analysis with scoring