1
6
20
Request URL: http://yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html
Final URL: https://www.yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html
Final URL status: 200
Expected: 200
Value: 200
The page should return HTTP 200. Redirects (3xx) are followed before this check, so anything other than 200 here is a real error.
Redirects: 2
Expected: 0-1
Count: 2
Chain:
1. 301 -- http://yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html2. 301 -- https://yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.htmlHow many redirect hops were followed to reach the final page, and the chain itself (each hop's URL and status code). 0-1 hops is normal (a single https or www. redirect not a problem). 2 hops is still acceptable, but worth a look. 3 or more hops wastes search engine crawl budget, diluting link equity passed through the chain; Google has said it will only follow up to 5 redirect hops per crawl attempt, so long chains risk not being followed to the destination at all.
Redirect time: 596ms
Time to first byte including redirects: 1218ms
Expected: ≤800ms
TTFB: 1218ms
Time to First Byte, Google's own published metric (web.dev): the time between navigation start and the first byte of the response arriving. Good is 800ms or less, needs improvement is 800–1800ms, and poor is over 1800ms. Measured from our server in North America.
Full response time: 1426ms
Total time from the start of the final request (after redirects) to the full response body being read — ttfbMs plus body download time. Reported for context but not graded: unlike TTFB, there is no single authoritative threshold for full response time the way Google publishes one for TTFB.
"Date": Tue, 14 Jul 2026 23:10:56 GMT
"link": </_nca/_next/static/media/6563b172ef52338e-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_nca/_next/static/media/7553561d3efb1daf-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_nca/_next/static/css/f647ddee5b27c6d7.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/c28189b1906ac9b1.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/47a4af7404681a3d.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/10f0388c5af31331.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/a3e6f890d360a3ca.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/e388c648ba6d95b1.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/e81d810896431320.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/3d9829b30dcf0aba.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/e23cfac571e4148f.css?dpl=sha-a84a21c>; rel=preload; as="style"
Value: </_nca/_next/static/media/6563b172ef52338e-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_nca/_next/static/media/7553561d3efb1daf-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_nca/_next/static/css/f647ddee5b27c6d7.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/c28189b1906ac9b1.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/47a4af7404681a3d.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/10f0388c5af31331.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/a3e6f890d360a3ca.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/e388c648ba6d95b1.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/e81d810896431320.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/3d9829b30dcf0aba.css?dpl=sha-a84a21c>; rel=preload; as="style", </_nca/_next/static/css/e23cfac571e4148f.css?dpl=sha-a84a21c>; rel=preload; as="style"
The Link response header can declare a canonical URL outside the HTML using rel="canonical", e.g. Link:
"X-Robots-Tag"
Expected: no noindex directive
Value: (not set)
A server-level robots directive sent as an HTTP header. If it contains noindex, search engines will not index the page even if the HTML and robots meta tag say otherwise.
"Content-Type"
Expected: text/html
Value: text/html; charset=utf-8
An SEO audit target should be served as text/html. PDFs, JSON, or other content types are not crawled the same way.
"Cache-Control"
Expected: present
Value: max-age=0, private
Tells browsers and intermediaries how long to cache the response. Missing cache-control means clients fall back to heuristic defaults, which can hurt repeat-visit performance.
"Strict-Transport-Security"
Expected: present
Present: true
HSTS header tells browsers to only connect to this domain over HTTPS. A security best practice and a minor ranking signal.
robots.txt allows our user agent
Expected: allowed
Allowed: true
User agent: minifetch/1.0 (+https://minifetch.com/site-owner-faq)
The site's robots.txt must allow our user agent. If disallowed, the audit returns 502 and is not charged.
Served over https://
Expected: https
Scheme: https
SEO-relevant pages should be served over HTTPS. Search engines penalize http pages, browsers show 'Not Secure' warnings, and mixed content protections only activate over HTTPS. This finding looks at the URL we actually fetched (post-redirect), so an audit of http://example.com that redirects to https://example.com passes.
no http:// resources on this https:// page
Expected: 0
Count: 1
Resources loaded over http://:
http://informeddelivery.usps.comOn an HTTPS page, any resource loaded over http:// is mixed content. Browsers block active mixed content (scripts, iframes, stylesheets) and warn on passive (images, video). The resources array lists the first 20 offending URLs so you know what to fix; the count and omitted fields tell you the full total.
title tag
Expected: 30-60 chars
Value: Which states had the most dog attacks on USPS mail carriers? See list
Length: 69 chars
The clickable headline shown in Google search results. 30–60 characters is the healthy range, and the upper end (50–60) uses the available width best. Over ~60 characters Google truncates the title and may drop important words. A short title is not broken — it renders fine — but it leaves room to add keywords or communicate the page value, so we flag it as an opportunity rather than an error.
description tag
Expected: 70-155 chars
Value: A new report from the USPS, released ahead of National Dog Bite Awareness Week, highlighted the issue and urged owners to exercise caution.
Length: 139 chars
Often used as the snippet under the title in search results. 70–155 characters is the healthy range. Over ~155 characters Google truncates the snippet; under 70 it still renders fine but leaves room to add benefits, USPs, or a call to action — so a short description is flagged as a missed opportunity, not an error. Google may rewrite the description regardless, but a strong one still influences click-through.
canonical tag present
Expected: present
Value: https://www.usatoday.com/story/news/nation/2026/06/01/highest-dog-attacks-usps-mail-carriers-state-city-ranking/90355663007/
Source: html
Malformed (unparseable): false
Conflict between HTML and Link header: false
Tells search engines which URL is the master version when duplicate content exists across multiple URLs. Can appear in the HTML or the Link response header. If both are present they must agree (a disagreement is a fail), and the canonical must be a parseable URL (an unparseable one is a fail, flagged by malformed: true). If no canonical is declared, search engines self-canonicalize the page to its own URL, which is fine unless the page has duplicate URLs the audit cannot see. So a missing canonical is surfaced as information, not graded.
canonical points to this page
Expected: true
Value: false
Canonical URL: https://www.usatoday.com/story/news/nation/2026/06/01/highest-dog-attacks-usps-mail-carriers-state-city-ranking/90355663007/
Cross-domain: true
Whether the declared canonical points back at the URL we fetched: value true means it points at this page, false means it points elsewhere. When the canonical is missing or unparseable there's nothing to compare, so this is informational (a note, no status); the canonical finding above carries the detail. If it points elsewhere (false), Google likely treats this page as a duplicate, consolidates ranking signals to the canonical target, and usually shows that URL instead — though a cross-domain canonical is a strong hint Google can still override. Pointing elsewhere is usually deliberate (syndicated content crediting the original), so it's a warn, not a fail. The crossDomain field flags an off-domain canonical as informational, doesn't change status.
canonical tag count
Expected: ≤1
Count: 1
Canonical URLs found:
https://www.usatoday.com/story/news/nation/2026/06/01/highest-dog-attacks-usps-mail-carriers-state-city-ranking/90355663007/How many tags are on the page, separately from whether the declared canonical (above) is valid. 0 or 1 is a pass. More than one is a fail regardless of whether the extra tags agree on the URL — search engines may ignore canonicalization on the page altogether rather than guess which one you meant. canonicalUrls lists every raw href found, in document order.
robots meta tag
Expected: no noindex directive
Value: index, follow, max-image-preview:large
The robots meta tag controls whether search engines index this page and follow its links. If absent, Google assumes "index, follow". A noindex value keeps the page out of search results; often intentional (admin pages, staging environments, internal search results) which is why this surfaces as a warn rather than a fail. Same logic as canonicalMatchesSelf: page is opting out of indexing, we surface it but don't presume to grade it.
lang attribute on <html> tag
Expected: present
Value: en-US
The lang attribute on the top-level <html> tag tells search engines and screen readers what language the page is in. Helps with accessibility and international SEO.
viewport tag
Expected: present
Value: width=device-width, initial-scale=1
The viewport meta tag tells mobile browsers how to size the page. Pages without it are flagged as not mobile-friendly, which is a ranking factor.
hreflang tags: no hreflang tags declared
Structured data blocks: 2
Expected: ≥1 item
Item count (top-level): 2
Item types: NewsArticle, VideoObject
Nested types: Person, ImageObject, Organization
JSON-LD structured data makes pages eligible for rich results in search (recipe cards, product listings, review stars, etc). itemCount is the number of top-level items Google can evaluate. @graph arrays are expanded so each node counts as its own item, the way Google reads them. types lists the distinct top-level item types; nestedTypes lists supporting entity types found inside those items (an author Person, a logo ImageObject, breadcrumb ListItems) and is informational, since Google treats them as properties of their parent item rather than standalone items. At least one typed item makes the page eligible.
Exactly one <h1>
Expected: 1
Count: 1
Search engines treat the h1 as the page's primary topic. Multiple h1s dilute the signal; zero h1s leave the page without a clear subject.
Headings hierarchy
[ + ] [ + ]Expected: no skips
Skips found: (none)
Heading levels should descend without skipping (h2 → h3, not h2 → h4). Skipped levels confuse screen readers and weaken the document's logical structure.
Word count: 2926
Visible text word count after stripping HTML tags, scripts, and styles. Under ~300 words is the classic thin-content threshold — but context matters: a 150-word product page with price, specs, and a buy button is not thin content. Use alongside content/HtmlRatio for a fuller picture.
Content/HTML ratio: 2.3%
Ratio of visible text bytes to total HTML bytes, as a percentage. A very low ratio (e.g. under 10%) suggests the page is mostly markup and boilerplate with little actual content. Complements wordCount — a 150-word page at 40% text is different from a 150-word page at 2% text.
Total images on page: 62
Images missing alt text
Expected: 0
Count: 41
Alt text describes images for screen readers and shows up when images fail to load. Search engines also use it to understand image content. Empty alt="" is counted as missing here — decorative images legitimately use empty alt, but on SEO-targeted pages this is rare and worth flagging.
Images missing width and/or height
Expected: 0
Count: 17
Width and height attributes prevent Cumulative Layout Shift (CLS), a Core Web Vitals metric and a ranking factor. Without them, the page jumps around as images load.
Total links: 206 (internal: 92, external: 114)
In-page anchor links: 1
nofollow links: 5
Top internal link targets: 10 unique
Internal pages this page links to most. Counts dedupe query strings and fragments so /pricing?ref=x and /pricing#plans both count as /pricing. Anchor text variants are listed when more than one was used.
https://www.yahoo.com/ — 8× ("News" ×3, "USEnglish" ×2, "Return to Homepage", "Yahoo!")https://www.yahoo.com/news/ — 5× ("Today's news" ×2, "The 360")https://www.yahoo.com/news/us/ — 2× ("US" ×2)https://www.yahoo.com/news/politics/ — 2× ("Politics" ×2)https://www.yahoo.com/news/world/ — 2× ("World" ×2)https://www.yahoo.com/issues/climate-change/ — 2× ("Climate change" ×2)https://www.yahoo.com/news/science/ — 2× ("Science" ×2)https://www.yahoo.com/guides/originals/ — 2× ("Originals" ×2)https://www.yahoo.com/newsletters/ — 2× ("Newsletters" ×2)https://www.yahoo.com/games — 2× ("Games" ×2)Top external domains: 40 unique
External domains this page links out to most.
sports.yahoo.com — 26×finance.yahoo.com — 19×shopping.yahoo.com — 6×legal.yahoo.com — 3×weather.yahoo.com — 2×health.yahoo.com — 2×travel.yahoo.com — 2×autos.yahoo.com — 2×football.fantasysports.yahoo.com — 2×scout.yahoo.com — 2×Links with empty text
[ + ] [ + ]Expected: 0
Count: 3
Counts links with no visible text, no wrapped image, and no aria-label attribute. Screen readers and search engines have nothing to announce or index for these. Icon and SVG links with aria-label are accessible and excluded from this count. Empty link text is also a Google ranking concern because Google uses anchor text to understand what a link points to.
Open Graph tags
[ + ] [ + ]Expected: og:title, og:description, og:image, og:type
Present: og:title, og:description, og:image, og:type
Missing: (none)
Open Graph tags control how the page renders when shared on Facebook, LinkedIn, Slack, and most other platforms. og:title, og:description, og:image, and og:type are the minimum required set.
og:url points to this page
Expected: true
Value: true
og:url: https://www.yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html
Cross-domain: false
Whether og:url points back at the URL we fetched: value true means it points at this page, false means elsewhere. Social platforms use og:url as the 'canonical URL for sharing'; it determines which URL accumulates engagement (likes, shares) and is shown as the destination in the share card. Pointing elsewhere (false) is a warn, often intentional for syndicated content. When og:url is absent this is informational (a note). Platforms fall back to the shared URL, a non-issue. A present-but-unparseable og:url is a fail (a note, no boolean value).
Twitter Card tags
[ + ] [ + ]Expected: twitter:card, twitter:title, twitter:image
Present: twitter:card, twitter:title, twitter:image
Covered by Open Graph fallback: (none)
Missing: (none)
Twitter Card tags control rendering on X / Twitter. twitter:card, twitter:title, and twitter:image are the ideal set, but X falls back to Open Graph when a twitter tag is absent — twitter:title to og:title, twitter:image to og:image, and the card itself renders off og:image. This audit credits that fallback: a twitter tag is only counted as missing when its Open Graph equivalent is also absent, so a page with solid Open Graph tags passes even with no twitter-specific tags. The presentViaOpenGraphFallback field lists which fields are covered by Open Graph rather than declared directly.
{
"success": true,
"results": [
{
"data": {
"summary": {
"pass": 20,
"warn": 6,
"fail": 1
},
"requestUrl": "http://yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html",
"url": "https://www.yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html",
"responseStatusCode": {
"status": "pass",
"expected": 200,
"value": 200
},
"redirects": {
"status": "pass",
"expected": "0-1",
"count": 2,
"chain": [
{
"order": 1,
"url": "http://yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html",
"statusCode": 301
},
{
"order": 2,
"url": "https://yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html",
"statusCode": 301
}
],
"note": "two redirect hops — acceptable, but worth consolidating if avoidable"
},
"performance": {
"ttfb": {
"status": "warn",
"expected": "≤800ms",
"redirectTimeMs": 596,
"ttfbMs": 1218
},
"responseTimeMs": 1426
},
"responseHeaders": {
"date": {
"value": "Tue, 14 Jul 2026 23:10:56 GMT"
},
"link": {
"value": "</_nca/_next/static/media/6563b172ef52338e-s.p.woff2>; rel=preload; as=\"font\"; crossorigin=\"\"; type=\"font/woff2\", </_nca/_next/static/media/7553561d3efb1daf-s.p.woff2>; rel=preload; as=\"font\"; crossorigin=\"\"; type=\"font/woff2\", </_nca/_next/static/css/f647ddee5b27c6d7.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/c28189b1906ac9b1.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/47a4af7404681a3d.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/10f0388c5af31331.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/a3e6f890d360a3ca.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/e388c648ba6d95b1.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/e81d810896431320.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/3d9829b30dcf0aba.css?dpl=sha-a84a21c>; rel=preload; as=\"style\", </_nca/_next/static/css/e23cfac571e4148f.css?dpl=sha-a84a21c>; rel=preload; as=\"style\""
},
"x-robots-tag": {
"status": "pass",
"expected": "no noindex directive",
"value": null
},
"content-type": {
"status": "pass",
"expected": "text/html",
"value": "text/html; charset=utf-8"
},
"cache-control": {
"status": "pass",
"expected": "present",
"value": "max-age=0, private"
},
"strict-transport-security": {
"status": "pass",
"expected": "present",
"present": true
}
},
"compliance": {
"robotsTxt": {
"status": "pass",
"expected": "allowed",
"allowed": true,
"userAgent": "minifetch/1.0 (+https://minifetch.com/site-owner-faq)"
},
"https": {
"status": "pass",
"expected": "https",
"value": "https"
},
"mixedContent": {
"status": "fail",
"expected": 0,
"count": 1,
"resources": [
"http://informeddelivery.usps.com"
],
"omitted": 0
}
},
"metadata": {
"title": {
"status": "warn",
"expected": "30-60",
"value": "Which states had the most dog attacks on USPS mail carriers? See list",
"length": 69
},
"description": {
"status": "pass",
"expected": "70-155",
"value": "A new report from the USPS, released ahead of National Dog Bite Awareness Week, highlighted the issue and urged owners to exercise caution.",
"length": 139
},
"canonical": {
"status": "pass",
"expected": "present",
"value": "https://www.usatoday.com/story/news/nation/2026/06/01/highest-dog-attacks-usps-mail-carriers-state-city-ranking/90355663007/",
"source": "html",
"malformed": false,
"conflictWithLinkHeader": false
},
"canonicalMatchesSelf": {
"status": "warn",
"expected": true,
"value": false,
"canonicalUrl": "https://www.usatoday.com/story/news/nation/2026/06/01/highest-dog-attacks-usps-mail-carriers-state-city-ranking/90355663007/",
"crossDomain": true
},
"canonicalTagCount": {
"status": "pass",
"expected": "≤1",
"count": 1,
"canonicalUrls": [
"https://www.usatoday.com/story/news/nation/2026/06/01/highest-dog-attacks-usps-mail-carriers-state-city-ranking/90355663007/"
]
},
"robots": {
"status": "pass",
"expected": "no noindex directive",
"value": "index, follow, max-image-preview:large"
},
"lang": {
"status": "pass",
"expected": "present",
"value": "en-US"
},
"viewport": {
"status": "pass",
"expected": "present",
"value": "width=device-width, initial-scale=1"
}
},
"hreflang": {
"note": "no hreflang tags declared",
"count": 0
},
"jsonld": {
"status": "pass",
"expected": "≥1 item",
"itemCount": 2,
"types": [
"NewsArticle",
"VideoObject"
],
"nestedTypes": [
"Person",
"ImageObject",
"Organization"
]
},
"headings": {
"h1": {
"status": "pass",
"expected": 1,
"count": 1
},
"hierarchy": {
"status": "pass",
"expected": "no skips",
"skips": []
}
},
"content": {
"wordCount": 2926,
"contentHtmlRatio": 2.3
},
"images": {
"total": 62,
"missingAlt": {
"status": "warn",
"expected": 0,
"count": 41
},
"missingDimensions": {
"status": "warn",
"expected": 0,
"count": 17
}
},
"links": {
"total": 206,
"anchorCount": 1,
"nofollowCount": 5,
"internal": {
"count": 92,
"uniqueTargets": 10,
"topInternalTargets": [
{
"url": "https://www.yahoo.com/",
"count": 8,
"anchorTexts": [
{
"text": "News",
"count": 3
},
{
"text": "USEnglish",
"count": 2
},
{
"text": "Return to Homepage",
"count": 1
},
{
"text": "Yahoo!",
"count": 1
}
]
},
{
"url": "https://www.yahoo.com/news/",
"count": 5,
"anchorTexts": [
{
"text": "Today's news",
"count": 2
},
{
"text": "The 360",
"count": 1
}
]
},
{
"url": "https://www.yahoo.com/news/us/",
"count": 2,
"anchorTexts": [
{
"text": "US",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/news/politics/",
"count": 2,
"anchorTexts": [
{
"text": "Politics",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/news/world/",
"count": 2,
"anchorTexts": [
{
"text": "World",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/issues/climate-change/",
"count": 2,
"anchorTexts": [
{
"text": "Climate change",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/news/science/",
"count": 2,
"anchorTexts": [
{
"text": "Science",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/guides/originals/",
"count": 2,
"anchorTexts": [
{
"text": "Originals",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/newsletters/",
"count": 2,
"anchorTexts": [
{
"text": "Newsletters",
"count": 2
}
]
},
{
"url": "https://www.yahoo.com/games",
"count": 2,
"anchorTexts": [
{
"text": "Games",
"count": 2
}
]
}
]
},
"external": {
"count": 114,
"uniqueDomains": 40,
"topExternalDomains": [
{
"domain": "sports.yahoo.com",
"count": 26
},
{
"domain": "finance.yahoo.com",
"count": 19
},
{
"domain": "shopping.yahoo.com",
"count": 6
},
{
"domain": "legal.yahoo.com",
"count": 3
},
{
"domain": "weather.yahoo.com",
"count": 2
},
{
"domain": "health.yahoo.com",
"count": 2
},
{
"domain": "travel.yahoo.com",
"count": 2
},
{
"domain": "autos.yahoo.com",
"count": 2
},
{
"domain": "football.fantasysports.yahoo.com",
"count": 2
},
{
"domain": "scout.yahoo.com",
"count": 2
}
]
},
"emptyLinkText": {
"status": "warn",
"expected": 0,
"count": 3
}
},
"social": {
"openGraph": {
"status": "pass",
"expected": "og:title, og:description, og:image, og:type",
"present": [
"og:title",
"og:description",
"og:image",
"og:type"
],
"missing": []
},
"openGraphUrlMatchesSelf": {
"status": "pass",
"expected": true,
"value": true,
"ogUrl": "https://www.yahoo.com/news/us/articles/states-had-most-dog-attacks-202320752.html",
"crossDomain": false
},
"twitterCard": {
"status": "pass",
"expected": "twitter:card, twitter:title, twitter:image",
"present": [
"twitter:card",
"twitter:title",
"twitter:image"
],
"presentViaOpenGraphFallback": [],
"missing": []
}
},
"minifetchCache": {
"hit": false,
"cachedAt": "2026-07-14T23:10:56.891Z",
"expiresAt": "2026-07-14T23:12:56.891Z"
}
}
}
]
}
Technical SEO audit result for yahoo.com — pass/warn/fail checks all major technical SEO signals. Run it on your own URLs.
Full API Docs for /run/seo-page-audit → Fetch another URL →