Skip to main content
Back to BlogDomain Guides

How to Check Domain Age (and Why the 365.25 Divisor Is the One Number That Matters)

Check when a domain was first registered — and learn why domain age comes from WHOIS creation_date, why the age formula divides by 365.25 not 365, why CORS blocks browser-based WHOIS lookups, why the 5-year 'established' badge is a heuristic not a Google spec, and why an aged domain with a spam history is worse than a new domain.

The Toolbox TeamAugust 14, 20267 min read

The problem: you're evaluating a domain and don't know if it's 2 months or 20 years old

You're considering buying an aged domain, or you're auditing a competitor, or you're checking whether a site that claims "established 1998" actually registered its domain in 1998. You go to a WHOIS lookup tool, type the domain, and get back a wall of text with dates in three different formats, two of which say "creation date" and disagree by six months. Which one is real? The honest move is a tool that fetches the WHOIS record, extracts the creation_date field, converts it to a JavaScript Date, divides the millisecond difference by the milliseconds in a year, and tells you the age in years and months — with the registrar, the expiration date, and the last-updated date alongside it so you can cross-check.

Fastest path

Open the Domain Age Checker, type the domain, click Check Age.

Input:   example.com

 Created:     August 14, 1995
 Age:         31 years
 Updated:     September 13, 2024
 Expires:     August 13, 2025
 Registrar:   RESERVED-Internet Assigned Numbers Authority
 Badge:        Established domain (5+ years)

 If both WHOIS APIs are CORS-blocked:
   WHOIS API unavailable from browser
   Links to DomainTools, ICANN Lookup, Who.is

The tool cleaned the input (example.com), fetched the WHOIS record from whoxy.com, parsed the creation_date field, computed (now - created) / (1000 × 60 × 60 × 24 × 365.25) = 31 years, and rendered the registration details. The rest of this guide is why the 365.25 divisor matters, why CORS blocks browser WHOIS lookups, why the 5-year badge is a heuristic, and why an aged domain with a spam history is worse than a new domain.

The substance: one WHOIS fetch, one date subtraction, one division

The age formula and the 365.25 divisor

The tool's calcAge function does the age computation in three lines:

const diffMs = now.getTime() - then.getTime();
const years = diffMs / (1000 * 60 * 60 * 24 * 365.25);
if (years < 1) {
  const months = Math.floor(years * 12);
  return { years: Math.floor(years), text: `${months} month${months !== 1 ? 's' : ''}` };
}
const y = Math.floor(years);
return { years: y, text: `${y} year${y !== 1 ? 's' : ''}` };

The divisor is 1000 × 60 × 60 × 24 × 365.25 — milliseconds per year, where a year is 365.25 days. The 0.25 accounts for leap years: every 4 years, February has 29 days, so the average year is 365 + 1/4 = 365.25 days. Over a 28-year domain age, that's 7 leap days (7 × 86,400,000 ms = 604,800,000 ms) that a naive 365-day divisor would miscount — making the domain appear about 7 days younger than it is. For a domain registered on February 29, 2000 (a leap day), a 365-day divisor would be off by a full day every 4 years.

The Gregorian calendar's true average year is 365.2425 days (97 leap years per 400-year cycle — century years skip leap status unless divisible by 400). The tool uses 365.25, not 365.2425. The difference over 20 years is 0.0015 days (about 2 minutes). For domain age, that's irrelevant — nobody needs to know their domain is 20 years and 2 minutes old. The 365.25 divisor is the right precision for the question.

WHOIS data and the string-or-array shape

The tool's WhoisData interface types creation_date as string | string[]. Some WHOIS servers return a single date string; others return an array of dates (usually when a domain has been transferred between registrars and each transfer created a new record). The tool handles both:

const created = formatDate(data.creation_date);
const { years, text } = calcAge(Array.isArray(data.creation_date) ? data.creation_date[0] ?? null : data.creation_date ?? null);

It takes the first element of the array — the earliest creation date in the record. This is the right choice because the first creation date is the original registration, not a subsequent transfer. A domain registered in 2005, transferred in 2010 and 2015, might have creation_date: ["2005-03-14T00:00:00Z", "2010-08-22T00:00:00Z", "2015-11-03T00:00:00Z"]. The tool uses 2005 — the real age — not 2015.

