{"id":12001,"date":"2026-10-28T21:01:35","date_gmt":"2026-10-28T18:01:35","guid":{"rendered":"https:\/\/webmister.pro\/presmerovani-301-htaccess\/"},"modified":"2026-10-28T21:01:35","modified_gmt":"2026-10-28T18:01:35","slug":"presmerovani-301-htaccess","status":"publish","type":"post","link":"https:\/\/webmister.pro\/cz\/presmerovani-301-htaccess\/","title":{"rendered":"P\u0159esm\u011brov\u00e1n\u00ed 301 v .htaccess: hotov\u00e1 pravidla"},"content":{"rendered":"<p>P\u0159esm\u011brov\u00e1n\u00ed 301 je odpov\u011b\u010f serveru, kter\u00e1 prohl\u00ed\u017ee\u010di i vyhled\u00e1vac\u00edmu robotu \u0159\u00edk\u00e1: str\u00e1nka se p\u0159est\u011bhovala natrvalo, tady je jej\u00ed nov\u00e1 adresa. Od ostatn\u00edch zp\u016fsob\u016f, jak n\u00e1v\u0161t\u011bvn\u00edka poslat d\u00e1l, se li\u0161\u00ed t\u00edm, \u017ee do indexu p\u0159en\u00e1\u0161\u00ed nejen adresu, ale i nasb\u00edranou v\u00e1hu odkaz\u016f. N\u00ed\u017ee jsou hotov\u00e1 pravidla pro <code>.htaccess<\/code>, jejich prot\u011bj\u0161ky pro nginx a rozbor chyb, kv\u016fli kter\u00fdm st\u011bhov\u00e1n\u00ed stoj\u00ed web n\u00e1v\u0161t\u011bvnost.<\/p>\n<nav class=\"wppub-toc\" aria-label=\"Table of contents\">\n<p class=\"wppub-toc__title\">Table of contents<\/p>\n<ul class=\"wppub-toc__list\">\n<li class=\"wppub-toc__item\"><a class=\"wppub-toc__link\" href=\"#jak-to-funguje\">Jak to funguje<\/a><\/li>\n<li class=\"wppub-toc__item\"><a class=\"wppub-toc__link\" href=\"#pravidla-pro-htaccess\">Pravidla pro .htaccess<\/a>\n<ul class=\"wppub-toc__list wppub-toc__list--sub\">\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#jedna-stranka-na-druhou\">Jedna str\u00e1nka na druhou<\/a><\/li>\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#slouceni-zrcadel-z-www-na-bez-www\">Slou\u010den\u00ed zrcadel: z www na bez www<\/a><\/li>\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#prechod-na-https\">P\u0159echod na HTTPS<\/a><\/li>\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#https-a-bez-www-jednim-pravidlem\">HTTPS a bez www jedn\u00edm pravidlem<\/a><\/li>\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#lomitko-na-konci-adresy\">Lom\u00edtko na konci adresy<\/a><\/li>\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#stehovani-na-novou-domenu\">St\u011bhov\u00e1n\u00ed na novou dom\u00e9nu<\/a><\/li>\n<li class=\"wppub-toc__item wppub-toc__item--sub\"><a class=\"wppub-toc__link\" href=\"#sekce-na-sekci-a-adresy-s-parametry\">Sekce na sekci a adresy s parametry<\/a><\/li>\n<\/ul>\n<\/li>\n<li class=\"wppub-toc__item\"><a class=\"wppub-toc__link\" href=\"#totez-na-nginx\">Tot\u00e9\u017e na nginx<\/a><\/li>\n<li class=\"wppub-toc__item\"><a class=\"wppub-toc__link\" href=\"#caste-chyby\">\u010cast\u00e9 chyby<\/a><\/li>\n<li class=\"wppub-toc__item\"><a class=\"wppub-toc__link\" href=\"#jak-to-overit\">Jak to ov\u011b\u0159it<\/a><\/li>\n<li class=\"wppub-toc__item\"><a class=\"wppub-toc__link\" href=\"#strucne-to-hlavni\">Stru\u010dn\u011b to hlavn\u00ed<\/a><\/li>\n<\/ul>\n<\/nav>\n<h2 id=\"jak-to-funguje\">Jak to funguje<\/h2>\n<p>Server odpov\u00ed na po\u017eadavek k\u00f3dem 301 a hlavi\u010dkou <code>Location<\/code> s novou adresou. Prohl\u00ed\u017ee\u010d tam okam\u017eit\u011b p\u0159ejde, obvykle bez pov\u0161imnut\u00ed n\u00e1v\u0161t\u011bvn\u00edka, a skok si ulo\u017e\u00ed do mezipam\u011bti. Vyhled\u00e1va\u010d ud\u011bl\u00e1 tot\u00e9\u017e: v indexu nahrad\u00ed starou URL novou a p\u0159ed\u00e1 j\u00ed v\u00e1hu odkaz\u016f.<\/p>\n<figure><svg viewbox=\"0 0 900 300\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 301 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442: \u0437\u0430\u043f\u0440\u043e\u0441, \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c Location \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441\" style=\"width:100%;height:auto;max-width:900px;display:block;margin:0 auto 20px\"><rect fill=\"#16181B\" stroke=\"#3B3B3B\" stroke-width=\"1\" x=\"20\" y=\"40\" width=\"200\" height=\"90\" rx=\"2\"><\/rect><text fill=\"#EEEEEE\" font-weight=\"400\" font-size=\"16px\" font-family=\"Roboto, Arial, sans-serif\" x=\"42\" y=\"76\">Prohl\u00ed\u017ee\u010d nebo robot<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"42\" y=\"100\">GET \/old-page\/<\/text><path stroke=\"#4A4A4A\" stroke-width=\"1.5\" fill=\"none\" d=\"M220 85 h100 m-12 -6 l12 6 l-12 6\"><\/path><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"236\" y=\"74\">po\u017eadavek<\/text><rect fill=\"#15202A\" stroke=\"#30738E\" stroke-width=\"1.5\" x=\"320\" y=\"26\" width=\"260\" height=\"118\" rx=\"2\"><\/rect><text fill=\"#EEEEEE\" font-weight=\"400\" font-size=\"16px\" font-family=\"Roboto, Arial, sans-serif\" x=\"342\" y=\"60\">Server<\/text><text fill=\"#30738E\" font-weight=\"400\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"342\" y=\"88\">301 Moved Permanently<\/text><text fill=\"#30738E\" font-weight=\"400\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"342\" y=\"112\">Location: \/new-page\/<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"342\" y=\"134\">pravidlo z .htaccess<\/text><path stroke=\"#4A4A4A\" stroke-width=\"1.5\" fill=\"none\" d=\"M580 85 h100 m-12 -6 l12 6 l-12 6\"><\/path><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"596\" y=\"74\">p\u0159esm\u011brov\u00e1n\u00ed<\/text><rect fill=\"#16181B\" stroke=\"#3B3B3B\" stroke-width=\"1\" x=\"680\" y=\"40\" width=\"200\" height=\"90\" rx=\"2\"><\/rect><text fill=\"#EEEEEE\" font-weight=\"400\" font-size=\"16px\" font-family=\"Roboto, Arial, sans-serif\" x=\"702\" y=\"76\">Nov\u00e1 adresa<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"702\" y=\"100\">200 OK, str\u00e1nka otev\u0159ena<\/text><rect fill=\"#16181B\" stroke=\"#3B3B3B\" stroke-width=\"1\" x=\"20\" y=\"176\" width=\"860\" height=\"96\" rx=\"2\"><\/rect><text fill=\"#EEEEEE\" font-weight=\"400\" font-size=\"16px\" font-family=\"Roboto, Arial, sans-serif\" x=\"44\" y=\"208\">Co je d\u016fle\u017eit\u00e9 pro vyhled\u00e1v\u00e1n\u00ed<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"44\" y=\"234\">301 \u0159\u00edk\u00e1 \u201eadresa se zm\u011bnila natrvalo\u201c: vyhled\u00e1va\u010d p\u0159esune str\u00e1nku v indexu i s nasb\u00edranou vahou odkaz\u016f.<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"44\" y=\"258\">302 znamen\u00e1 do\u010dasn\u011b \u2014 star\u00e1 adresa z\u016fst\u00e1v\u00e1 v indexu a v\u00e1ha se nep\u0159ed\u00e1.<\/text><\/svg><figcaption>\u0158et\u011bzec po\u017eadavku: server odpov\u00ed 301 a p\u0159ed\u00e1 novou adresu<\/figcaption><\/figure>\n<p>Rozd\u00edl mezi k\u00f3dy je d\u016fle\u017eit\u00fd a stoj\u00ed pen\u00edze:<\/p>\n<div class=\"wm-table-scroll wm-table-cards\" tabindex=\"0\" role=\"region\" aria-label=\"Table, scrolls horizontally\">\n<table>\n<thead>\n<tr>\n<th>K\u00f3d<\/th>\n<th>Co znamen\u00e1<\/th>\n<th>Kdy pou\u017e\u00edt<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-label=\"K\u00f3d\"><strong>301<\/strong><\/td>\n<td data-label=\"Co znamen\u00e1\">P\u0159est\u011bhov\u00e1no natrvalo<\/td>\n<td data-label=\"Kdy pou\u017e\u00edt\">Zm\u011bna dom\u00e9ny, adresy str\u00e1nky, slou\u010den\u00ed zrcadel, p\u0159echod na HTTPS<\/td>\n<\/tr>\n<tr>\n<td data-label=\"K\u00f3d\"><strong>302<\/strong><\/td>\n<td data-label=\"Co znamen\u00e1\">Do\u010dasn\u011b<\/td>\n<td data-label=\"Kdy pou\u017e\u00edt\">Akce na p\u00e1r t\u00fddn\u016f, \u00fadr\u017eba, A\/B test<\/td>\n<\/tr>\n<tr>\n<td data-label=\"K\u00f3d\"><strong>307<\/strong><\/td>\n<td data-label=\"Co znamen\u00e1\">Do\u010dasn\u011b, metoda po\u017eadavku z\u016fst\u00e1v\u00e1<\/td>\n<td data-label=\"Kdy pou\u017e\u00edt\">Tot\u00e9\u017e, ale pro po\u017eadavky POST<\/td>\n<\/tr>\n<tr>\n<td data-label=\"K\u00f3d\"><strong>308<\/strong><\/td>\n<td data-label=\"Co znamen\u00e1\">Natrvalo, metoda z\u016fst\u00e1v\u00e1<\/td>\n<td data-label=\"Kdy pou\u017e\u00edt\">Vz\u00e1cn\u00fd p\u0159\u00edpad: st\u011bhov\u00e1n\u00ed API, kde z\u00e1le\u017e\u00ed na POST<\/td>\n<\/tr>\n<tr>\n<td data-label=\"K\u00f3d\"><strong>410<\/strong><\/td>\n<td data-label=\"Co znamen\u00e1\">Trvale odstran\u011bno<\/td>\n<td data-label=\"Kdy pou\u017e\u00edt\">Str\u00e1nka u\u017e neexistuje a nem\u00e1 n\u00e1hradu<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Zam\u011bnit 301 za 302 je nejdra\u017e\u0161\u00ed chyba v tomto seznamu: u 302 ponech\u00e1 vyhled\u00e1va\u010d v indexu starou adresu a v\u00e1hu nep\u0159ed\u00e1.<\/p>\n<h2 id=\"pravidla-pro-htaccess\">Pravidla pro .htaccess<\/h2>\n<p>V\u0161echny p\u0159\u00edklady po\u010d\u00edtaj\u00ed s Apache a zapnut\u00fdm <code>mod_rewrite<\/code>. Blok pravidel pat\u0159\u00ed na za\u010d\u00e1tek souboru <code>.htaccess<\/code> v ko\u0159eni webu \u2014 p\u0159ed pravidla CMS, jinak po\u017eadavek zachyt\u00ed WordPress d\u0159\u00edv.<\/p>\n<pre><code>RewriteEngine On\nRewriteBase \/<\/code><\/pre>\n<h3 id=\"jedna-stranka-na-druhou\">Jedna str\u00e1nka na druhou<\/h3>\n<pre><code># jednoduch\u00e1 varianta\nRedirect 301 \/old-page\/ https:\/\/site.com\/new-page\/\n\n# tot\u00e9\u017e p\u0159es mod_rewrite, pokud na n\u011bm b\u011b\u017e\u00ed i ostatn\u00ed pravidla\nRewriteRule ^old-page\/?$ https:\/\/site.com\/new-page\/ [R=301,L]<\/code><\/pre>\n<h3 id=\"slouceni-zrcadel-z-www-na-bez-www\">Slou\u010den\u00ed zrcadel: z www na bez www<\/h3>\n<pre><code>RewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]\nRewriteRule ^(.*)$ https:\/\/%1\/$1 [R=301,L]<\/code><\/pre>\n<p>Opa\u010dn\u00fd p\u0159\u00edpad, kdy\u017e je hlavn\u00edm zrcadlem dom\u00e9na s www:<\/p>\n<pre><code>RewriteCond %{HTTP_HOST} !^www. [NC]\nRewriteRule ^(.*)$ https:\/\/www.%{HTTP_HOST}\/$1 [R=301,L]<\/code><\/pre>\n<h3 id=\"prechod-na-https\">P\u0159echod na HTTPS<\/h3>\n<pre><code>RewriteCond %{HTTPS} !=on\nRewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}\/$1 [R=301,L]<\/code><\/pre>\n<p>Za Cloudflare nebo jin\u00fdm proxy podm\u00ednka <code>%{HTTPS}<\/code> nezabere \u2014 po\u017eadavek doraz\u00ed na server u\u017e po HTTP. Tam se kontroluje hlavi\u010dka:<\/p>\n<pre><code>RewriteCond %{HTTP:X-Forwarded-Proto} !https\nRewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}\/$1 [R=301,L]<\/code><\/pre>\n<h3 id=\"https-a-bez-www-jednim-pravidlem\">HTTPS a bez www jedn\u00edm pravidlem<\/h3>\n<p>Hlavn\u00ed trik t\u00e9to \u010d\u00e1sti: ned\u00e1vat dv\u011b pravidla za sebou, jinak vznikne \u0159et\u011bzec dvou skok\u016f.<\/p>\n<pre><code>RewriteCond %{HTTPS} !=on [OR]\nRewriteCond %{HTTP_HOST} ^www.(.+)$ [NC]\nRewriteRule ^(.*)$ https:\/\/site.com\/$1 [R=301,L]<\/code><\/pre>\n<h3 id=\"lomitko-na-konci-adresy\">Lom\u00edtko na konci adresy<\/h3>\n<pre><code># p\u0159idat lom\u00edtko\nRewriteCond %{REQUEST_FILENAME} !-f\nRewriteCond %{REQUEST_URI} !.[a-zA-Z0-9]{1,5}$\nRewriteCond %{REQUEST_URI} !\/$\nRewriteRule ^(.*)$ \/$1\/ [R=301,L]\n\n# odebrat lom\u00edtko\nRewriteCond %{REQUEST_FILENAME} !-d\nRewriteRule ^(.*)\/$ \/$1 [R=301,L]<\/code><\/pre>\n<p>Podm\u00ednky s <code>!-f<\/code> a <code>!-d<\/code> tu nejsou formalita: bez nich za\u010dne pravidlo p\u0159episovat i adresy obr\u00e1zk\u016f a existuj\u00edc\u00edch slo\u017eek.<\/p>\n<h3 id=\"stehovani-na-novou-domenu\">St\u011bhov\u00e1n\u00ed na novou dom\u00e9nu<\/h3>\n<pre><code># se zachov\u00e1n\u00edm adres str\u00e1nek \u2014 tak se to m\u00e1 d\u011blat\nRewriteCond %{HTTP_HOST} ^(www.)?old-site.com$ [NC]\nRewriteRule ^(.*)$ https:\/\/new-site.com\/$1 [R=301,L]\n\n# v\u0161echno na \u00favodn\u00ed str\u00e1nku \u2014 jen kdy\u017e m\u00e1 nov\u00fd web \u00fapln\u011b jinou strukturu\nRewriteRule ^(.*)$ https:\/\/new-site.com\/ [R=301,L]<\/code><\/pre>\n<p>Druhou variantu vyhled\u00e1va\u010de \u010dasto berou jako \u201esoft 404\u201c a v\u00e1hu nep\u0159edaj\u00ed. Mapujte adresu na adresu v\u0161ude, kde to jde, a na \u00favodn\u00ed str\u00e1nku pos\u00edlejte jen to, co n\u00e1hradu nem\u00e1.<\/p>\n<h3 id=\"sekce-na-sekci-a-adresy-s-parametry\">Sekce na sekci a adresy s parametry<\/h3>\n<pre><code># \/blog\/clanek\/ \u2192 \/news\/clanek\/\nRewriteRule ^blog\/(.*)$ \/news\/$1 [R=301,L]\n\n# ?id=12 \u2192 \/catalog\/sofa\/\nRewriteCond %{QUERY_STRING} (^|&amp;)id=12(&amp;|$)\nRewriteRule ^index.php$ \/catalog\/sofa\/? [R=301,L]<\/code><\/pre>\n<p>Otazn\u00edk na konci c\u00edle zahod\u00ed p\u016fvodn\u00ed \u0159et\u011bzec parametr\u016f \u2014 bez n\u011bj se p\u0159ilep\u00ed k nov\u00e9 adrese.<\/p>\n<h2 id=\"totez-na-nginx\">Tot\u00e9\u017e na nginx<\/h2>\n<p>nginx \u017e\u00e1dn\u00fd <code>.htaccess<\/code> nem\u00e1: pravidla \u017eij\u00ed v konfiguraci serveru a projev\u00ed se po <code>nginx -t<\/code> a znovuna\u010dten\u00ed.<\/p>\n<pre><code>server {\n    listen 80;\n    server_name www.site.com site.com;\n    return 301 https:\/\/site.com$request_uri;\n}\n\n# jedna str\u00e1nka na druhou\nlocation = \/old-page\/ {\n    return 301 https:\/\/site.com\/new-page\/;\n}\n\n# sekce na sekci\nrewrite ^\/blog\/(.*)$ \/news\/$1 permanent;<\/code><\/pre>\n<p>Konstrukce <code>return 301<\/code> je rychlej\u0161\u00ed ne\u017e <code>rewrite<\/code> a \u010dte se jednozna\u010dn\u011b, proto se u jednoduch\u00fdch p\u0159\u00edpad\u016f sah\u00e1 pr\u00e1v\u011b po n\u00ed.<\/p>\n<h2 id=\"caste-chyby\">\u010cast\u00e9 chyby<\/h2>\n<figure><svg viewbox=\"0 0 900 290\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" role=\"img\" aria-label=\"\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0442\u0438\u0432 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430\" style=\"width:100%;height:auto;max-width:900px;display:block;margin:0 auto 20px\"><text fill=\"#848484\" letter-spacing=\"1px\" font-weight=\"400\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"20\" y=\"30\">JAK TO B\u00ddV\u00c1: \u010cTY\u0158I SKOKY M\u00cdSTO JEDNOHO<\/text><rect fill=\"#1E1618\" stroke=\"#5A3B40\" stroke-width=\"1\" x=\"20\" y=\"48\" width=\"180\" height=\"48\" rx=\"2\"><\/rect><text fill=\"#CBCBCB\" font-weight=\"300\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"36\" y=\"78\">http:\/\/www.site.com<\/text><path stroke=\"#7A5057\" stroke-width=\"1.5\" fill=\"none\" d=\"M200 72 h36 m-10 -5 l10 5 l-10 5\"><\/path><rect fill=\"#1E1618\" stroke=\"#5A3B40\" stroke-width=\"1\" x=\"236\" y=\"48\" width=\"160\" height=\"48\" rx=\"2\"><\/rect><text fill=\"#CBCBCB\" font-weight=\"300\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"252\" y=\"78\">http:\/\/site.com<\/text><path stroke=\"#7A5057\" stroke-width=\"1.5\" fill=\"none\" d=\"M396 72 h36 m-10 -5 l10 5 l-10 5\"><\/path><rect fill=\"#1E1618\" stroke=\"#5A3B40\" stroke-width=\"1\" x=\"432\" y=\"48\" width=\"170\" height=\"48\" rx=\"2\"><\/rect><text fill=\"#CBCBCB\" font-weight=\"300\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"448\" y=\"78\">https:\/\/site.com<\/text><path stroke=\"#7A5057\" stroke-width=\"1.5\" fill=\"none\" d=\"M602 72 h36 m-10 -5 l10 5 l-10 5\"><\/path><rect fill=\"#1E1618\" stroke=\"#5A3B40\" stroke-width=\"1\" x=\"638\" y=\"48\" width=\"242\" height=\"48\" rx=\"2\"><\/rect><text fill=\"#CBCBCB\" font-weight=\"300\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"654\" y=\"78\">https:\/\/site.com\/page\/<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"20\" y=\"124\">Ka\u017ed\u00fd skok je zvl\u00e1\u0161tn\u00ed po\u017eadavek: del\u0161\u00ed na\u010d\u00edt\u00e1n\u00ed, ztr\u00e1ta \u010d\u00e1sti v\u00e1hy, spot\u0159ebovan\u00fd crawl budget<\/text><text fill=\"#848484\" letter-spacing=\"1px\" font-weight=\"400\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"20\" y=\"176\">JAK SPR\u00c1VN\u011a: JEDNO PRAVIDLO, JEDEN SKOK<\/text><rect fill=\"#15202A\" stroke=\"#30738E\" stroke-width=\"1\" x=\"20\" y=\"194\" width=\"180\" height=\"48\" rx=\"2\"><\/rect><text fill=\"#CBCBCB\" font-weight=\"300\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"36\" y=\"224\">http:\/\/www.site.com<\/text><path stroke=\"#30738E\" stroke-width=\"1.5\" fill=\"none\" d=\"M200 218 h420 m-12 -6 l12 6 l-12 6\"><\/path><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"330\" y=\"208\">jeden 301<\/text><rect fill=\"#15202A\" stroke=\"#30738E\" stroke-width=\"1\" x=\"620\" y=\"194\" width=\"260\" height=\"48\" rx=\"2\"><\/rect><text fill=\"#CBCBCB\" font-weight=\"300\" font-size=\"14px\" font-family=\"Roboto, Arial, sans-serif\" x=\"636\" y=\"224\">https:\/\/site.com\/page\/<\/text><text fill=\"#848484\" font-weight=\"300\" font-size=\"13px\" font-family=\"Roboto, Arial, sans-serif\" x=\"20\" y=\"272\">Ov\u011b\u0159\u00ed to jedin\u00fd p\u0159\u00edkaz: curl -sIL https:\/\/site.com\/page\/ \u2014 v odpov\u011bdi mus\u00ed b\u00fdt p\u0159esn\u011b jeden 301<\/text><\/svg><figcaption>\u0158et\u011bzec n\u011bkolika skok\u016f a jak to m\u00e1 vypadat<\/figcaption><\/figure>\n<ul>\n<li><strong>\u0158et\u011bzec p\u0159esm\u011brov\u00e1n\u00ed.<\/strong> www \u2192 bez www \u2192 https \u2192 lom\u00edtko: \u010dty\u0159i po\u017eadavky m\u00edsto jednoho. Spojte podm\u00ednky do jedin\u00e9ho pravidla.<\/li>\n<li><strong>Smy\u010dka.<\/strong> Pravidlo pos\u00edl\u00e1 str\u00e1nku samu na sebe a prohl\u00ed\u017ee\u010d uk\u00e1\u017ee <code>ERR_TOO_MANY_REDIRECTS<\/code>. Obvyklou p\u0159\u00ed\u010dinou je p\u0159esm\u011brov\u00e1n\u00ed na HTTPS za proxy psan\u00e9 p\u0159es <code>%{HTTPS}<\/code>.<\/li>\n<li><strong>302 m\u00edsto 301.<\/strong> St\u011bhov\u00e1n\u00ed prob\u011bhlo, ale v\u00e1ha z\u016fstala na star\u00e9 adrese.<\/li>\n<li><strong>V\u0161echno na \u00favodn\u00ed str\u00e1nku.<\/strong> Hromadn\u00e9 p\u0159esm\u011brov\u00e1n\u00ed stovek str\u00e1nek do ko\u0159ene \u010dte vyhled\u00e1va\u010d jako skrytou 404.<\/li>\n<li><strong>Pravidla a\u017e za blokem CMS.<\/strong> V <code>.htaccess<\/code> zachyt\u00ed po\u017eadavek nejd\u0159\u00edv WordPress a va\u0161e pravidlo se neuplatn\u00ed: dejte sv\u016fj blok v\u00fd\u0161.<\/li>\n<li><strong>P\u0159esm\u011brov\u00e1n\u00ed m\u00edsto canonical.<\/strong> Pokud lid\u00e9 pot\u0159ebuj\u00ed ob\u011b str\u00e1nky a duplikuje se jen obsah, pat\u0159\u00ed tam <code>rel=\"canonical\"<\/code>, ne 301.<\/li>\n<li><strong>Zapomenut\u00e9 intern\u00ed odkazy.<\/strong> Po st\u011bhov\u00e1n\u00ed mus\u00ed odkazy uvnit\u0159 webu m\u00ed\u0159it rovnou na novou adresu, jinak jde ka\u017ed\u00fd klik p\u0159es p\u0159esm\u011brov\u00e1n\u00ed.<\/li>\n<\/ul>\n<h2 id=\"jak-to-overit\">Jak to ov\u011b\u0159it<\/h2>\n<p>Nejrychleji v termin\u00e1lu. P\u0159ep\u00edna\u010d <code>-I<\/code> \u017e\u00e1d\u00e1 jen hlavi\u010dky, <code>-L<\/code> jde \u0159et\u011bzcem a\u017e na konec:<\/p>\n<pre><code>curl -sIL https:\/\/site.com\/old-page\/ | grep -E \"HTTP\/|Location\"<\/code><\/pre>\n<p>Spr\u00e1vn\u00e1 odpov\u011b\u010f vypad\u00e1 takto: jedno <code>HTTP\/1.1 301<\/code>, jedna <code>Location<\/code> a potom <code>HTTP\/2 200<\/code>. Dv\u011b a v\u00edce 301 za sebou jsou \u0159et\u011bzec, kter\u00fd je t\u0159eba srazit do jednoho. V Search Console tot\u00e9\u017e uk\u00e1\u017ee report \u201eIndexov\u00e1n\u00ed str\u00e1nek\u201c, v prohl\u00ed\u017ee\u010di z\u00e1lo\u017eka Network se zapnut\u00fdm \u201ePreserve log\u201c.<\/p>\n<p>Po velk\u00e9m st\u011bhov\u00e1n\u00ed ov\u011b\u0159te vzorek dvou a\u017e t\u0159\u00ed des\u00edtek adres: \u00favodn\u00ed str\u00e1nku, kategorie, karty produkt\u016f, adresy s parametry a adresy z p\u0159edn\u00edch m\u00edst ve vyhled\u00e1v\u00e1n\u00ed.<\/p>\n<h2 id=\"strucne-to-hlavni\">Stru\u010dn\u011b to hlavn\u00ed<\/h2>\n<p>301 pro trval\u00e9 st\u011bhov\u00e1n\u00ed, 302 pro do\u010dasn\u00e9, 410 pro to, co u\u017e nen\u00ed. P\u00ed\u0161e se jedno pravidlo, kter\u00e9 vede rovnou na c\u00edlovou adresu, bez mezikrok\u016f. A ov\u011b\u0159ovat je t\u0159eba v\u017edy \u2014 <code>curl -sIL<\/code> odpov\u00ed b\u011bhem vte\u0159iny.<\/p>\n<p>Pokud je st\u011bhov\u00e1n\u00ed velk\u00e9 \u2014 nov\u00e1 dom\u00e9na, slou\u010den\u00ed web\u016f, p\u0159echod na HTTPS s p\u0159estavbou adres \u2014 <a href=\"https:\/\/webmister.pro\/cz\/contacts\/\">napi\u0161te n\u00e1m<\/a>: sestav\u00edme mapu shody a p\u0159est\u011bhujeme web tak, aby n\u00e1v\u0161t\u011bvnost z\u016fstala.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hotov\u00e1 pravidla p\u0159esm\u011brov\u00e1n\u00ed 301 pro .htaccess a nginx: slou\u010den\u00ed zrcadel, p\u0159echod na HTTPS, lom\u00edtko na konci, st\u011bhov\u00e1n\u00ed dom\u00e9ny \u2014 a rozbor chyb.<\/p>\n","protected":false},"author":1,"featured_media":12028,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[213],"tags":[],"class_list":["post-12001","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-html-css-cz"],"acf":[],"_links":{"self":[{"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/posts\/12001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/comments?post=12001"}],"version-history":[{"count":0,"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/posts\/12001\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/media\/12028"}],"wp:attachment":[{"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/media?parent=12001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/categories?post=12001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webmister.pro\/cz\/wp-json\/wp\/v2\/tags?post=12001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}