Skip to main content
GoodFirstPicks
DashboardIssuesReposLeaderboard

GoodFirstPicks by Leaveitblank © 2026

CreatorRequest a RepoPrivacy PolicyTerms of Service
Bug: [19.2.0] Streaming scripts injected in `onAllReady` in `renderToPipeableStream` and `prerenderToNodeStream` | GoodFirstPicks

Bug: [19.2.0] Streaming scripts injected in `onAllReady` in `renderToPipeableStream` and `prerenderToNodeStream`

facebook/react 8 comments 1mo ago
View on GitHub
mediumopenScope: somewhat clearSkill match: maybeReactJavaScriptTypeScript

Why this is a good first issue

Behavior change in streaming logic affects SEO use cases.

AI Summary

The issue reports that React 19.2.0 injects streaming scripts and hidden HTML elements even when using onAllReady for crawlers, potentially impacting SEO. The fix would require modifying the streaming behavior for this specific case, but there's active discussion among maintainers about whether this is actually problematic. The scope is somewhat clear but involves core streaming logic changes.

Issue Description

When using renderToPipeableStream with onAllReady, while also using lazy loading components with React.lazy, React is injecting streaming scripts and hidden HTML elements into the resulting HTML.

React recommends using onAllReady for crawlers, like SEO crawlers, logically, but this new behaviour injects scripts and hidden HTML elements, impacting negatively in SEO scores.

References:

  • https://prerender.io/blog/hidden-content-that-hurts-seo/
  • https://wolf-of-seo.de/en/what-is/hidden-content-2/

This same issue also occurs with the prerenderToNodeStream API

React version: 19.2.0 React DOM version: 19.2.0

Steps To Reproduce

Show steps to reproduce 1. Create a component to lazy load later in our app. Be sure to bloat it with attributes like data attributes
// Button.js
import { createElement } from "react";

const Button = () =>
  createElement(
    "button",
    {
      type: "button",
      "data-test-button-value1": "some-value-for-test",
      "data-test-button-value2": "some-value-for-test",
      "data-test-button-value3": "some-value-for-test",
      "data-test-button-value4": "some-value-for-test",
      "data-test-button-value5": "some-value-for-test",
      "data-test-button-value6": "some-value-for-test",
      "data-test-button-value7": "some-value-for-test",
      "data-test-button-value8": "some-value-for-test",
      "data-test-button-value9": "some-value-for-test",
      "data-test-button-value10": "some-value-for-test",
      "data-test-button-value11": "some-value-for-test",
      "data-te

GitHub Labels

Status: Unconfirmed

Want to work on this?

Claim this issue to let others know you're working on it. You'll earn 10 points when you complete it!

Risk Flags

  • SEO impact concerns
  • behavior change in 19.2.0
  • maintainer discussion ongoing
Loading labels...

Details

Points10 pts
Difficultymedium
Scopesomewhat clear
Skill Matchmaybe
Test Focusedno