Pixelkiez Web design Berlin

Knowledge · deep dive on machine readability

How modern websites are built and delivered — and what machines see of that

React, Next.js, WordPress, Vue or Astro say something about how a website was built technically. They do yet say which content is present on the first request, what only appears through JavaScript and which controls a browser activates later. For findability and machine processing, what counts is the concrete delivery, never the framework name.

HTML, CSS, JavaScript, TypeScript.

Four terms that appear in every quote and describe three different roles: content, presentation, behaviour — plus a tool that never reaches the visitor at all.

  • HTML

    Describes content and structure.

    Headings, paragraphs, links, images, forms. The HTML standard describes how a document is turned into a tree of nodes as it is parsed — a browser sees that tree, and everything that follows works on it.

  • CSS

    Determines presentation and layout.

    CSS decides how content appears arranged, visible and operable. It replaces no structural meaning: something that merely looks like a heading is none.

  • JavaScript

    Adds behaviour and can change the document tree.

    Loading data, revealing elements, validating input — all normal for an interactive website. The dependency only becomes critical once commercially important information or routes exist solely along that path and the recipient in question fails to execute it.

  • TypeScript

    Is a development tool, never a delivery property.

    The official TypeScript documentation describes TypeScript as JavaScript with syntax for types and states that TypeScript code converts to JavaScript, which runs anywhere JavaScript runs. So what reaches the browser is JavaScript. “We use TypeScript” therefore says something about how a project is worked on and nothing about what an address delivers.

React, Vue, Svelte — and the frameworks above them.

Component libraries and frameworks help developers structure interfaces. They do yet determine what a single address ends up delivering: each of these tools documents several paths, and which one a given route uses is decided in the project, never in the name.

Tool What it is Delivery paths named by its own documentation
React Library for component-based interfaces Documents, among other things, attaching to HTML already generated on the server, and Server Components as an execution model of its own.
Next.js Framework built on React Separates server and client components in the App Router. By its own account, client components together with the server payload are prerendered to HTML; on the first load that HTML shows the page without interactivity at first.
Vue / Nuxt Component approach and the framework above it Nuxt documents client-side rendering, universal rendering with fully generated HTML, and hybrid rendering with separate rules per route.
Svelte / SvelteKit Component approach and the framework above it SvelteKit documents per-route options for prerendering, server rendering and client rendering. With server rendering switched off, the documentation says an empty shell is delivered.
Angular extensive application framework Documents per-request server rendering, build-time prerendering and client-side rendering as three selectable modes of its server route configuration.
Astro content-oriented framework By its own account renders components to plain HTML and CSS by default and strips out client-side JavaScript automatically; interactivity is requested explicitly per component.
WordPress / PHP content management system on a server-side stack Describes templates as the building blocks of the document structure; their markup is parsed and WordPress outputs the resulting HTML for the browser. Themes, plugins and headless setups shift that picture considerably.
The right-hand column reports the options each official documentation describes. It is no ranking and no rating: which path a particular page uses appears in none of these documents.

Four delivery paths.

The question is rarely “which rendering does this website use?” but “which part of this page arrives by which path?”. Four paths are enough to describe that.

  • Prerendered

    The page exists before anyone requests it.

    Core content is already present as HTML on retrieval. JavaScript can add controls afterwards, yet it never has to produce the content first. Angular calls this path build-time prerendering; SvelteKit lists it as a route option.

  • Generated on the server

    The page is produced on request — on the server.

    Here too a meaningful document can already reach the recipient. For this model Nuxt describes a fully rendered HTML page. So dynamically generated is a separate thing from client-dependent.

  • Generated in the browser

    The first request delivers a shell; the content follows.

    For this model Nuxt describes elements that only appear after the browser has downloaded and parsed the JavaScript; SvelteKit speaks of an empty shell when server rendering is switched off. For applications that can be the right call — yet for exactly this content it creates an additional dependency on the client path.

  • Mixed

    Different parts of the same website take different paths.

    The realistic default. Nuxt describes hybrid rendering explicitly as separate rules per route; Angular groups server, prerendered and client generation under one heading. A services page can deliver its text directly while a scheduler, filter or configurator only becomes interactive in the browser.

Scene 6 — from source code to the delivered website. The same building blocks yield four equally valid delivery paths: prerendered, generated on the server, generated in the browser and mixed. Only the chosen path decides what sits directly in the document, what the browser adds and which structure stays machine-usable. The dashed path marks the case where content only appears on the client — no judgement, just one more condition.

