Virus neobișnuit de redirecționare DLE. Virus neobișnuit de redirecționare în DLE Redirect pentru publicațiile care nu au un ID pentru pagina principală

04.08.2021 Știri

Am un site pe motor Motorul DataLifeși am decis să-i schimb profilul. Nu radical, restrângeți puțin subiectul. Pentru a face acest lucru, a trebuit să elimin mai mult de jumătate din conținutul de pe site care nu avea legătură cu acest subiect. Am început să curăț treptat paginile, înlocuindu-le conținutul cu conținut nou. Dar a trebuit totuși să schimbăm structura URL și din această cauză, traficul a apărut în panoul pentru webmasteri, iar pozițiile de căutare pe un subiect restrâns au scăzut. În plus, am observat că există link-uri către pagini șterse de pe forumuri și servicii precum otvet.mail.ru. La navigarea din aceste pagini, a fost dată o eroare 404. Pe lângă acest fapt tehnic, urmează și alți factori negativi - se pierde greutatea legăturii, indicatorii comportamentali scad și, cred, o serie de alte consecințe negative.

Am decis să rezolv acest lucru folosind o metodă brutală - nu dând o eroare 404 pentru toate paginile șterse, ci făcând o redirecționare 301 către pagina principală. În CMS DLE, pentru a implementa acest hack, trebuie să găsiți codul în fișierul /engine/modules/show.full.php:

elseif ( ! $news_found ) ( @ antet ("HTTP/1.0 404 Not Found") ; msgbox( $lang [ "all_err_1" ] , $lang [ "news_err_12" ] ) ; )

elseif(! $news_found) ( @header("HTTP/1.0 404 Not Found"); msgbox($lang["all_err_1"], $lang["news_err_12"]); )

și înlocuiți-l cu

// 301 redirecționează către pagina principală dacă știrile nu sunt găsite/nu există elseif(! $news_found) ( header("HTTP/1.0 301 Moved Permanently"); header("Locație: ($config["http_home_url"] )"); die("Redirecționare"); ) // 301 redirecționare către pagina principală dacă știrile nu sunt găsite/nu există

Acum, de fiecare dată când un robot de căutare îl contactează, i se va da un mesaj că informațiile de pe această pagină au fost transferate pentru totdeauna pe pagina principală și tot sucul de link care merge către paginile de la distanță va fi redistribuit către pagina principală.

Vizitatori din pagini șterse pur și simplu va redirecționa către pagina principală și, sperăm, atunci se vor gândi să folosească căutarea.

Acum voi descrie aproximativ aceeași logică de redirecționare, dar nu pentru știri, ci pentru categorii. Deschideți fișierul /engine/engine.php și căutați codul:

if (! $category_id ) $category_id = "nedetectat" ;

if (!$category_id) $category_id = "nedetectat";

cu care îl înlocuim

if ($config [ "allow_alt_url" ] == "da" ȘI ! $category_id AND $view_template != "rss" ) ( antet ("HTTP/1.0 301 Mutat permanent") ; antet ("Locație: ($config[" http_home_url"]) " ); die ("Redirect" ) ; ) //rezolvarea problemei cu categorii care nu există

//rezolvarea problemei cu categorii care nu există dacă ($config["allow_alt_url"] == "da" ȘI ! $category_id AND $view_template != "rss") ( header("HTTP/1.0 301 Mutat permanent") ; header("Locație: ($config["http_home_url"])"); die("Redirecționare"); ) //rezolvarea problemei cu categorii care nu există

Toate. Acum același lucru va funcționa și pentru categoriile DLE șterse.

Bună prieteni. În sfârșit, a venit timpul pentru partea a treia a tutorialului meu de optimizare DLE.

Abia acum mi-am dat seama cu groază că a doua parte anterioară a ghidului a fost publicată cu mai bine de șase luni în urmă!

Conform tradiției stabilite, vom vorbi despre, și în mod specific în această parte voi vorbi despre câteva caracteristici ale motorului și caracteristici și hack-uri mici, dar foarte utile, care nu se potriveau formatului din părțile anterioare.

Această parte este legată și de adresele paginilor, dar spre deosebire de partea a doua, în care ne-am luptat cu duplicatele și le-am eliminat aspectul, în această parte ne vom uita la cum să scăpăm de paginile inexistente care au apărut ca urmare a ștergerii sau a unei eroare la adresa.

Post actualizat 6 mai 2014:
Modificările aduse motorului au fost actualizate, a fost adăugat suport pentru noile versiuni ale motorului.
Relevant pentru următoarele versiuni DLE: 7.x, 8.x, 9.x, 10.x!

Alte părți ale ghidului SEO:
Partea 1, Optimizare antete Titlu
Partea 2, Combaterea conținutului duplicat -
Partea 4, Remediere pentru versiunile DLE 9.3, 9.4, 9.5, 9.6 -

Redirecționează de la paginile de paginare inexistente către cele corecte și existente

Trucul a fost inventat literalmente astăzi, când am găsit o mulțime de erori 404 pe unul dintre site-urile din panoul pentru webmasteri.

Să luăm o situație foarte reală - din anumite motive ați decis să schimbați numărul de știri afișate pe pagina principală sau pe paginile categoriei. Ce mi s-a întâmplat: reproiectarea site-ului; structura paginii s-a schimbat complet; s-a decis să se afișeze mai multe anunțuri scurte de știri pe fiecare pagină (de la 7 la 10). Rezultatul a fost următorul: multe pagini cu erori 404 au apărut în panoul webmasterului. Aritmetică simplă, pe site erau 1000 de știri, pe fiecare pagină erau afișate 7 anunțuri, așadar, doar pe pagina principală avem 1000/7=142 pagini de paginare. După modificări, au fost exact 100 de pagini, ca urmare, au dispărut pur și simplu 42 de pagini. Și dacă luăm o altă categorie, atunci sunt deja o sută sau două pagini inexistente. Este rău, urât și nu funcționează deloc.

Deschideți fișierul /engine/modules/show.short.php și în partea de jos găsim:

} ?>

MAI SUS adăugăm:

$all_pages_count = @ceil ( $count_all / $config [ "număr_știri" ] ); if ($cstart > $all_pages_count ) ( if ($all_pages_count > 1 ) ( header () ; header ( "Locație: " . $url_page . "/page/" . $all_pages_count . "/" ); die () ; ) else ( antet ("HTTP/1.1 301 Mutat permanent") ; antet ( "Locație: " . $url_page . "/" ) ; die () ; ) ) //redirecționează către ultima pagina, dacă adresa URL conține o pagină mai mare decât cea maximă existentă

//redirecționează către ultima pagină dacă url-ul specifică o pagină mai mare decât cea maximă existentă $all_pages_count = @ceil($count_all / $config["news_number"]); if ($cstart > $all_pages_count) ( if ($all_pages_count > 1) ( header("HTTP/1.1 301 Mutat permanent"); antet ("Locație: " . $url_page . "/page/" . $all_pages_count . "/ "); die(); ) else ( header("HTTP/1.1 301 Mutat permanent"); antet ("Locație: " . $url_page . "/"); die(); ) ) //redirecționează către ultima pagină , dacă adresa URL conține o pagină mai mare decât cea maximă existentă

Permiteți-mi să explic puțin codul: este verificată o condiție - dacă numărul paginii curente este mai mare decât suma maxima pagini de pe site (sau dintr-o categorie), apoi apare o redirecționare către ultima pagină. Dacă este solicitată pagina numărul 2 și există o singură pagină, atunci are loc o redirecționare către pagina mormântă (sau pagina principala categorii).

Un exemplu simplu: cineva solicită o pagină de pe site-ul site.ru/page/435/, dar acest site are doar 268 de pagini, prin urmare, va apărea o redirecționare către adresa site.ru/page/268/.

Redirecționează de la paginile de paginare a comentariilor inexistente către cele corecte

Relevanță: numai versiunile DLE 8.x, 9.x. Nu este relevant pentru DLE 10.x, deoarece deja implementat în motorul în sine.

Situația este similară cu paginarea în comentarii. Poate apărea o situație în care, de exemplu, ați fost spam în comentarii, motoarele de căutare au indexat toate paginile de comentarii, apoi ați observat acest lucru și ați șters toate comentariile. Dar paginile pe care motorul de căutare le-a indexat vor rămâne în continuare, doar că nu vor fi afișate comentarii pe ele, ci un duplicat complet al paginii principale de știri. Și acest lucru este trist, trebuie corectat!

Deschideți fișierul /engine/classes/comments.class.php și în partea de jos găsim:

} } ?>

MAI SUS adăugăm:

//redirecționează la ultima pagină de comentarii dacă adresa URL specifică o pagină mai mare decât cea maximă existentă dacă ($this->cstart > $enpages_count) ( header("HTTP/1.1 301 Mutat permanent"); header("Locație: " . $url ); die(); ) //redirecționează către ultima pagină de comentarii dacă adresa URL specifică o pagină mai mare decât cea maximă existentă

Ei bine, acum totul este în ordine, puteți verifica.

Redirecționați de la link-uri cu caractere suplimentare sau terminații incorecte către adresele corecte

Relevanță: Toate versiunile de DLE. Testat pe 7.x, 8.x, 9.x, 10.x.

Anterior, exista o soluție foarte complexă care depindea de versiunea motorului. Dar de când am scris această postare, mi-am îmbunătățit suficient abilitățile pentru a compune solutie universala pentru toate versiunile de DLE și în general absolut pentru orice motor sau orice site!

Deschideți .htaccess, care se află în rădăcină și găsiți:

RewriteBase / RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteCond %(REQUEST_URI) ^(.*)\.html(.+) RewriteCond %(REQUEST_URI) ^(.*)\.htm$ RewriteCond %(REQUEST_URI) ^(.*)\.ht$ RewriteCond %(REQUEST_URI) ^(.*)\.h$ RewriteCond %(REQUEST_URI) ^(.*)\.$ RewriteRule ^(.*)\.(. *) $1.html

Indiferent de tipul de CNC selectat, când faceți clic pe orice link „strâmb”, vizitatorul va ajunge acolo unde trebuia să meargă.

Redirecționează de la secțiuni sau categorii care nu mai există către pagina principală

Relevanță: Toate versiunile de DLE. Testat pe 7.x, 8.x, 9.x, 10.x.

Un exemplu din viață: ați decis să schimbați structura site-ului sau pur și simplu ați șters unele categorii ca fiind inutile, prin urmare, aceste pagini vor înceta să mai existe, dar linkurile către ele pot rămâne undeva. De exemplu, pe emofani aveam cândva bloguri pentru utilizatori, disponibile la site.ru/blog/, și erau împărțite în utilizatori, ca acest site.ru/blog/user1/, site.ru/blog /user2/ etc. Au trecut mulți ani de când am demolat aceste bloguri ca fiind inutile, dar linkurile către ele și erorile rămân în panoul webmasterului.

Această modificare vă va permite, de asemenea, să evitați apariția adreselor paginilor stiri complete fără o extensie la sfârșit sau chiar adrese de știri complete când lipsește o bucată întreagă de URL la sfârșit. Astfel, în combinație cu punctul anterior, aceste modificări vor ajuta cu 99% la evitarea apariției adreselor incorecte și nedorite.

Deschideți fișierul /engine/engine.php și găsiți:

if (! $category_id ) $category_id = "nedetectat" ;

if (!$category_id) $category_id = "nedetectat";

ÎNLOCUIȚI-O CU:

//rezolvarea problemei cu categorii care nu există dacă (!$category_id AND $view_template != "rss") ( header("HTTP/1.0 301 Moved Permanently"); header("Locație: ($config["http_home_url" ] )"); die("Redirect"); ) //rezolvarea problemei cu categorii care nu există

Redirecționați pentru publicațiile care nu au un ID către pagina principală

Relevanță: Toate versiunile de DLE. Testat pe 7.x, 8.x, 9.x, 10.x.

O altă poveste adevărată preluată de pe site-urile mele. În panoul webmasterului există multe pagini cu o eroare 404 precum site.ru/category/subcat/page-name.html, dar conform regulilor ar trebui să fie ca site.ru/category/subcat/123-page_name.html. Sincer, încă nu înțeleg cum și de ce a dispărut ID-ul de știri și cine s-a referit la publicații în acest fel. Nu am folosit niciodată module sau hack-uri care să îi elimine identificatorul dintr-o adresă URL, așa că dau vina pe utilizatorii care pun „în mod strâmb” link-uri în blogurile lor către site-ul meu. Ei bine, bine, acest lucru nu mai este important, dar este important să ne ocupăm de această problemă!

Numai pentru versiunile DLE 10.x (precum și pentru 9.5, 9.6, 9.7 și 9.8)

Noua versiune a codului, pe lângă redirecționarea adreselor „problematice” ale paginilor de știri complete, redirecționează și paginile statice inexistente sau șterse către pagina principală. Acest lucru se datorează logicii schimbate în motor. Pe de o parte, acest lucru este probabil bun, pentru că rezolvăm două probleme dintr-o singură lovitură. Pe de altă parte, inițial motorul produce eroarea obișnuită 404 - dacă sunteți mulțumit de această stare de lucruri, atunci nu faceți modificările descrise în acest paragraf.

Deschideți fișierul /engine/modules/static.php și găsiți la sfârșit:

@header ("HTTP/1.0 404 Nu a fost găsit"); $lang [ "static_page_err" ] = str_replace ( "(pagina)" , $name . ".html" , $lang [ "static_page_err" ] ) ; msgbox( $lang [ "all_err_1" ] , $lang [ "static_page_err" ] );

@header ("HTTP/1.0 404 Nu a fost găsit"); $lang["static_page_err"] = str_replace("(pagina)", $name.".html", $lang["static_page_err"]); msgbox($lang["all_err_1"], $lang["static_page_err"]);

ÎNLOCUIȚI-O CU:

// 301 redirecționează către pagina principală de la adresele paginilor de știri unde id-ul a dispărut, precum și antetul paginilor statice inexistente ("HTTP/1.0 301 Moved Permanently"); header("Locație: ($config["http_home_url"])"); die(„Redirecționare”); // Redirecționare 301 către pagina principală de la adresele paginilor de știri unde id-ul a dispărut, precum și pagini statice inexistente

Soluție veche. Numai pentru versiunile DLE 7.x, 8.x, 9.0, 9.2 și 9.3

Toate adresele care conțin .html la sfârșit și care nu conțin un ID vor fi redirecționate către pagina principală. Paginile statice existente și corecte, deși nu au nici un ID în URL, nu vor fi redirecționate, dar vor funcționa ca înainte.

Deschideți fișierul /engine/engine.php și găsiți:

if ($subacțiune == "" ) $subacțiune = "spectaculos" ; )

if ($subacțiune == "") $subacțiune = "spectaculos"; )

Adăugăm mai jos:

if ( ( $config [ "allow_alt_url" ] == "da" ) && (strpos ($_SERVER [ "REQUEST_URI" ] , ".html" ) !== false ) && ($dle_module == "principal" ) ) ( antet ("HTTP/1.0 301 Mutat permanent" ); antet ("Locație: ($config["http_home_url"]) " ); die ("Redirecționare" ) ​​; ) // 301 redirecționare către pagina de pornire de la adresele pagini de stiri unde a disparut id

// 301 redirecționează către pagina principală de la adresele paginilor de știri unde id-ul lipsește dacă (($config["allow_alt_url"] == "da") && (strpos($_SERVER["REQUEST_URI"], ".html ") !== false) && ($dle_module == "principal")) (header ("HTTP/1.0 301 mutat permanent"); header ("Locație: ($config["http_home_url"])"); die( „Redirecționare”); ) // 301 redirecționare către pagina principală de la adresele paginilor de știri unde lipsește id-ul

Redirecționați pentru știri șterse sau inexistente către pagina de pornire

Relevanță: Toate versiunile de DLE. Testat pe 7.x, 8.x, 9.x, 10.x.

Ei bine, aceasta este o situație standard și poate apărea pe orice site. Ați șters câteva știri și, desigur, va fi afișată o eroare 404. Dacă nu sunteți mulțumit de acest lucru, și anume că este afișată o eroare 404, atunci puteți face, de exemplu, o redirecționare 301 către pagina principală a site-ului, care cu siguranță există;)

Deschideți fișierul /engine/modules/show.full.php și găsiți:

elseif ( ! $news_found ) ( @ antet ("HTTP/1.0 404 Not Found") ; msgbox( $lang [ "all_err_1" ] , $lang [ "news_err_12" ] ) ; )

elseif(! $news_found) ( @header("HTTP/1.0 404 Not Found"); msgbox($lang["all_err_1"], $lang["news_err_12"]); )

ÎNLOCUIȚI-O CU:

// 301 redirecționează către pagina principală dacă știrile nu sunt găsite/nu există elseif(! $news_found) ( header("HTTP/1.0 301 Moved Permanently"); header("Locație: ($config["http_home_url"] )"); die("Redirecționare"); ) // 301 redirecționare către pagina principală dacă știrile nu sunt găsite/nu există

Acum, când mergi la o publicație inexistentă sau ștearsă, vei fi redirecționat către pagina principală a site-ului.

În general, băieți, am o postare separată, foarte mare despre .
Vă recomand să vă familiarizați cu el, indiferent dacă lucrați doar cu DLE sau cu alt CMS.

Interzicem indexarea secțiunilor site-ului web folosind metaeticheta robots

Relevanță: Toate versiunile de DLE. Testat pe 7.x, 8.x, 9.x, 10.x.

Așa că, amintiți-vă, am publicat recent o postare despre , în care spuneam că nu este dificil să închideți paginile de la indexare folosind robots.txt, ci să le închideți folosind . Recomand cu căldură să citești această postare.

Dacă nu te simți încrezător, recomand cu căldură să-l folosești! Cu modulul, nu veți greși nicăieri și nu va trebui să faceți nicio modificare după fiecare actualizare a motorului.

Deschideți fișierul deja preferat /engine/engine.php, găsiți linia inutilă și ștergeți-o:

dacă ($config["allow_rss"]) $metatags .=