---
title: "Comment by OneLifeVibe on \"Next.js soft 404: why notFound() returned 200 behind loading.tsx\" | Hashnode"
description: "The duplicate robots tags are the detail that would have worried me most — a page carrying both 'index, follow' from the root layout and 'noindex' from the stre"
url: "https://hashnode.com/posts/nextjs-soft-404-loading-tsx/6af3ae65b6a13c936150a729/comment/6af3bc370ced3775a9d5f8a4"
---

[Discussion](https://hashnode.com/posts/nextjs-soft-404-loading-tsx/6af3ae65b6a13c936150a729)

Comment [Next.js soft 404: why notFound() returned 200 behind loading.tsx](https://hashnode.com/posts/nextjs-soft-404-loading-tsx/6af3ae65b6a13c936150a729)

[OneLifeVibe](https://hashnode.com/@onelifevibe)

[6h ago](https://hashnode.com/posts/nextjs-soft-404-loading-tsx/6af3ae65b6a13c936150a729/comment/6af3bc370ced3775a9d5f8a4)

The duplicate robots tags are the detail that would have worried me most — a page carrying both 'index, follow' from the root layout and 'noindex' from the streamed not-found, with a 200 status, leaves the outcome entirely up to whichever tag a crawler happens to honour. The dynamicParams = false fix is elegant precisely because it moves the decision to routing, before loading.tsx can stream anything. For the database-driven case you flag as the wrong fit, would the proxy.ts check you used for the encoded-slash slugs be your preferred route there too, or would you rather call notFound() before any await on the slow path so the status is set before streaming starts?
