That error basically means that the variable you are expecting to be json isn't.
It is either empty or missing.
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
When i use inertia ssr, i cannot see my css and i get this error.
what can i do to fix this
ssr.ts
// import "./bootstrap";
import "vue-skeletor/dist/vue-skeletor.css";
import "../css/NProgress.css";
import { createSSRApp, h } from "vue";
import type { DefineComponent } from "vue";
import { trail } from "momentum-trail";
import { Skeletor } from "vue-skeletor";
import AppHead from "./Components/AppHead.vue";
import routes from "../routes/js/routing.json";
import createServer from "@inertiajs/vue3/server";
import { renderToString } from "@vue/server-renderer";
import Pagination from "./Components/Pagination.vue";
import { createInertiaApp, Head, Link } from "@inertiajs/vue3";
import PortalVue from "portal-vue";
import "../css/style.css";
if (import.meta.hot) {
import.meta.hot.accept();
}
import VueTippy from "vue-tippy";
import "tippy.js/dist/tippy-bundle.umd.min.js";
import "@popperjs/core/dist/umd/popper.min.js";
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
const appName = import.meta.env?.["VITE_APP_NAME"] || "Laravel";
createServer((page: Page) =>
createInertiaApp({
page,
render: renderToString,
progress: { includeCSS: true, showSpinner: false },
title: (title) => `${title} - ${appName}`,
resolve: name => {
const pages = import.meta.glob<DefineComponent>('./Pages/**/*.vue', { eager: false })
return pages[`./Pages/${name}.vue`]()
},
setup({ App, props, plugin }) {
return createSSRApp({ render: () => h(App, props) })
.use(trail, {
routes,
url: props.initialPage.url,
})
.use(plugin)
.use(VueTippy)
.use(PortalVue)
.component("Skeletor", Skeletor)
.component("Pagination", Pagination)
.component("AppHead", AppHead)
.component("Head", Head)
.component("Link", Link);
},
}).then((app) => {
const appRender = app;
appRender.body = appRender.body.replace(/data-page=".*?"/, "");
return appRender;
}),
);
app.ts
import "./bootstrap";
import "vue-skeletor/dist/vue-skeletor.css";
import "../css/NProgress.css";
import { Skeletor } from "vue-skeletor";
import { createSSRApp, h } from "vue";
import type { DefineComponent } from "vue";
import { createInertiaApp, Head, Link } from "@inertiajs/vue3";
import Pagination from "./Components/Pagination.vue";
import AppHead from "./Components/AppHead.vue";
import { trail } from "momentum-trail";
import routes from "../routes/js/routing.json";
import PortalVue from "portal-vue";
if (import.meta.hot) {
import.meta.hot.accept();
}
import VueTippy from "vue-tippy";
import "tippy.js/dist/tippy-bundle.umd.min.js";
import "@popperjs/core/dist/umd/popper.min.js";
import "tippy.js/dist/tippy.css";
import "tippy.js/themes/light.css";
import { resolvePageComponent } from "laravel-vite-plugin/inertia-helpers";
const appName = import.meta.env?.["VITE_APP_NAME"] || "Laravel";
createInertiaApp({
progress: { includeCSS: true, showSpinner: false },
title: (title) => `${title} - ${appName}`,
resolve: name => {
const pages = import.meta.glob<DefineComponent>('./Pages/**/*.vue', { eager: false })
return pages[`./Pages/${name}.vue`]()
},
setup({ el, App, props, plugin }) {
createSSRApp({ render: () => h(App, props) })
.use(plugin)
.use(trail, { routes })
.use(VueTippy)
.use(PortalVue)
.component("Skeletor", Skeletor)
.component("Pagination", Pagination)
.component("AppHead", AppHead)
.component("Head", Head)
.component("Link", Link)
.mount(el);
},
}).then(() => {
document.getElementById("app").removeAttribute("data-page");
});
@azbx Just to confirm this, I spun up an SSR site using Breeze:
composer create-project laravel/laravel vue-ssr && cd vue-ssr
composer require laravel/breeze && php artisan breeze:install vue --ssr
php artisan inertia:start-ssr
And everything worked perfectly as you can see in this screenshot.
I then added your data-page clearing code snippet to ssr.js and recompiled the assets. Can you guess the result?
Uncaught (in promise) SyntaxError: "undefined" is not valid JSON
at JSON.parse (<anonymous>)
at Nb (app-DFS2u8Ov.js:92:37344)
at app-DFS2u8Ov.js:92:56471
Please or to participate in this conversation.