How to Tell if a Website Is Built with Next.js
Next.js is one of the most popular React frameworks, powering sites ranging from small startups to large consumer brands. Knowing how to detect a Next.js website is useful for developers studying real-world implementations, teams doing competitive research, and anyone evaluating a site’s technical stack. Here’s how to identify Next.js reliably — using the exact signals shown below, verified live against real sites.
Why Next.js Is Worth Detecting
Identifying that a site runs on Next.js tells you several things at once:
- The team has in-house (or contracted) React development capability
- Performance is a priority — Next.js has strong SSR/SSG and caching support
- The site is likely hosted on Vercel, AWS, or similar infrastructure capable of running Node.js
- Their SEO strategy likely relies on server-side rendering or static generation rather than a client-only SPA
Method 1: AIWebsiteDetector.com
Scan any URL at AIWebsiteDetector.com for instant Next.js detection. The tool checks HTTP headers, JavaScript bundle patterns, and routing signatures that identify Next.js specifically — no manual inspection required.
Method 2: Check HTTP Response Headers
Next.js can add a distinctive header when the framework’s default header isn’t disabled:
x-powered-by: Next.js
To check HTTP headers yourself:
- Open DevTools (F12)
- Go to the Network tab
- Reload the page
- Click on the first request (the main document)
- Look in the Response Headers section
The x-powered-by: Next.js header appears on many Next.js deployments, but plenty of production sites disable it on purpose for security (poweredByHeader: false in next.config.js) — so its absence doesn’t rule Next.js out. If the site is on Vercel, you’ll typically also see:
server: Vercel x-vercel-id: [deployment-id]
A more modern, App-Router-specific signal worth checking too:
x-nextjs-cache: HIT | MISS | STALE
This header shows up on pages served from Next.js’s Full Route Cache (static or incrementally regenerated pages in the App Router). We confirmed it live on Starbucks’ site while researching this article — a real, current example of this exact signal in production.
Method 3: Look for __NEXT_DATA__
Every server-rendered Next.js page (Pages Router) injects a script tag containing the page’s initial data, e.g. <script id="__NEXT_DATA__" type="application/json">. Search the page source for __NEXT_DATA__ — this is one of the most reliable Next.js fingerprints because it’s fundamental to how Next.js hydrates the client-side React app with server-rendered data. It appears on virtually every SSR page built with the Pages Router.
App Router pages (Next.js 13+) don’t use __NEXT_DATA__ the same way — they instead stream React Server Component payloads, detectable via the _rsc query parameter some requests carry and a Vary response header that references rsc. This is a more advanced, technical signal than the methods above, but it’s the one to look for specifically on modern App Router sites that don’t show __NEXT_DATA__.
Method 4: Check JavaScript Bundle Paths
Next.js generates JavaScript bundles under a distinctive path:
/_next/static/...
This path is unique to Next.js — no other major framework uses this exact structure. Search the page source for /_next/; if it appears, the site is built with Next.js. Even for statically exported Next.js sites (no Node.js server at runtime), this path structure is preserved in the built output.
Method 5: Check for Next.js Routing Patterns
Next.js has characteristic URL and routing behavior:
- API routes:
/api/[endpoint]— Next.js API routes follow this pattern - Dynamic routes: URLs like
/blog/[slug]with a consistent structure - Default 404 page: Next.js’s built-in 404 page has a recognizable structure in its HTML
Trying a common path like /api/health and getting a JSON response back is a reasonable (though not definitive) signal of an active Next.js API route.
Method 6: Check for next/image Patterns
Next.js’s built-in image optimization component serves images through a distinctive URL pattern:
/_next/image?url=[encoded-url]&w=1920&q=75
You’ll also often see a data-nimg attribute on the <img> tag itself (e.g. data-nimg="1"), which next/image adds. The /_next/image URL pattern specifically is a definitive signal — it’s not used by any other framework.
Comparison of Next.js Detection Signals
| Signal | Reliability | Where to Find It |
|---|---|---|
/_next/static/ paths |
Very High | Page source |
__NEXT_DATA__ script tag |
Very High (Pages Router) | Page source |
/_next/image URLs |
High | Page source |
x-powered-by: Next.js header |
High (when not disabled) | Response headers |
x-nextjs-cache header |
High (App Router, cached pages) | Response headers |
| Vercel hosting headers | Medium (not all Next.js sites use Vercel) | Response headers |
Next.js vs Nuxt.js vs Other Frameworks
Next.js (React) is often confused with similar frameworks:
- Nuxt.js (Vue-based): uses
/_nuxt/paths instead of/_next/ - Gatsby (React, static-first): uses
page-data.jsonfiles rather than__NEXT_DATA__ - Remix (React): different routing conventions, no
__NEXT_DATA__or/_next/paths - SvelteKit: uses
/_app/paths
The /_next/ prefix is unique to Next.js among major frameworks, which makes it the most reliable single signal to check.
Real Sites Confirmed Running Next.js
Rather than repeat secondhand claims, we checked these sites directly while writing this article and confirmed live Next.js signals (__NEXT_DATA__, /_next/static/, or the x-powered-by/x-nextjs-cache headers) on each one:
- Notion (notion.so) — full signal set, hosted on Vercel
- Nike (nike.com)
- Starbucks (starbucks.com) — a live example of the
x-nextjs-cacheheader - Ticketmaster
- Hulu
Technology choices change over time, and large sites often run different frameworks across different sections — the most reliable way to know what a specific site is using right now is to check it directly, either manually or with a scanner like AIWebsiteDetector.
Frequently Asked Questions
Does Next.js always leave detectable traces?
Almost always. The /_next/static/ path in JavaScript bundle references appears in virtually every Next.js deployment, because it’s how Next.js serves its built assets. Static export mode removes some signals (like server-only headers) but preserves the bundle path structure.
How can I tell which Next.js version a site is running?
The buildId field inside __NEXT_DATA__ is unique per build but doesn’t encode the framework version. You can sometimes spot a version number in JavaScript source maps or comments, but this isn’t reliably accessible from the outside.
Is Next.js the same as React?
No. React is a JavaScript library for building UIs. Next.js is a framework built on top of React that adds server-side rendering, file-based routing, API routes, and build optimizations. All Next.js apps use React, but not all React apps use Next.js.
What’s the difference between Next.js and Vercel?
Vercel is a hosting platform built by the same team that maintains Next.js, and the integration between the two is especially seamless. But Next.js is just the framework — it can be deployed anywhere Node.js runs, not only on Vercel.
Can Next.js be used for e-commerce?
Yes. Next.js paired with a headless commerce backend (for example Shopify’s Storefront API) is a common pattern for high-performance e-commerce sites: Next.js handles the frontend while the commerce platform handles checkout, inventory, and orders.
Scan Sites Instantly
Use AIWebsiteDetector.com to detect Next.js sites along with WordPress, Webflow, Shopify, Framer, and dozens of other technologies. The scanner is built for developers and researchers who want quick, reliable technology identification without manual source code inspection.