---
title: "Discussion on \"My SPA served every URL the same 3,780 bytes, and Google believed it\" | Hashnode"
description: "Discussion on \"My SPA served every URL the same 3,780 bytes, and Google believed it\". Every URL served an identical shell before JS ran. What fixed it, plus the data-rh trap that shipped two meta descriptions on every page."
url: "https://hashnode.com/posts/my-spa-served-every-url-the-same-3-780-bytes-and-google-believed-it/6a8d695a9cc89ce11e87b33f"
---

[Feed](https://hashnode.com/feed) /

Discussion

# [My SPA served every URL the same 3,780 bytes, and Google believed it](https://thedolceway.hashnode.dev/my-spa-served-every-url-the-same-3-780-bytes-and-google-believed-it?utm_source=hashnode&utm_medium=feed)

Every URL served an identical shell before JS ran. What fixed it, plus the data-rh trap that shipped two meta descriptions on every page.

Aug 25 · 5 min read · thedolceway.hashnode.dev  
Read the article

-   [#seo](https://hashnode.com/tag/seo)
-   [#webdev](https://hashnode.com/tag/webdev)
-   [#reactjs](https://hashnode.com/tag/reactjs)

## Written by

[Moustafa Tarabya](https://hashnode.com/@thedolceway)

@thedolceway · Helsinki, Finland

  
[View profile](https://hashnode.com/@thedolceway)

Building CVBooster and a portfolio of iOS apps. I write about the traps I hit shipping them.

Solo founder at DT Nova. I build CVBooster (cvbooster.ai), a resume builder you can use free without an account, and a portfolio of iOS apps. I write about the unglamorous parts of shipping: prerendering an SPA for search, deploys that succeed into the wrong place, and the numbers in your own marketing copy that quietly go wrong.

## Responses 1

Markdown supported · ⌘↵ to post

[Andrew](https://hashnode.com/@rizzdev)

[Aug 26](https://hashnode.com/posts/my-spa-served-every-url-the-same-3-780-bytes-and-google-believed-it/6a8d695a9cc89ce11e87b33f/comment/6a8e637421c0d85a8be38a7e)

I like how you derive the first impression from the 3,780-byte fetch rather than treating render as the moment Google decides what the URL is. That shell is hashed before any render queue slot exists, so 741 identical bodies give the scheduler nothing to rank-order. Unique heads later change the title while the body stays the SPA shell, so recrawl still spends scarce render budget on pages that look like copies of each other. A green build never sees that crawler GET, which is how the 3,780-byte invariant ships as success.