Hydration without jargon.

A term that comes up often in technical proposals and is rarely explained. It describes a single step: JavaScript attaches itself to HTML that is already there.

The React documentation describes hydration as attaching to existing HTML that was previously rendered in a server environment; React then takes over managing that part of the document. The Next.js documentation puts the same process the other way round: hydration is React's process for attaching event handlers to the DOM, to make the static HTML interactive. Nuxt describes the same step for its universal rendering and names dynamic interfaces and page transitions as the result.

In practice: the document can be visible and readable before anything is interactive. What happens afterwards is an addition, never a creation.

Already present before hydration

Company name, service description, location, explanatory text, internal links, a way to get in touch.

Additionally active after hydration

Date pickers, filters, expandable sections, live input validation, personal view states.

What that means for classic search engines.

Google describes its own handling of JavaScript pages in three separate steps — and states there itself why robust delivery remains a good idea anyway.

By Google's own account, a page with JavaScript passes through three phases: crawling, rendering and indexing. Google queues pages returning HTTP 200 for rendering unless a robots directive forbids indexing. According to the same source a page may sit in that queue for a few seconds, though it can take longer; only once resources allow does a headless Chromium render the page and execute the JavaScript. Google then uses the rendered HTML for indexing as well.

The same document carries the sentence that matters here: server-side or pre-rendering is still a great idea, because it makes the website faster for users and crawlers — and because some bots lack the ability to run JavaScript. That is a statement about the range of recipients, never about rankings.

What that means for AI retrieval.

Restraint is called for here. The providers document different accesses with different purposes — yet for only some of them how a page is processed.

In its own overview OpenAI lists several separate accesses: one for appearing in ChatGPT search results, one for training generative models, one for checking pages submitted as advertisements, and one for user-initiated fetches. For the last, the same page states explicitly that it serves no automatic crawling of the web and that robots.txt rules may fail to apply to such user-initiated actions. That alone refutes the idea of one single “AI view” of a website.

The opposite direction is neither refuted nor supported. A complete rendering specification per retrieval path is absent from these documents. That is why Pixelkiez avoids the sentence “AI crawlers skip JavaScript” — it asserts something across every provider and every access that none of the sources named here says. The reverse holds just as much: content sitting in the document tree after JavaScript has run is no proof that a given system finds it there.

What remains is a procedure rather than an assertion:

  • 01

    Name the provider and the access.

    Never “the AI”, but the specific access with its identifier. Only that makes it possible to open any documentation at all.

  • 02

    Check the current documentation and your own rules.

    What the provider describes today, and what robots.txt and any protective systems in front of the site actually allow.

  • 03

    Observe the actual retrieval.

    In the server log or with a repeatable test. An observation is bound to its date — it replaces no commitment and no commitment replaces it.

What that means for browser agents.

An agent has to act as well as read. That adds a second layer — and here too a single path is missing.

Some automation paths work through the semantics of the interface. Playwright documents addressing elements by role, label and accessible name, and describes its own checks for whether an element is visible, stable, enabled and able to receive events. The foundation for that — roles, states and accessible names — is described by the W3C accessibility group and was designed for assistive technology, never for agents.

Other paths see the page the way a person does: providers document systems that work through screenshots, mouse and keyboard. For a website that means semantic links, real buttons, labelled form fields, stable controls and an unambiguously readable success or error state form a robust foundation — a foundation, and no guarantee. Accessibility supports certain automation paths; it differs from agent compatibility.

What follows from that for the maturity stages of a website is covered at length in the article Agent readiness: can an AI use your website? — what concerns us here is only the link to delivery: whatever exists only after successful client execution exists for an agent only after that too.

Next.js: the same stack, two outcomes.

Next.js works well as a teaching example, because the same framework name allows two very different deliveries. Both pages below are “built with Next.js”.

Version A — content first

The first request already brings everything a person or a system needs in order to place the page. Client components then make the menu, filters and date picker operable.

h1 · Meier Electrical Engineering p · Commercial electrical installation in Berlin-Pankow address · Musterweg 4, 13187 Berlin a · Get in touch div · date picker follows in the browser

Version B — heavily client-dependent

For the relevant area the first request brings only a shell. Company, service and contact details appear only through client-side JavaScript and further data requests.

div · application shell div · loading script · application code — no company name in the document — no contact route in the document

