SOFIA: Here’s what’s actually happening, and it’s a split-screen. The toy store pulls a discontinued product, leaves a friendly “sorry, this toy isn’t available” page, and the visitor reads that as a dead end. Meanwhile the server hands the crawler a 200, which means “here’s a perfectly good page.” Same URL, two opposite stories.

ELENA: And the 200 is the lie that costs you. That code is a promise, it tells the crawler keep this, recrawl it, it’s a real page. So the store is telling search engines to lovingly revisit hundreds of empty pages forever.

SOFIA: As if they were live products.

ELENA: Exactly, and they pile up in the index, thin and contentless, dragging on the site’s quality signal. The page says “gone” to humans and “great, keep me” to machines.

HANNAH: Careful, though, because “make it return gone” is about to become the one rule everyone repeats, and it’s wrong for half these pages.

ELENA: Half?

HANNAH: There are two situations hiding under “out of stock” and they need opposite codes. Permanently discontinued, not coming back, return a gone or not-found code and let it drop out, and if it’s truly never returning, the gone code is the cleaner signal, it tells search engines this is final rather than maybe-missing. But temporarily out of stock, restocking next month, that’s a real page that will have inventory again. Return a not-found there and you push search engines to drop a page you actually want kept. So “just 404 them all” trades one signal error for another.

MARCUS: And there’s a third case you’re both skipping, which is the one that annoys me because it’s the most useful. Discontinued product, but there’s a clear successor, the new model, the replacement set. Returning gone there is just leaving value on the floor. Redirect it to the successor, the visitor lands somewhere they actually want, and the old page’s signal carries forward.

HANNAH: So it’s not a fork, it’s three branches.

MARCUS: Three branches, and somebody has to make the call per product, gone, coming-back, or replaced. There is no single code that’s correct, which is exactly why the store reached for one and got it wrong.

NOAH: What gets me is how this happened, because nobody was careless. Someone built that friendly out-of-stock message to be kind to visitors. Good instinct. And in being kind at the content layer, they never asked what the server was saying at the protocol layer.

SOFIA: The kindness and the status code never met.

NOAH: Right. The tell is always content and code disagreeing, and it almost always means a human-facing decision got made with nobody checking the machine-facing consequence. It’s not a blunder, it’s a blind spot between two layers.

THEO: Then the rule is Marcus’s three branches, stated as a mapping. For every discontinued or out-of-stock page, decide which it is. Permanently gone, return the gone code, let it leave the index. Temporarily out, stay 200 with honest “back in stock soon” messaging, because Hannah’s right that it’s a real page. Has a successor, redirect to it. The code follows the product’s real state. Stop picking one code for three different realities.

AIKO: And Theo, that decision cannot live in someone’s head, because this is a toy catalog, things go in and out of stock constantly and seasonally.

THEO: Which is why I said state, not manual choice.

AIKO: Then wire it to inventory. Product flagged permanently discontinued fires the gone code or the successor redirect, temporarily-out holds the 200 with the restock note, automatically, off the product’s status. The day it depends on someone remembering to set the code when they pull an item is the day it rots, because in a busy season nobody remembers. And Search Console’s Pages report has a “soft 404” category that lists exactly which URLs Google is flagging, so you monitor that to catch any that slip through the inventory rule rather than waiting to notice a ranking dip.

SOFIA: So the close is honest, but honest is three different things. Gone for the discontinued, 200 for the coming-back, redirect for the replaced. Once the code matches the product, the split-screen collapses into one truth.

DANA: Then that’s the call, and it’s the three branches Marcus drew and Hannah split apart. We don’t leave discontinued pages on a 200 with empty content, because that soft 404 begs search engines to cherish dead pages, wasting crawl and thinning the quality signal. But we don’t blanket-404 either, because the temporarily-out pages are real and coming back, and the replaced ones should hand their visitor and their signal to the successor. So each page maps to its real state, gone returns gone, out-of-stock stays 200 with a restock note, replaced redirects, and we drive all of it off inventory status so it’s automatic. The friendly message was the right instinct for the visitor. Letting it whisper “success” to the crawler was the mistake, and the fix is making the page tell both of them the same thing.

MARCUS: One lazy catch-all becomes the three honest answers the catalog actually needed.

DANA: A status code is a promise to the crawler. Make each pulled product keep the promise that matches where it really went, and the soft 404 dissolves on its own.