Urgent.News

What's breaking now, across thousands of outlets.

Tech

Your Inertia SSR server is down and your site still returns 200

The site looked fine. Every page loaded, every blog post rendered, the styling was right, nothing in the logs. What was wrong was that Search Console had crawled two pages out of the entire sitemap, and the rest sat in Discovered – currently not indexed . Dozens of posts, almost nothing indexed, and no broken page anywhere to point at. The cause turned out to be a process that had stopped…

The site appeared to function normally, with all pages loading correctly and the styling intact. However, a problem lay beneath the surface. Search Console had only crawled two pages out of the entire sitemap, leaving the rest marked as 'Discovered - currently not indexed'. Dozens of posts were sitting in limbo, with no broken pages to point to.

The issue stemmed from a process that had ceased running, not crashing but simply stopping. The consequence was that only hidden clients noticed the problem, while the majority were oblivious.

The stack in play included Laravel 12, Inertia.js, and React 19, with server-side rendering enabled. The process 'inertia:start-ssr' initiated a small Node server that loaded the built server bundle and rendered the page. On each request, Laravel submitted the page object to this Node server, which in turn returned the HTML for the page.

The '@inertia' Blade directive then printed this HTML within a div with id 'app'. When the Node process failed to respond, Laravel defaulted to client-side rendering, generating an empty div with id 'app' containing the page props, and sending the response with a 200 status code. This invisible failure evaded those who checked for it, but affected those without JavaScript execution, including search crawlers, link unfurlers, and HTTP libraries.

The problem was not immediately detectable as there were no signs in the site's behavior, uptime checks, status codes, or screenshots. It was only in the response body, where the content was essentially empty, making it unsuitable for indexing. The failure occurred due to the Node process stopping and Laravel failing the request, but not loudly.

It could have been caused by the process not being supervised, the server bundle throwing an error at render time, or a stale bundle being used. The only way to detect this issue was to act as the crawler, fetching the page, removing the scripts, and counting the remaining characters.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

More from Saturday 19 September →