The formatDate function uses new Date(dateStr).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }), rendering as "March 14, 2005." ISO 8601 strings (with the T and Z) parse correctly. Some WHOIS servers return non-ISO formats like "14-Mar-2005" or "2005/03/14" — the try/catch in formatDate falls back to the raw string if new Date() can't parse it. This is why some domains show a formatted date and others show the raw WHOIS string.

CORS and the browser-based WHOIS limitation

The tool tries two WHOIS APIs in sequence: whoxy.com (primary) and whoisjsonapi.com (fallback). If both fail — which happens when the APIs block cross-origin browser requests via CORS policy — the tool renders a yellow warning with three external links: DomainTools WHOIS, ICANN Lookup, and Who.is.

CORS (Cross-Origin Resource Sharing) is the browser security mechanism that blocks JavaScript from reading responses from a different origin unless the server explicitly allows it. WHOIS APIs are often rate-limited and don't send Access-Control-Allow-Origin: * headers, so the browser blocks the response. The tool's two-API fallback is an attempt to find at least one CORS-friendly endpoint; when both fail, the honest move is to tell the user and link to server-side tools that can do the lookup.

This is why the tool has a corsBlocked state — it distinguishes "the domain doesn't exist" (no creation date in a successful response) from "the browser couldn't reach the API" (CORS error on both endpoints). The two failure modes need different UX: a missing domain shows "no data," a CORS block shows "try these external tools."

Domain cleaning before the API call

The tool cleans the input before fetching:

