b2KIT

Website Technology Detector

Detect technologies used by a website: frameworks, CMS, analytics, CDN, hosting, and server software from client-side signals.

Tested tool guide Tested browser tools Checked August 16, 2026

What Website Technology Detector does, with a checked example

Paste a page's HTML source, or point this tool at a URL, and it scans the markup - meta tags, script and link paths, inline JS globals, cookie names - and any response headers it can read, matching them against a reference list of known technology fingerprints for CMS, JS frameworks, analytics, CDN, and hosting. Most people expect it to profile any site from a URL alone; in practice a live cross-origin fetch is limited by the browser's CORS rules, so header-based signals like Server or X-Powered-By are frequently unavailable, and pasting the full page source gives noticeably more complete results.

Worked example

A concrete input and expected output from the current implementation.

Input

<meta name="generator" content="WordPress 6.5.2" />
<link rel="https://api.w.org/" href="https://example.com/wp-json/" />
<script src="https://example.com/wp-content/themes/twentytwentyfour/js/script.js"></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-ABC123"></script>

Expected output

CMS: WordPress 6.5.2 (meta generator tag)
Theme: twentytwentyfour (wp-content/themes path)
REST API: WordPress REST API exposed (wp-json link)
Analytics: Google Analytics 4 (gtag.js, ID G-ABC123)
Server / CDN / Hosting: not detected

Each line comes from one distinct string in the pasted markup; no HTTP headers were included in this input, so the server, CDN, and hosting fields have nothing to match against and stay empty.

How the result is produced

1

Signature matching against markup

The tool searches the supplied HTML for known fingerprint strings - meta generator tags, characteristic script or stylesheet paths (wp-content, cdn.shopify.com, __NEXT_DATA__), inline JS globals, and cookie names - and reports a match wherever one of these signatures appears verbatim, along with the snippet that triggered it.

2

CORS limits on live URL fetches

If you give it a URL instead of pasted source, it runs a browser fetch to retrieve the page, which is subject to the same-origin policy: unless the target server sends permissive CORS headers, the browser withholds most response headers and may block the body entirely, so server- and CDN-identifying headers are often missing for third-party domains.

Good uses

  • checking what CMS, theme, or page builder a prospective client's or competitor's site runs before a sales or dev-quote call
  • confirming an analytics or tag-manager snippet actually shipped by pasting your own live page source after a deploy
  • spot-checking whether a site is on a shared CDN or CMS platform before deciding how to approach a migration or integration

Limits and checks

  • fetching a live URL can return far fewer signals than pasting full page source, because CORS blocks cross-origin header reads and sometimes the body itself
  • minified, bundled, or server-rendered-then-hydrated JS often hides the literal strings the tool looks for, so modern build pipelines can under-report the frameworks actually in use
  • a generator meta tag or version string can be edited, spoofed, or left over from a migration, so a match reflects what the markup declares, not verified runtime behavior

Common questions

Why does scanning a URL show fewer results than pasting the page source directly?

Because the browser enforces CORS on cross-origin fetches. Unless the target site opts in with permissive Access-Control-Allow-Origin headers, the tool can't read most response headers and may not get the body at all, so header-based clues like Server or CDN headers are often missing when you supply just a URL.

Can it tell me the exact web server software and version, like nginx 1.25 or IIS 10?

Only if the Server header is present in a response the browser actually let it read, which requires either a same-origin fetch or a CORS-permissive target. Many hosts and CDNs strip or generalize this header for security, so it's frequently unavailable even when everything else works.

References and verification

The example and behavioral notes were checked against the browser implementation. Standards and primary references below define the relevant format, formula, or platform behavior.

Related Tools