The framework name fails to tell the two apart. What has to be checked is the specific route and how it actually behaves.

One precise point often gets lost here: the directive use client means something other than “there is no initial HTML”. The Next.js documentation describes it as a boundary between the server and client parts of the project and states that client components are prerendered to HTML together with the server payload; on the first load that HTML shows the page immediately, without interactivity at first. For navigations inside the running application the same source describes it differently: there, client components are rendered entirely on the client, without server-rendered HTML.

Seven check questions for your own page.

The practical decision reads differently from “modern framework or classic content management system?”. It reads: what does this address deliver, and what does that depend on?

  1. Are the name, service, location and core statements in the document that a direct request returns?
  2. Are internal links and contact routes real links — or areas that only a script makes operable?
  3. Does the project know and document which content appears only through JavaScript?
  4. Does the page stay comprehensible when part of it fails to load?
  5. Are controls semantically marked up and labelled, instead of merely styled to look like a button?
  6. Can an unambiguous success or error be read after an important action?
  7. Has the actual delivery been tested — or inferred from the framework name?

Sources and status.

The technical statements in this article rest on the original sources named alongside them. Where a source describes only the behaviour of its own system or product, the text marks that limit explicitly.

Google Search Central
Google describes the three phases of crawling, rendering and indexing, the queue ahead of rendering, and notes that some bots lack the ability to run JavaScript.
Understand the JavaScript SEO basics Retrieved 4 September 2026
React
The React documentation explains hydration as attaching React to HTML already generated on the server, and describes how React then takes over managing that part of the document.
React — hydrateRoot Retrieved 4 September 2026
Next.js
Next.js documents the split between server and client components, prerendering to HTML, the initially non-interactive first view and the different handling of later navigations.
Next.js — Server and Client Components Document dated 25 August 2026, retrieved 4 September 2026
Nuxt
Nuxt documents client-side rendering, universal rendering with fully generated HTML, and hybrid rendering with different rules per route.
Nuxt — Rendering Modes Retrieved 4 September 2026
SvelteKit
SvelteKit documents per-route options for prerendering, server rendering and client rendering, as well as the empty shell when server rendering is switched off.
SvelteKit — Page options Retrieved 4 September 2026
Angular
Angular describes server rendering, prerendering and client-side rendering as three selectable modes.
Angular — Server-side and hybrid rendering Retrieved 4 September 2026
Astro
Astro describes how components render to HTML and CSS by default, how client-side JavaScript is stripped out in the process, and how interactivity can be requested deliberately per component.
Astro — Islands architecture Retrieved 4 September 2026
TypeScript
The TypeScript project site describes TypeScript as JavaScript with syntax for types and explains that TypeScript code becomes JavaScript, which runs anywhere JavaScript runs.
TypeScript — official project site Retrieved 4 September 2026
WordPress
The WordPress documentation describes templates as part of the document structure and explains how their markup produces the HTML delivered to the browser.
WordPress — Templates Retrieved 4 September 2026
OpenAI
OpenAI distinguishes several kinds of access with different purposes and notes that robots.txt rules may fail to apply to user-initiated actions.
Overview of OpenAI Crawlers Retrieved 4 September 2026
Playwright
Playwright documents addressing elements by role, label and accessible name, as well as the checks that take place before an action.
Playwright — Locators Retrieved 4 September 2026
W3C — Web Accessibility Initiative
The W3C documentation defines roles, states and accessible names as semantics for assistive technology.
Accessible Names and Descriptions Retrieved 4 September 2026

Status of this article: 4 September 2026. Framework documentation changes with each version, and provider statements about retrieval paths can change without notice. Where this article describes a behaviour, it describes the behaviour documented on that date.

Unsure what your own website delivers?

That can only be looked up, never guessed. Tell us which address it concerns and we will look at it and reply with an assessment, rather than a machine-generated report.

Request a conversation

Related topics.

How AI really reads your website

The parent article: why the same address can arrive differently at different systems.

Agent readiness: can an AI use your website?

From reading to acting: what an agent additionally needs in order to get something done on a page.

SEO, GEO, AI Visibility: three terms, three questions

Where technical delivery ends and findability begins — and why one fails to deliver the other.

All topics at a glance

Quick contact

Let's talk about your project.

Reply within one business day.

Fields marked with * are required.

Either one is enough. No mandatory phone field.

Reply within 1 business day