const cleaned = domain.trim()
  .replace(/^https?:\/\//, '')   // strip protocol
  .replace(/\/.*$/, '')           // strip path
  .replace(/^www\./, '');          // strip www.

https://www.example.com/blog becomes example.com. This matters because WHOIS APIs want the bare domain — www.example.com is a subdomain and has no WHOIS record of its own (the WHOIS record is for the registered domain example.com). Passing a URL with a path would either fail or return the wrong record. The cleaning is three regexes that handle the common cases: protocol, path, and www subdomain. It doesn't handle port numbers, query strings, or fragments — but those are rare in domain-age lookups.

The 5-year "Established domain" badge

The tool renders a green "Established domain" badge when ageYears >= 5:

{result.ageYears !== null && result.ageYears >= 5 && (
  <div className="mt-3 flex items-center justify-center gap-1 text-sm text-green-600">
    <CheckCircle2 className="h-4 w-4" />
    Established domain
  </div>
)}

The 5-year threshold is a heuristic, not a Google specification. Google has never published a domain-age threshold for any ranking signal. John Mueller (Google Search Advocate) has stated publicly that domain age is not a direct ranking factor — older domains tend to rank better because they've had more time to accumulate content, backlinks, and user trust, not because the age itself is a signal. The 5-year badge is a visual shortcut for "this domain has been around long enough to have a history," not a guarantee of SEO performance.

The badge is a prompt to investigate further, not a verdict. A 10-year-old domain that has been parking-page-only for 9 of those years has less SEO value than a 1-year-old domain with 50 high-quality pages and 20 strong backlinks. The age is a starting signal, not a conclusion.

Aged domains and the spam-history trap

The tool's AGE_INFO section warns: "Aged domains can jumpstart an SEO strategy if they have clean history, no manual penalties, and relevant backlink profiles. Always check backlink history before purchasing." This is the real advice, and it's worth expanding.

An aged domain with a clean history and relevant backlinks can save years of link-building. An aged domain with a spam history (thin content, link buying, pharma SEO, manual penalties) is worse than a new domain — the age doesn't help, and the toxic backlink profile actively hurts. Google's manual penalty actions sometimes persist through ownership transfers; a domain that was penalized for spam in 2018 and let expire in 2020 may still carry the penalty when re-registered in 2025. Before buying an aged domain, check its backlink profile in a tool like Ahrefs, Moz, or Semrush, and check the Wayback Machine for what the site looked like historically. A domain that was a legitimate business for 10 years and then a spam farm for 2 is a trap — the age says 12 years, the useful history says 10.

Gotchas

  • The 365.25 divisor accounts for leap years. A 365-day divisor miscounts by 1 day every 4 years. Over a 20-year-old domain, that's 5 days of error. The tool uses 365.25, which is accurate to within 2 minutes over 20 years. The Gregorian 365.2425 is more precise but irrelevant for domain age.
  • WHOIS creation_date can be an array. Some registries return multiple dates (original registration + subsequent transfers). The tool takes the first (earliest) — the original registration. If you're reading raw WHOIS text, look for the earliest date labeled "creation date" or "registration date," not the most recent.
  • CORS blocks browser-based WHOIS lookups. The tool tries two APIs; if both fail, it links to DomainTools, ICANN, and Who.is. This is a browser limitation, not a tool limitation — server-side WHOIS clients don't have CORS restrictions. If you need bulk lookups, run a server-side script with a WHOIS library.
  • The 5-year "Established" badge is a heuristic. Google has not published a domain-age threshold. John Mueller says domain age is not a direct ranking factor. The badge is a visual prompt, not a ranking verdict. A 1-year-old domain with strong content and backlinks beats a 10-year-old parking page.
  • Aged domains with spam history are worse than new domains. Age doesn't override a toxic backlink profile or a manual penalty. Check the backlink history (Ahrefs, Moz, Semrush) and the Wayback Machine before buying. A domain that was legitimate for 8 years and a spam farm for 2 is a trap.
  • Domain expiration resets the history. If a domain expires and is re-registered by someone else, the SEO history is lost — the new owner starts from zero. The tool's AGE_INFO mentions auto-renewal. If you own a domain with accumulated SEO value, auto-renewal is not optional.
  • Some WHOIS dates don't parse. The tool's formatDate uses new Date(dateStr). ISO 8601 strings parse correctly; non-standard formats like "14-Mar-2005" may fail. The try/catch falls back to the raw string. If you see a raw date string instead of a formatted one, the WHOIS server returned a non-ISO format.
  • WHOIS privacy redacts the registrant, not the dates. Privacy services (Domains by Proxy, WhoisGuard) replace the registrant name and email with the privacy service's info. The creation_date, expiration_date, and registrar are still public — that's what the tool reads. Privacy doesn't hide the age.
  • The domain cleaning strips protocol, path, and www — not ports or fragments. https://www.example.com:8080/blog#section becomes example.com:8080 (the port survives). WHOIS APIs may reject the port. Strip it manually if you're pasting a URL with a port.
  • .test and .local domains have no WHOIS record. The tool queries real WHOIS APIs that only serve ICANN-registrable TLDs. A .test domain (reserved by ICANN for testing) or a .local domain (mDNS) will return no data — that's not a tool failure, it's a domain that isn't in the WHOIS system.

Summary

  • Domain age comes from the WHOIS creation_date field. The tool fetches WHOIS data from whoxy.com (primary) and whoisjsonapi.com (fallback), extracts the creation date, and computes age as (now - created) / (1000 × 60 × 60 × 24 × 365.25). The 365.25 divisor accounts for leap years — a 365-day divisor miscounts by 1 day every 4 years.
  • The 365.25 divisor is the one number that matters. It's the average year length including leap years (365 + 1/4). The Gregorian 365.2425 is more precise but irrelevant for domain age — the difference is 2 minutes over 20 years. The tool uses 365.25, which is the right precision for the question.
  • WHOIS creation_date can be a string or an array. Some registries return multiple dates (original + transfers). The tool takes the first (earliest) — the original registration. If you're reading raw WHOIS, look for the earliest "creation date," not the most recent.
  • CORS blocks browser-based WHOIS lookups. WHOIS APIs often don't send CORS headers, so the browser blocks the response. The tool tries two APIs; if both fail, it links to DomainTools, ICANN, and Who.is. Server-side WHOIS clients don't have this limitation.
  • The 5-year "Established" badge is a heuristic, not a Google spec. Google's John Mueller says domain age is not a direct ranking factor. Older domains rank better because they've accumulated more content and links, not because age itself is a signal. The badge is a prompt to investigate, not a verdict.
  • An aged domain with spam history is worse than a new domain. Check the backlink profile (Ahrefs, Moz, Semrush) and the Wayback Machine before buying. A domain that was legitimate for 8 years and a spam farm for 2 is a trap — the age says 10, the useful history says 8.
  • Check age at the Domain Age Checker; for the raw WHOIS record use WHOIS Lookup, for certificate expiration use SSL Checker, and for registration status use Domain Availability Checker.