WordPress: kuidas 301 suunata leheküljelehti ema-URL-ile

See võib olla anekdootlik, aga mina olen seda märganud. Google Search Console muutub oma aruandluses üha põhjalikumaks. Nii palju, et olen hakanud sellele üha enam toetuma ... eriti selleks, et tuvastada saidilt puuduvaid lehti, mis võivad otsingutulemusi negatiivselt mõjutada.
Minu saidi teema hõlmab lähenemisviisi, kus külastajad saavad klõpsata koormus rohkem kui nad sooviksid näha täiendavaid postitusi avalehel, kategooriate arhiivides, siltide arhiivides või isegi otsingutulemustes. See kasutajakogemus (UX) täiustus kaotab lehekülgimise, mille puhul kasutaja (või otsingurobot) peaks lehti ja ajaveebipostituste tulemusi itereerima.
Kuid hoolimata selle funktsiooni lubamisest minu saidil, usub Google ikkagi, et mul on lehekülgede jagamine ja saidil on vigu, kus neid lehti enam ei leita. Kui ma külastasin mõnda neist Google Search Console'is loetletud lehtedest, siis see andis tulemuseks 404Google usub, et minu saidil on probleem, kuigi seda pole.
Selle parandamiseks pidin oma kontole looma kohandatud ümbersuunamise. lapse teema functions.php mis võtab ükskõik millise neist /lehekülgedest/# ja suunab need ümber nende ülemleheküljele. Üks erand, mida ma vajasin, oli minu kohandatud postituse tüüp minu jaoks lühendid.
Täna lisasin oma lapseteemale selle täiustuse, mis sobib kõigile ülaltoodud stsenaariumidele:
-
/page/{number}– Minu avaleht on minu ajaveebi arhiiv, seega annaks see minu „Laadi rohkem“ funktsiooniga 404 vea. Nüüd suunab iga leht ümber minu avalehele. /tag/{tag-slug}/page/{number}– Minu sildilehtedel kuvatakse laadimisfunktsiooniga 404 veakood. Nüüd suunab iga leht ümber ülemlehele./tag/{tag-slug}//category/{category-slug}/page/{number}– Minu kategoorialehed annaksid laadimisfunktsiooniga 404 vea. Nüüd suunab iga kategoorialeht ümber ülemlehele/category/{category-slug}//{category-slug}/page/{number}– Minu kategoorialehed jäävad välja/category/ja see annaks minu laadimisfunktsiooniga 404 vea. Nüüd suunab iga kategoorialeht ümber ülemlehele/{category-slug}/
Minu akronüümide lehed on aga endiselt indekseeritavad:
/acronym/page/{number}on endiselt olemas ning seda saab indekseerida ja roomata.
Lapse teema kood
add_action('init', 'custom_redirect_with_exceptions');
function custom_redirect_with_exceptions() {
// Regular expression to match paths ending with /page/number
// Updated regex to capture potential author or tag path
if (preg_match('/^(\/author\/[^\/]+|\/tag\/[^\/]+|\/[^\/]+)\/page\/\d+/', $_SERVER['REQUEST_URI'], $matches)) {
$base_path = $matches[1]; // Capture the base path including potential author or tag path
// List of base paths to exclude from redirection (e.g., custom post types)
$exclusions = ['/acronyms']; // Replace with your actual CPT base paths
// Check if the base path is not in the exclusions list
if (!in_array($base_path, $exclusions)) {
// No additional check for tag or author specific logic here, base path used as is
$redirect_base = $base_path;
// Construct the new URL to redirect to the base path without pagination
$new_url = home_url($redirect_base);
// Redirect to the new URL with a 301 permanent redirect status
wp_redirect($new_url, 301);
exit;
}
// No action is taken if the URL is in the exclusions list
}
// Check if the URL is just a paginated home URL
else if (preg_match('/^\/page\/\d+/', $_SERVER['REQUEST_URI'])) {
// Redirect paginated home URLs to the home page
wp_redirect(home_url('/'), 301);
exit;
}
}
Kood kontrollib kõigepealt, kas URL vastab lehekülgedega jaotatud vormingule, välja arvatud määratud teed. Kui vastab ja see pole välistatud tee, suunab see ümber selle tee lehekülgedega jaotamatule versioonile. Kui URL on lehekülgedega jaotatud avalehe URL, suunab see ümber algsele lehele.
Siin on ülevaade muudetud WordPressi ümbersuunamiskoodi igast etapist:
- Action Hook registreerimineKood algab toimingu registreerimisega WordPressi
initkonks. Selle toimingu nimi oncustom_redirect_with_exceptionsja see on seatud käivituma WordPressi initsialiseerimisel. See on tüüpiline etapp ümbersuunamiste teostamiseks, kuna brauserile pole veel väljundit saadetud.
add_action('init', 'custom_redirect_with_exceptions'); - Funktsiooni definitsioon:
custom_redirect_with_exceptionsfunktsioon on defineeritud. Siin asub teatud tüüpi URL-ide ümbersuunamise peamine loogika. - URL-i mustri sobitamineFunktsiooni sees on
preg_matchkasutatakse praeguse URL-i (leidub jaotises) kontrollimiseks$_SERVER['REQUEST_URI']) vastab teatud mustritele. Täpsemalt kontrollib see URL-e, mis lõpevad/page/numberja jäädvustab eelneva tee, mis võib olla üldine tee, autori tee (/author/[name]) või sildi tee (/tag/[name]).
if (preg_match('/^(\/author\/[^\/]+|\/tag\/[^\/]+|\/[^\/]+)\/page\/\d+/', $_SERVER['REQUEST_URI'], $matches)) {
$base_path = $matches[1]; See osa hõlmab URL-i osa enne /page/[number], mis on salvestatud $base_path.
- Väljajätmiste käsitlemine: Kood defineerib massiivi nimega
$exclusions, mis sisaldavad teid, mida ei tohiks ümber suunata. Need võivad olla teed konkreetsete kohandatud postitustüüpide või muude erijuhtude jaoks.
$exclusions = ['/acronyms']; Seejärel kontrollib see, kas URL-ist jäädvustatud baastee pole välistamisloendis. Kui baastee on selles loendis, lõpeb funktsioon ümbersuunamist teostamata.
- Ümbersuunamise loogika: Kui URL-i ei välistata, jätkab funktsioon ümbersuunamisloogikaga. Siin pole siltide ega autorite jaoks eraldi loogikat, kuna ümbersuunamisbaas (
$redirect_base) on seatud samaks kui$base_path, mis võib olla URL-i mis tahes vastega osa.
$redirect_base = $base_path;
$new_url = home_url($redirect_base); Uus ümbersuunamise URL on loodud WordPressi abil home_url() funktsioon, lisades mittepagineeritud baastee. Seejärel teostatakse sellele uuele URL-ile 301 püsiv ümbersuunamine, kasutades WordPressi wp_redirect() funktsioon ja skript väljub, et vältida edasist täitmist.
- Leheküljega avalehe URL-i haldamineLisaks peamisele tingimusele if kontrollitakse veel URL-e, mis esindavad avalehe lehekülgedega nummerdatud versioone (nt
/page/2). Kui selline muster tuvastatakse, suunab skript avalehele ilma lehekülgi jaotamata.
else if (preg_match('/^\/page\/\d+/', $_SERVER['REQUEST_URI'])) {
wp_redirect(home_url('/'), 301);
exit;
} - Funktsiooni lõppKui ükski ümbersuunamise tingimustest pole täidetud, siis funktsioon lõpeb ilma ühtegi toimingut tegemata ja lehepäring jätkub tavapäraselt.
Kogu see voog tagab, et teatud tüüpi lehekülgedega URL-id (eriti autori- ja sildilehtede omad) suunatakse ümber oma baasteele, parandades seeläbi kasutajakogemust ja saidi struktuuri, võimaldades samal ajal vajadusel erandeid.



