Skip to content

The content/children script tags of the head (scripts[].children) are lost from the HTML after hydration #7104

@renomureza

Description

@renomureza

Which project does this relate to?

Router

Describe the bug

export const Route = createFileRoute('/test')({
  component: RouteComponent,
  head: () => ({
    scripts: [
      {
        async: true,
        src: `https://www.googletagmanager.com/gtag/js?id=ID`,
      },
      {
        // this is missing on hydrated HTML
        children: `window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'ID');`,
      },
    ],
  }),
});

Children code in scripts (<script>window.dataLayer...</script>) disappears after hydration on first page visit, reappears if navigating first to another page.

Your Example Website or App

https://stackblitz.com/edit/github-zpekad3w-lxs8xvjn?file=src%2Froutes%2Ftest%2Froute.tsx

Steps to Reproduce the Bug or Issue

  1. Build the attached StackBlitz site (npm run build)
  2. node .output/server/index.mjs
  3. navigate to the test page
  4. Refresh the page and check the HTML element in the console <script>window.dataLayer...</script> is missing.

Expected behavior

<script>window.dataLayer...</script> should not disappear after hydration

Screenshots or Videos

20260405-1621-11.0158618.mp4

Platform

  • Router / Start Version: 1.168.10 / 1.167.16
  • OS: Windows (WSL 2)
  • Browser: Chrome
  • Browser Version: 146.0.7680.178
  • Bundler: vite
  • Bundler Version: 8.0.3

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions