The question is not whether search engines can execute JavaScript. Google can, and says so. The question is what it costs you in reliability when they have to, and which other systems reading your site cannot.
For a clinic this is not an abstract engineering debate. It decides whether an address appears in an index, whether a treatment description can be quoted by an answer engine, and whether a set of internal links exists from the point of view of a crawler.
The two-pass model
Google's JavaScript SEO documentation describes the process: the URL is fetched, the HTML is parsed, and if the page requires JavaScript to produce its content the URL is placed in a render queue. Rendering happens later, using a headless browser, and the rendered output is then indexed.
Three consequences follow, and they are all reliability consequences rather than penalties.
- The delay between parse and render is not published, not guaranteed, and not the same for every site. It is an unbounded wait on content you needed indexed.
- Links that only appear after render are discovered late, which delays the crawling of everything they point to. Discovery cascades, so the delay compounds down the tree.
- If the render fails, because a third-party script times out or an API call is blocked, the content simply is not there. The page indexes as whatever the HTML contained, which on a client-rendered page is often an empty shell.
Everything else that reads your site
Google is one reader. Bing, the crawlers that supply answer engines, link preview generators, accessibility tools, archiving services and any number of internal systems also fetch clinic pages, and most of them do not execute JavaScript at all or do so inconsistently. A page that is fine in Google and empty everywhere else is a page with one distribution channel.
This is the argument that matters most in 2026. Discovery has widened beyond one search engine, and the widest common denominator across every system that reads the web is the HTML the server sends.
Disable JavaScript in your browser and load your own treatment page. What remains is approximately what a non-rendering crawler receives. If the treatment description, the address, the opening hours and the navigation links are gone, that is the version of your clinic that a large part of the web sees.
The patterns that cause trouble on clinic sites
A handful of implementations produce nearly all the problems.
- Client-rendered page builders. Some visual builders output an empty container and construct the page in the browser. The content exists only after render.
- Tabbed or accordion content loaded on demand. If the content of a tab is fetched when the tab is clicked, it is not in the HTML. Content behind an accordion that is present in the HTML and merely hidden with CSS is fine.
- Booking widgets that replace the page. Third-party booking systems sometimes take over the whole route, leaving no server-rendered content at that URL.
- Review widgets. Reviews injected by a third-party script are not your content from an indexing perspective, however good they look.
- Menus built in the browser. The single most damaging one, because it removes the internal link graph rather than a paragraph.
What to do about it
The decision is architectural. Serve the substantive content from the server, whether that is a traditional server-rendered content management system, static generation, or server-side rendering in a JavaScript framework. Then use client-side code for what it is genuinely good at: interaction, filtering, booking flows and progressive enhancement of content that already exists.
For a clinic on a mainstream content management system this usually means checking the page builder output rather than rewriting anything. Many builders can be configured to output real HTML, and the fault is a setting rather than the platform.
Organic web results
PARTIAL CONTROL- The HTML a crawler receives, including the rendered DOM
- Titles, headings, body copy, internal links and canonical tags
- Structured data that describes what the page is about
- Whether the page is fast enough to be usable when it arrives
- Which query the page is shown against
- Whether a result gets a rich result treatment on any given day
- The other nine results and the features that push them down the page
- How often the index is refreshed for a given URL
- Search Console URL Inspection on the live URL, not the cached one
- site: and inurl: probes to confirm the page is indexed at all
- A fetch with JavaScript disabled to see what exists before render
- The Performance report filtered to that page, by query, over 28 days
Soft navigation and URL discipline
Single-page applications frequently change what is displayed without changing the URL, or change the URL with a fragment rather than a path. Neither produces a distinct document to index. If a state is worth finding in search, it needs its own URL that returns the content on a direct request, with a proper status code and a canonical tag. This applies to filtered treatment lists, location selectors and multi-step booking flows alike.
Rendering cost is also a speed cost
The same architecture that delays indexing also delays the patient. Client rendering pushes work onto the device, and clinic traffic is predominantly mobile. Large JavaScript bundles are a known contributor to poor Interaction to Next Paint and to slow Largest Contentful Paint, both defined in the Web Vitals documentation. The indexing argument and the conversion argument point the same way, which is unusual and worth using when making the case internally.
Verifying the fix
- Fetch the URL with a plain HTTP client and read the response body. Not the browser view: the raw response.
- Confirm the key content, the address block and the internal links are present in that body.
- Use URL Inspection in Search Console and compare the crawled HTML with the rendered screenshot.
- Check a second, non-Google reader, for example a link preview generator, and see what it extracts.
- Re-run after any theme, builder or plugin update, because these regressions are almost always introduced by an update rather than by a decision.
A defensible position
The position that holds up over time is simple to state and easy to enforce at review: if losing a piece of content would hurt, it goes in the HTML. Everything else can render whenever it likes. That rule requires no prediction about how any specific crawler will behave next year, which is exactly what makes it durable.
