{"id":2222,"date":"2026-04-07T09:24:00","date_gmt":"2026-04-07T08:24:00","guid":{"rendered":"https:\/\/jalvo.eu\/bledy-soft-404-strony-z-kodem-200\/"},"modified":"2026-09-25T03:46:36","modified_gmt":"2026-09-25T02:46:36","slug":"bledy-soft-404-strony-z-kodem-200","status":"publish","type":"post","link":"https:\/\/jalvo.eu\/pl\/bledy-soft-404-strony-z-kodem-200\/","title":{"rendered":"B\u0142\u0119dy soft 404: dlaczego Google usuwa strony zwracaj\u0105ce 200"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">B\u0142\u0105d soft 404 pojawia si\u0119, gdy adres URL zwraca 200 OK, ale jego tre\u015b\u0107 wygl\u0105da jak komunikat o b\u0142\u0119dzie, pusta strona albo brakuj\u0105cy zas\u00f3b. Google traktuje tak\u0105 stron\u0119 jak nieistniej\u0105c\u0105 i nie dodaje jej do indeksu. Widzisz takie adresy w Search Console i podejrzewasz, \u017ce Tw\u00f3j serwer \u017ar\u00f3d\u0142owy (albo stoj\u0105ce przed nim proxy) serwuje strony b\u0142\u0119d\u00f3w z kodem sukcesu? Z tego poradnika dowiesz si\u0119, jak Google je klasyfikuje, sk\u0105d zwykle si\u0119 bior\u0105, jak potwierdzi\u0107 prawdziwy kod odpowiedzi i jak naprawi\u0107 go na serwerze \u017ar\u00f3d\u0142owym.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Co w\u0142a\u015bciwie oznacza soft 404 w Search Console?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Search Console oznacza stron\u0119 jako soft 404, gdy serwer zwraca kod sukcesu, a sama strona wygl\u0105da jak b\u0142\u0105d, pusta strona albo komunikat o b\u0142\u0119dzie. Kr\u00f3tkie przypomnienie: <strong>kod statusu<\/strong> to liczba, kt\u00f3r\u0105 serwer wysy\u0142a przed tre\u015bci\u0105 strony, a roboty odczytuj\u0105 go, zanim w og\u00f3le dotr\u0105 do zawarto\u015bci. Wed\u0142ug <a href=\"https:\/\/developers.google.com\/crawling\/docs\/troubleshooting\/http-status-codes\" rel=\"nofollow noopener\" target=\"_blank\">przewodnika Google po kodach statusu HTTP<\/a> odpowied\u017a 200 trafia dalej do procesu indeksowania, ale to nie znaczy, \u017ce strona zostanie zaindeksowana. Serwer m\u00f3wi wi\u0119c &#8222;sukces&#8221;, a strona m\u00f3wi &#8222;brak&#8221;. Google wierzy stronie. I j\u0105 usuwa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dlaczego strona b\u0142\u0119du z kodem 200 szkodzi bardziej ni\u017c prawdziwe 404<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prawdziwy kod 4xx jest jednoznaczny. M\u00f3wi Google, \u017ce tre\u015b\u0107 nie istnieje, i tyle. Strona b\u0142\u0119du serwowana z kodem 200 marnuje crawlowanie i zaciemnia sygna\u0142. Google traktuje wszystkie kody 4xx poza 429 tak samo: zaindeksowane adresy, kt\u00f3re zaczynaj\u0105 zwraca\u0107 4xx, s\u0105 usuwane, nowo odkryte strony 404 nie s\u0105 przetwarzane, a cz\u0119stotliwo\u015b\u0107 ich crawlowania z czasem spada. B\u0142\u0119dy serwera i 429 to inna historia. Sprawiaj\u0105, \u017ce Google na jaki\u015b czas ogranicza crawlowanie i zostawia zaindeksowane adresy w indeksie, cho\u0107 strony, kt\u00f3re ci\u0105gle zwracaj\u0105 b\u0142\u0105d, w ko\u0144cu i tak wypadaj\u0105. Przy porz\u0105dkowaniu takich adres\u00f3w popraw te\u017c linki wewn\u0119trzne, kt\u00f3re do nich prowadz\u0105, i przy okazji zadbaj o <a href=\"https:\/\/jalvo.eu\/pl\/anchor-text-dobre-praktyki-co-mowi-google\/\">opisowy tekst kotwicy link\u00f3w<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W praktyce zasada jest wi\u0119c do\u015b\u0107 prosta. 404 lub 410 dla tre\u015bci, kt\u00f3rej ju\u017c nie ma, 5xx dla prawdziwej awarii, 200 tylko dla prawdziwej strony.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Najcz\u0119stsze \u017ar\u00f3d\u0142a b\u0142\u0119d\u00f3w soft 404<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wi\u0119kszo\u015b\u0107 b\u0142\u0119d\u00f3w soft 404 bierze si\u0119 z szablon\u00f3w i stron zast\u0119pczych, kt\u00f3re wy\u015bwietlaj\u0105 komunikat o b\u0142\u0119dzie, ale zostawiaj\u0105 domy\u015blny kod sukcesu. Typowi winowajcy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>W\u0142asny szablon &#8222;nie znaleziono&#8221;, kt\u00f3ry CMS albo framework renderuje ze statusem 200.<\/li>\n<li>Puste strony kategorii, tag\u00f3w, wyszukiwania lub list bez \u017cadnych pozycji (klasyczny <strong>soft 404 przy ubogiej tre\u015bci<\/strong>).<\/li>\n<li>Strony awarii zaplecza, np. przy niedzia\u0142aj\u0105cej bazie danych albo wyj\u0105tku w aplikacji, kt\u00f3re serwer \u017ar\u00f3d\u0142owy zwraca z kodem 200.<\/li>\n<li>Tre\u015bci b\u0142\u0119d\u00f3w lub za\u015blepek przechodz\u0105ce przez reverse proxy, gdy serwer \u017ar\u00f3d\u0142owy ustawi\u0142 ju\u017c 200. Je\u015bli zastanawiasz si\u0119, jaki kod statusu ma strona b\u0142\u0119du proxy, najpierw sprawd\u017a, co wysy\u0142a serwer \u017ar\u00f3d\u0142owy.<\/li>\n<li>Usuni\u0119te produkty lub artyku\u0142y przekierowane na og\u00f3ln\u0105 stron\u0119 albo stron\u0119 g\u0142\u00f3wn\u0105 zamiast zwraca\u0107 404 lub 410.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Dodatkowa warstwa mi\u0119dzy odwiedzaj\u0105cymi a serwerem mo\u017ce to wszystko ukry\u0107. To jeden z <a href=\"https:\/\/jalvo.eu\/reverse-proxy-right-answer-or-hidden-problem\/\">problem\u00f3w, kt\u00f3re proxy potrafi ukry\u0107<\/a>, dop\u00f3ki Search Console w ko\u0144cu go nie zg\u0142osi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak sprawdzi\u0107, jaki kod statusu naprawd\u0119 zwraca strona<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nie ufaj przegl\u0105darce. Wy\u015blij \u017c\u0105danie bezpo\u015brednio pod adres i odczytaj lini\u0119 statusu. Przyjazna strona b\u0142\u0119du wygl\u0105da tak samo niezale\u017cnie od kodu, z jakim przychodzi, wi\u0119c sprawdzaj warstwa po warstwie:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Uruchom <code>curl -I<\/code> lub <code>curl -sS -o \/dev\/null -w '%{http_code}'<\/code> na oznaczonym adresie.<\/li>\n<li>Wy\u015blij to samo \u017c\u0105danie prosto do serwera \u017ar\u00f3d\u0142owego, z pomini\u0119ciem proxy, \u017ceby zobaczy\u0107, kt\u00f3ra warstwa ustawia kod.<\/li>\n<li>U\u017cyj narz\u0119dzia Sprawdzanie adresu URL w Search Console, \u017ceby zobaczy\u0107, co faktycznie dosta\u0142 Googlebot.<\/li>\n<li>Przejrzyj logi dost\u0119pu pod k\u0105tem \u017c\u0105da\u0144 Googlebota i kod\u00f3w, kt\u00f3re otrzyma\u0142.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Logi pomagaj\u0105 te\u017c w <a href=\"https:\/\/jalvo.eu\/reading-server-logs-crawl-problems\/\">wyszukiwaniu b\u0142\u0119d\u00f3w w logach serwera<\/a> na du\u017c\u0105 skal\u0119. Przy okazji por\u00f3wnaj rozmiary odpowiedzi. Du\u017co ma\u0142ych, niemal identycznych odpowiedzi 200? Zwykle oznacza to wsp\u00f3lny szablon b\u0142\u0119du.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jak naprawi\u0107 b\u0142\u0119dy soft 404 na serwerze \u017ar\u00f3d\u0142owym i w NGINX<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Niech serwer wysy\u0142a status zgodny z tre\u015bci\u0105: 404 lub 410 dla brakuj\u0105cych stron, 5xx dla awarii, 200 tylko dla prawdziwej tre\u015bci. W aplikacji ustaw kod w obs\u0142udze &#8222;nie znaleziono&#8221;, a nie tylko w szablonie, kt\u00f3ry ta obs\u0142uga renderuje (\u0142atwo to przeoczy\u0107 i to bardzo cz\u0119sty b\u0142\u0105d). Puste strony wyszukiwania lub list powinny albo zwraca\u0107 404, albo dosta\u0107 prawdziw\u0105 tre\u015b\u0107.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">W NGINX u\u017cywaj <code>error_page 404 \/404.html;<\/code> bez nadpisania <code>=200<\/code> i upewnij si\u0119, \u017ce <code>try_files<\/code> ko\u0144czy si\u0119 na <code>=404<\/code>, zamiast przepisywa\u0107 ka\u017cd\u0105 nieznan\u0105 \u015bcie\u017ck\u0119 na index.php lub index.html z kodem sukcesu. Tre\u015bci usuni\u0119te celowo powinny zwraca\u0107 410. Przekierowanie ma sens tylko wtedy, gdy strona docelowa jest naprawd\u0119 odpowiednikiem. Aplikacje jednostronicowe? Serwer powinien zwraca\u0107 prawdziwe 404 dla nieznanych \u015bcie\u017cek, a przynajmniej tag noindex, a nie pust\u0105 pow\u0142ok\u0119. Po wdro\u017ceniu kliknij Sprawd\u017a poprawk\u0119 w Search Console i obserwuj raport przez kilka kolejnych crawlowa\u0144.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ubogie i puste strony na odbudowanych lub wygas\u0142ych domenach<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Stare domeny odbudowane z tekstem zast\u0119pczym albo pustymi szablonami to cz\u0119ste \u017ar\u00f3d\u0142o soft 404 przy ubogiej tre\u015bci. Dla adres\u00f3w z histori\u0105 masz dwie opcje: przywr\u00f3ci\u0107 warto\u015bciow\u0105 tre\u015b\u0107 albo pozwoli\u0107 im zwraca\u0107 404 lub 410. Nie zostawiaj natomiast pustych pow\u0142ok. Planowanie op\u0142aca si\u0119 przy <a href=\"https:\/\/jalvo.eu\/hosting-expired-domains-without-losing-history\/\">odbudowie stron na starych domenach<\/a>, bo ka\u017cdy adres wymaga jasnej decyzji.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Serwisy, kt\u00f3re potrzebuj\u0105 obecno\u015bci w konkretnym regionie, mog\u0105 te\u017c dzia\u0142a\u0107 za <a href=\"https:\/\/jalvo.eu\/services\/\">reverse proxy z adresami IP z UE<\/a> lub z USA, a kody statusu nadal zostaj\u0105 pod Twoj\u0105 kontrol\u0105 na serwerze \u017ar\u00f3d\u0142owym.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">B\u0142\u0119dy soft 404 znikaj\u0105, gdy kod statusu m\u00f3wi to samo co tre\u015b\u0107. Sprawd\u017a prawdziwy kod, napraw go na serwerze \u017ar\u00f3d\u0142owym, zwracaj 404 lub 410 dla stron, kt\u00f3rych ju\u017c nie ma, i przesta\u0144 serwowa\u0107 puste szablony. To naprawd\u0119 wszystko. Wi\u0119cej na pokrewne tematy znajdziesz w naszych <a href=\"https:\/\/jalvo.eu\/category\/seo\/\">poradnikach o indeksowaniu i crawlowaniu<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">FAQ<\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1790304051684-0\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Czy usuni\u0119ta strona powinna zwraca\u0107 404 czy 410?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>u003cpu003eOba to kody 4xx, a wed\u0142ug podlinkowanej wy\u017cej dokumentacji Google wszystkie kody 4xx poza 429 s\u0105 traktowane tak samo. U\u017cywaj 410, gdy usuni\u0119cie jest celowe, a 404 w pozosta\u0142ych przypadkach. Najwa\u017cniejsze, \u017ceby nie serwowa\u0107 200 na stronie, kt\u00f3ra ju\u017c nie istnieje.u003c\/pu003e<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790304051684-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Czy reverse proxy mo\u017ce powodowa\u0107 b\u0142\u0119dy soft 404?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>u003cpu003eProxy mo\u017ce przekaza\u0107 dowolny status i tre\u015b\u0107 wys\u0142ane przez serwer \u017ar\u00f3d\u0142owy, w tym stron\u0119 b\u0142\u0119du oznaczon\u0105 jako 200. Dlatego najpierw przetestuj bezpo\u015brednio serwer \u017ar\u00f3d\u0142owy. Naprawiaj w tej warstwie, w kt\u00f3rej ustawiany jest kod.u003c\/pu003e<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1790304051684-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Jak d\u0142ugo trwa znikni\u0119cie wpis\u00f3w soft 404 z Search Console?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>u003cpu003eGoogle nie podaje sta\u0142ego terminu. Wpisy aktualizuj\u0105 si\u0119, gdy Google ponownie crawluje dane adresy, a Sprawd\u017a poprawk\u0119 uruchamia weryfikacj\u0119 stron, kt\u00f3re poprawi\u0142e\u015b.u003c\/pu003e<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>B\u0142\u0105d soft 404 pojawia si\u0119, gdy adres URL zwraca 200 OK, ale jego tre\u015b\u0107 wygl\u0105da jak komunikat o b\u0142\u0119dzie, pusta [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":2200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[182],"tags":[],"class_list":["post-2222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo-pl"],"acf":[],"_links":{"self":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts\/2222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/comments?post=2222"}],"version-history":[{"count":1,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts\/2222\/revisions"}],"predecessor-version":[{"id":2232,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/posts\/2222\/revisions\/2232"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/media\/2200"}],"wp:attachment":[{"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/media?parent=2222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/categories?post=2222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jalvo.eu\/pl\/wp-json\/wp\/v2\/tags?post=2222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}