Blogi, jossa on paljon mielenkiintoista tietoa... Viimeksi muokattu otsikko, Symfony ja haun indeksoinnin kiihdytys

Yksi verkkosivuston optimoinnin vaiheista oikea toiminta Ja onnistunut promootio— optimointi palvelinpuolella. Muita kohtia ovat oikean palvelimen vastauksen määrittäminen "Viimeksi muokattu" -pyyntöön. Tämän parametrin oikea asetus voi lisätä sivuston latausnopeutta ja vaikuttaa myönteisesti sen indeksointiin hakurobottien toimesta.

Mikä on viimeksi muokattu ja miksi sitä tarvitaan?

Kuten nimestä voi päätellä, Last-Modified -otsikko kertoo asiakkaalle (verkkosivuston vierailijalle) ajan viimeinen mahdollisuus sivuston yksi tai toinen sivu. Jos olet sivuston vierailija hakurobotti ja sivusto (palvelin) ei ole määrittänyt (tai konfiguroinut väärin) viimeksi muokattu -vastausta pyydettylle asiakirjalle tai sivulle, hakurobotilla ei ole muuta vaihtoehtoa kuin indeksoida kaikki Internet-resurssin sivut aina uudelleen ja uudelleen jokaisella käynnillä, jolloin syntyy tietyn kuormituksen isännöintisivustolla sijaitsevalle palvelimelle. Entä jos sivujen määrä on satoja tai jopa tuhansia? Palvelimen ominaisuuksista ja ominaisuuksista riippuen on mahdollista, että isännöintipuolella voi törmätä johonkin virheeseen. Tämän lisäksi on huomioitava, että hakurobotilla on rajoitus "kerralla" indeksoitavien sivujen määrälle, joten jos ei ole oikeat asetukset Viimeksi muokattu otsikko, vaarana on, että robotti indeksoi muokkaamattomat sivut, mutta tarvitsemamme uudet sivut eivät.

Perustuu siirtoprotokollaa kuvaavaan RFC 2616 -spesifikaatioon HTML hyperteksti, asiakas voi "kysyä" palvelimelta, onko sivu muuttunut tietty päivämäärä, lähettää palvelimelle "If-Modified-Since" -otsikon. Jos pyydetty sivu ei ole muuttunut, palvelin palauttaa otsikon "304 Not Modified" ja selain ei lataa sivua eikä verkkopalvelin lähetä paljoa dataa. Muussa tapauksessa (jos sivuston sivu on muuttunut edellisen pyynnön jälkeen) palvelin palauttaa "200 OK" -vastauksen ja suoraan itse sivun koodin.

Yllämainittujen lisäksi mainitsemme Yandexin suositukset: "Robotti ei pysty saamaan tietoa siitä, onko sivuston sivua päivitetty viimeisen indeksoinnin jälkeen. Ja koska sivujen määrä, jonka robotti saa sivustolta yhdellä käynnillä, on rajoitettu, muuttuneet sivut indeksoidaan uudelleen harvemmin."

KAIKKI YHTEENSÄ:"Last-Modified" -otsikon tärkeä tarkoitus on ilmoittaa sivuston vierailijalle ja hakurobotille dokumentin viimeisen muokkauksen päivämäärästä.

Miksi viimeksi muokattu on määritettävä oikein?

Määrittämällä viimeksi muokattu palvelinvastauksen oikein voimme saavuttaa useita positiivisia tuloksia sivustollemme:

  • Sivuston sivun latausnopeus kasvaa ihmisille: jos käyttäjä on jo vieraillut sivulla eikä sivu ole seuraavan käynnin aikana muuttunut, vierailijan selain ei lataa sivua uudelleen, vaan näyttää sen välimuistissa olevan kopion;
  • Isännöintialustan (palvelimen) kuormitus vähenee: tällä toiminta-algoritmilla palvelinta ladataan paljon vähemmän, koska vain muuttuneiden sivujen määrä on siirrettävä sivuston vierailijalle;
  • Päivämäärä näytetään viimeinen asiakirja V Hakutulokset: tämä tosiasia voi houkutella kävijöitä sivustollesi, jos "tuore" päivämäärä näytetään;
  • Lajittele päivämäärän mukaan: sivuston sivut osallistuvat hakutulosten lajitteluun päivämäärän mukaan;
  • Hakurobottien suorittama sivuston indeksointi nopeutuu merkittävästi: Koska sivustosi reagoi nopeasti indeksoitujen sivujen päivämäärään, vanhat (jo indeksoidut) sivut "heitetään syrjään", mikä antaa tilaa "tuoreille" asiakirjoille. Tämä kohta on tärkein verkkosivustoa mainostettaessa, koska... korkea indeksointinopeus lisää hakurobottien luottamusta sivustoon.

Kuinka tarkistaa, onko Last-Modified määritetty oikein?

Yksi palveluista, joissa voit tarkistaa määritetyn Last-Modified-palvelinvastauksen oikeellisuuden (ja jopa olemassaolon), on samanniminen last-modified.com

Kirjoita syöttökenttään verkkosivustosi osoite tai tietty sivu ja napsauta "Tarkista" -painiketta. Palvelun tulos on osoitus sivustosi vastauksesta "Last-Modified"- ja "304 Not Modified"-otsikoiden pyyntöön. Esimerkki tällaisesta tarkistuksesta:

Viimeksi muokattuja määritetään

Katsotaanpa viimeksi muokatun HTTP-otsikon vastauksen toteutusta PHP:ssä.

Internetistä löydät usein seuraavat suositukset Viimeksi muokatun määrittämiseksi:

Haluan vain huudahtaa: "Emme tarvitse tällaista jääkiekkoa!" Ja selvitetään miksi. Vastauksena käyttäjän pyynnöstä toiminto gmdate palauttaa sen meille nykyinen päivämäärä Greenwichin keskiaika (GMT). Ja tämä tapahtuu joka kerta jokaisen käyttäjän tai hakurobotin pyynnön yhteydessä - palvelin palauttaa täsmälleen sen nykyinen päivämäärä. Osoittautuu, että aina kun hakukoneet vierailevat sivustollasi, he näkevät, että pyydetty sivu on juuri päivitetty. Tästä voi olla "hyödyllistä" vain muutaman kerran... Jonkin ajan kuluttua hakukone huomaa, että sitä "huijataan" ja menettää luottamuksen sivustoosi. Näin ollen tällainen toteutus ei sovi meille.

Käännytään yllä olevan resurssin puoleen saadaksesi apua. last-modified.com. Se esittelee myös PHP:n Last-Modified HTTP-otsikon toteutuksen. Se näyttää tältä:

$LastModified_unix = 1294844676;

$IfModifiedSince = false;



if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) (
poistua;
}

Katsotaanpa, kuinka tämä koodi toimii. Muuttuva $LastModified_unix aseta manuaalisesti muotoon Unix-aikaleima(Unix-aikakauden alusta kuluneiden sekuntien määrä - 1. tammikuuta 1970 lähtien).

Toiminto gmdate palaa nykyinen aika GMT muodossa Päivä, DD ma YEAR HH:MM:SS GMT.

Seuraavaksi: tarkista aika, jolloin sivua on viimeksi muokattu, tarkista saatavuus Jos-Muokattu-Alkaen, jos sellainen on, annamme sen pois 304 Ei muutettu ja lopeta käsikirjoitus. Muussa tapauksessa luomme otsikon Viimeksi muokattu ja luovuta koko sivu.

Yllä olevassa vaihtoehdossa ehdotetaan kellon asettamista $LastModified_unix käsin. Mutta entä jos sivustolla on paljon sivuja? Tätä varten "modernisoidaan" käsikirjoitusta hieman korvaamalla vain ensimmäinen rivi:

$LastModified_unix = strtotime(date("D, d M Y H:i:s", filectime($_SERVER["SCRIPT_FILENAME"])));
$LastModified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);
$IfModifiedSince = false;

if (isset($_ENV["HTTP_IF_MODIFIED_SINCE"]))
$IfModifiedSince = strtotime(substr($_ENV["HTTP_IF_MODIFIED_SINCE"], 5));

if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]))
$IfModifiedSince = strtotime(substr($_SERVER["HTTP_IF_MODIFIED_SINCE"], 5));

if ($IfModifiedSince && $IfModifiedSince >= $LastModified_unix) (
header($_SERVER["SERVER_PROTOCOL"] . " 304 Ei muokattu");
poistua;
}

header("Viimeksi muokattu: ". $LastModified);

Päivitetyssä versiossa ensimmäinen koodirivi muuntaa päivämäärän tekstiesityksen muotoon Englannin kieli muodossa olevaan tarraan Unix-aikaleima, jolloin käytetään automaattisesti laskettua muutosaikaa tämänhetkinen sivu sivusto.

Kaikki on valmista! Nyt meidän tarvitsee vain liittää tuloksena oleva koodi osioon ... jokaisella sivuston sivulla ja nauti suuri nopeus ladata sivuja ja indeksoida ne hakurobottien avulla.

Autamme sinua viimeksi muokatun määrittämisessä!

Aloita yksinkertainen puhelu T-Designissa! Puhelinnumeromme on 8 499 340-17-82 - toimii tilassa pysähtymätön, jotta saat nopeasti sinua kiinnostavaa tietoa sivustosi kehittämis- ja tukiongelmien ratkaisemisesta. Neuvomme kaikissa kysymyksissä ja me valitaan optimaalinen tariffi yrityksellesi.

Miksi määrittää Last-Modified -otsikko. Yritetään selvittää, kuinka Last-Modified -otsikko määritetään mahdollisimman nopeasti ja yksinkertaisesti.

Aluksi sanon, että tämä on välttämätöntä ensisijaisesti palvelimen kuormituksen vähentämiseksi ja sivujen indeksoinnin nopeuttamiseksi. Tästä syystä on tarpeen määrittää Last-Modified -otsikko, erityisesti suuria resursseja varten iso määrä sivuja.

Tämän otsikon tarkoituksena on kertoa asiakkaalle (selaimelle tai hakukoneelle) tietoja tietyn sivun viimeaikaisista muutoksista. Asiakas lähettää If-Modified-Since-otsikon palvelimelle. Jos sivulla ei havaita muutoksia, "304 Not Modified" -otsikko palautetaan palvelimelta. Sivu ei kuitenkaan lataudu.

Jos muutoksia on tehty, se huomioidaan ja palvelin palauttaa otsikon "200 OK" (sivu latautuu päivitetyllä sisällöllä).

Viimeksi muokattu-asetuksen oikea asettaminen tarjoaa seuraavat edut:

  • päivämäärä näkyy hakutuloksissa uusin päivitys sivun sisältö;
  • Kun sivut on lajiteltu hakukoneessa päivämäärän mukaan, ne ovat korkeammalla sijalla.
  • Sivujen indeksointi nopeutuu huomattavasti.
  • Miksi robotit indeksoivat sivustot, joissa viimeksi muokattu on määritetty nopeammin?

    Vastaus on yksinkertainen: jos vain 20 sivua sivustolla on muutettu, robotin ei tarvitse indeksoida kaikkia 500 uutta sisältöä etsiessään, koska Viimeksi muokattu ilmoittaa sivut, joissa on muutoksia.

    Viimeksi muokattu on erityisen tärkeä resursseille, joilla on paljon sivuja, koska robotille annetaan aikaa indeksoida jokainen sivusto rajoitettu määrä aikaa, eikä hänellä ehkä ole aikaa päästä tarvittaville sivuille.

    Viimeksi muokatun määrittäminen

    Ensin sinun on tarkistettava, onko tämä otsikko määritetty. Voit tehdä tämän käyttämällä palveluita varvy.com, last-modified.com tai tools.seo-auditor.com.ru. Jos tarkistus osoittaa, että otsikkoa ei ole, sinun tulee aloittaa sen määrittäminen.

    Jos sinulla on staattinen sivusto, sinun on kirjoitettava jokaiselle sivulle koodi, jonka näet näytöllä:

    Muutamme koodin päivämäärän manuaalisesti jokaisen sisällön muutoksen jälkeen. Ja mitä tapahtuu joka kerta, kysyt minulta? Kyllä, jos sivusto on staattinen.

    Jos sivusto on dynaaminen, käytämme asetusta PHP:ssä. Seuraava koodi kohdataan usein:

    header("Viimeksi muokattu: " . date('r',strtotime($post->post_modified)))

    Se on lisättävä tiedostoon header.php. Mutta se toimii vain viesteille ja sivuille, eikä se toimi pääsivulla. Se ei myöskään sovellu taksonomioiden, arkistojen tai uusien kommenttien laskemiseen.

    $LastModified_unix = 1294844676;

    $Last Modified = gmdate("D, d M Y H:i:s \G\M\T", $LastModified_unix);

    $IfModifiedSince = false;

    if (isset($_ENV['HTTP_IF_MODIFIED_SINCE']))

    $IfModifiedSince = strtotime(substr($_ENV['HTTP_IF_MODIFIED_SINCE'], 5));

    if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))

    $IfModifiedSince = strtotime(substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 5));

    If ($IfModifiedSince && $IfModifiedSince >= &LastModified_unix) (

    header($_SERVER['SERVER_PROTOCOL'] . '304 Ei muokattu');

    header('Last-Modified: ' . $LastModified);

    Voit myös muokata otsikkoa kirjoittamalla kaksi riviä .htaccess-tiedostoon:

    RewriteRule .* —

    RewriteRule .* —

    Mutta tässä tapauksessa sinun on tarkistettava, tuleeko hosting-puolella ongelmia.

    Jotta koodeja ei kirjoitettaisi, voit käyttää valmiita ratkaisuja Viimeksi muokatun asettamiseen. Esimerkiksi CMS WordPressissä on Clearfy- ja Last Modified Timestamp -laajennukset. Asennus voidaan tehdä WP Super Cache -laajennuksella. Voit tehdä tämän aktivoimalla lisäasetuksissa "Virhe 304" -kohdan (304-vastausten tuki on oletuksena poistettu käytöstä, koska joillakin isännöintisivustoilla saattaa ilmetä ongelmia). Myös muilla sisällönhallintajärjestelmillä on omat lisäosat, tai viimeisenä keinona voit tilata laajennuksen ohjelmoijalta.

    On ymmärrettävä, että Viimeksi muokattu -asetus ei ole aina hyödyllinen (esimerkiksi kun jokaisella sivulla on "päästä päähän" -tietolohko, jonka sisältö vaihtuu säännöllisesti. Tässä tapauksessa hakukoneet saattavat lakata havaitsemasta tietoja uutena ja vierailevat sivustollasi harvemmin.

    Muissa tapauksissa, määrittämällä Last-Modified, saat:

    • liikenteen säästöt;
    • nopeuttaa verkkosivustoa;
    • noudata Googlen ja Yandexin hakukoneiden suosituksia, mikä nopeuttaa merkittävästi indeksointia ja lisää sivujen näkyvyyttä hauissa. Tämä näkyy erityisesti resursseissa, joissa on paljon sivuja.

    Viimeksi muokattu- ja If-Modified-Since-otsikot WordPressille

    Harvat ihmiset kiinnittävät huomiota HTTP-otsikoihin Viimeksi muokattu Ja Jos-Muokattu-Alkaen kun optimoit sivustoasi, mutta turhaan! On tärkeää, että sivu, jonka sisältö ei ole muuttunut hakurobotin viimeisimmän käynnin jälkeen, palauttaa 304-koodin, joka itse asiassa osoittaa, että tätä sivua ei ole täydennetty millään - et ole muokannut tai täydentänyt tekstiä , tähän viestiin ei ole lisätty kommentteja jne. P.

    Jos tämä http-otsikko puuttuu, Yandexissä, kun lajitellaan tuloksia päivämäärän mukaan, sivusto ei näy useimmille käyttäjille.

    Siksi on tärkeää, että et vain määritä sitä oikein, vaan myös päivitä päivämäärä nykyiseen aina, kun muokkaat tietuetta. Tämä on tehtävä manuaalisesti.

    Kommenttien kanssa se on yksinkertaisempaa: kun vierailija lisää kommentin, niin muuttujaan $last_modified_time kommentin lisäysaika syötetään automaattisesti - tämä on päivämäärä, jolloin sivua on viimeksi muokattu.

    Miksi tarvitsemme Last-Modified- ja If-Modified-Since-otsikot?

    1. Kun palvelin lähettää tällaisen koodin, kaikkien sivulla olevien PHP-komentosarjojen suorittaminen ei edes käynnisty. Sivu ladataan hakuvälimuistista, ja tämä, kuten ymmärrät, vähentää huomattavasti palvelimen kuormitusta isännöitsijäsi suureksi iloksi ja nopeuttaa sivun lataamista vierailijalle, mikä on myös hyvä uutinen.

    Miten tämä tapahtuu?

    Indeksoidessaan Internetiä Google ja Yandex-hämähäkit tallentavat kopion jokaisesta sivustosta tietokantaansa. Tämä kopio toimii eräänlaisena esimerkkinä vertailua varten: onko kaikki edelleen ennallaan vai onko tapahtunut muutoksia. Ja jos Viimeksi muokattu- ja If-Modified-Since-otsikoita ei ole määritetty tai ne on määritetty väärin, sivuston uudet sivut indeksoidaan ja hakukoneen välimuistin pääsivua ei päivitetä pitkään aikaan, aivan kuten kommentti syötettä ei päivitetä.

    Mutta usein päivitettävillä sivuilla (uutissyötteet päivitetään useita kertoja päivässä, aktiivisesti kommentoidut blogit jne.) sillä on yksi haittapuoli: välimuistin tiedot vanhenevat liian nopeasti ja ihminen ei edes lataa sivua uudelleen näe viimeisimpiä uutisia. , ei näe uusia kommentteja. Mutta se ei ole niin paha. Ongelmana on, että robotti ei myöskään näe tätä, ellei oikeaa Last-Modified -otsikkoa ole mukana.

    header("Muokattu viimeksi: ".gmdate("D, d M Y H:i:s ")."GMT");

    Jos sivustoasi päivitetään usein (esimerkiksi viestejäsi kommentoidaan usein), voit poistaa välimuistin käytöstä seuraavilla otsikoilla:

    header("Expires: ".gmdate("D, d M Y H:i:s", time() + 7200)." GMT");

    Tämä tarkoittaa, että tallennetun kopion kelvollisuus on tarkistettava jokaisen pyynnön yhteydessä.

    Miten välimuisti toimii selaimissa?

    Jos sitä ei ole poistettu käytöstä kutsumalla no_cache-funktiota, niin Firefoxissa ja IE:ssä sivu tallennetaan välimuistiin, ja kaikissa myöhemmissä pyynnöissä tämä sivu palautetaan.

    Voit päivittää sivun ja hankkia uusimman version painamalla näppäinyhdistelmää Ctrl+F5, tavallinen "Päivitä"-painike (F5) ei toimi. Ja minun on sanottava, että IE-välimuistissa olevat asiakirjat voidaan tallentaa erittäin, hyvin pitkään.

    Operassa välimuistisivu tyhjennetään painamalla "Refresh"-painiketta tai F5-näppäintä. Yhdistelmä CRTL+F5 Operassa - lataa uudelleen kaikki avoimet välilehdet Kuten ymmärrät, jos avaat niitä paljon, saatat kasvaa parta odotellessa.

    Jos poistat sivun välimuistin käytöstä no_cache-toiminnolla, Opera ja Firefox käyttävät tällaista sivua käytettäessä mekanismia If-Modified-Since-otsikon kanssa. Siten välimuisti tapahtuu, mutta selain kysyy palvelimelta, onko sivu todella muuttunut vai ei - tämä on oikea tapa esittää kysymys.

    Siksi sinun on otettava käyttöön myös tämän parametrin käsittely. En kuvaile, mitä tämä toiminto tarkoittaa, annan vain koodin, joka lähettää otsikot oikein eikä aiheuta ristiriitoja useimmilla isännöintisivustoilla, joiden kanssa olen työskennellyt. Tämä muotoilu toimii sweb.ru, eomy.net, timeweb.ru, fastvps.ru, startlogic.com

    header("Expires: ".gmdate("D, d M Y H:i:s", time() + 7200)." GMT");
    header("Cache-Control: ei välimuistia, täytyy tarkistaa");
    $mt = filemtime($tiedoston_nimi);
    $mt_str = gmdate("D, d M Y H:i:s ")."GMT";
    if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) &&
    strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"]) >= $mt)
    (header("HTTP/1.1 304 Ei modifioitu");
    kuolla;
    }
    header("Viimeksi muokattu: ".$mt_str);
    echo $teksti;
    header("Vaihtele: Hyväksy-koodaus");
    header("Hyväksy-koodaus:gzip,deflate,sdch");
    ?>

    Joten sinun tarvitsee vain kopioida tämä koodi ja lisää se tiedostoon header.php Sinun teemasi EDELLÄ . Nuo. tämä koodi on tiedoston yläosassa ENNEN kaikkea muuta koodia


    Huomio! Ennen kuin lisäät mitään, tallenna tämä tiedosto tietokoneellesi, jotta voit palauttaa alkuperäisen version, jos omasi ei salli tällaista otsikkomääritystä.

    Tarkistamme tuloksen käyttämällä Viimeksi muokattu- ja If-Modified-Since -otsikon tarkistuspalvelua http://last-modified.com/ru/if-modified-since.html


    • Jos tulos on positiivinen, pyyhimme hiki otsalta ja menemme juomaan teetä.
    • Jos tulos on negatiivinen, sama rakenne voidaan lisätä tiedostoon index.php WordPressin juuressa (tämän tapasin isännöitimessä timeweb.ru). Samoin yli kaiken muun siinä. Älä vain unohda tätä päivittäessäsi - hakemistotiedosto korvataan vakiomuodossaan.

    Voila! Asettamalla Last-Modified- ja If-Modified-Since-otsikot oikein, saimme joukon bonuksia:

    • Lisääntynyt sivun latausnopeus, mikä on tärkeää Google robotti ja mukavaa ihmisille.
    • Vähensimme palvelimen kuormitusta, mikä miellytti isännöitsijää.
    • Yandex-hakutuloksissa näkyy viimeisen sivun päivityksen päivämäärä, mikä joissain tapauksissa on erittäin tärkeä ihmisille, ja siksi tällä on epäsuorasti positiivinen vaikutus käyttäytymistekijöihin.
    • Sivustomme sivut osallistuvat lajitteluun hakukoneet päivämäärän mukaan - kyllä, kyllä, tätä käyttävät kokeneet käyttäjät.
    • Ja kaiken edellä mainitun seurauksena sivustomme indeksointi hakukoneiden toimesta nopeutuu huomattavasti.

    Monet kehittäjät unohtavat verkkosivustoja luodessaan erittäin hyödyllisen Last-Modified -otsikon, jonka ansiosta voit optimoida verkkosivujen lataamisen ja helpottaa hakurobottien työtä. Seuraavaksi yritän täyttää tämän ärsyttävän aukon.

    Mitä varten Last-Modified -otsikko on tarkoitettu?

    Otsikon tehtävä, kuten nimestä voi arvata, on ilmoittaa asiakkaalle verkkodokumentin viimeisen muokkauksen päivämäärä. RFC 2616 -määrityksen perusteella asiakas voi "kysyä" verkkopalvelimelta, onko sivu muuttunut tietyn päivämäärän jälkeen, lähettämällä palvelimelle "If-Modified-Since" -otsikon. Jos sivu ei ole muuttunut, palvelin palauttaa vain "304 Not Modified" -otsikon, muuten palvelin palauttaa "200 OK" -otsikon ja sivun rungon. Kuten näette, tästä on hyötyä sekä palvelimelle että asiakkaalle: selain ei lataa sivua uudestaan ​​​​ja uudestaan ​​​​ja verkkopalvelin tuottaa vähemmän tietoa.

    Mitkä sivustot indeksoidaan paremmin? Dynaaminen vai staattinen?

    Pari vuotta sitten hakukoneoptimoijien keskuudessa käytiin keskustelua siitä, mitkä sivustot indeksoidaan paremmin? Dynaaminen, kirjoitettu esimerkiksi PHP:llä tai staattinen, ilman ohjelmointikieliä. Viimeksi muokattu -otsikon tunteminen voi vastata tähän kysymykseen. Asia on, että verkkopalvelin itse käsittelee "If-Modified-Since" -otsikon, jos tiedosto on staattinen. Dynaamisen sivun luomisen tapauksessa kaikki vastuu vastauksesta on ohjelmointikielellä ja kehittäjällä. Ja koska kehittäjä ei useinkaan ole kiinnostunut tästä asiasta, otsikoita ei anneta ollenkaan.

    Kuinka Last-Modified -otsikko nopeuttaa haun indeksointia?

    Se on yksinkertaista, kuten Yandex-ohjeessa kirjoitetaan, "robotti ei pysty saamaan tietoa siitä, onko sivuston sivua päivitetty viimeisen indeksoinnin jälkeen. Ja koska robotin sivustolta yhdellä käynnillä saamien sivujen määrä on rajoitettu, muuttuneet sivut indeksoidaan uudelleen harvemmin."

    Kuvitella. On verkkosivusto, jossa on 10 tuhatta sivua. Sivusto on kirjoitettu PHP:llä. Last-Modified -otsikkoa ei palauteta oikein. Hakurobotti ei voi saada tietoa siitä, onko sivuston sivua päivitetty viimeisen indeksoinnin jälkeen. Mitä hän tekee? Indeksoi kaikki sivut!!! Eikä vain niitä, jotka ovat muuttuneet.
    Varmasti! Monet sivustot käyttävät sivustokarttaa. Mutta sivustokartta on suositus, apua hakukoneoptimoija. Se ei voi korvata Last-Modified -otsikkoa!

    Viimeksi muokattu otsikon asettaminen ja käsittely php:ssä

    Jotta verkkopalvelin voisi välittää If-Modified-Since-otsikon php-backendille, sinun on kerrottava sille tästä!

    Nginx + php -yhdistelmälle se on seuraava:

    sijainti ~ \.php$
    {

    jos_muokattu_alkaen;

    Fastcgi_pass fcgi;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /<путь >/web$fastcgi_script_name;

    fastcgi_pass_header Viimeksi muokattu;
    sisältää fastcgi_params;
    }

    Apache + php -yhdistelmälle näin

    #If-Modified-Since ( jos php on ei asennettu cgi:nä ja kommentoi alla olevat rivit)
    RewriteRule .* -
    RewriteRule .* -

    * Tämä lähdekoodi korostettiin Source Code Highlighterilla.


    Jos php toimii moduulina, sinun ei tarvitse määrittää mitään!

    Yksinkertainen php-koodi If-Modified-Since-pyynnön käsittelemiseen,

    $qtime = isset($_SERVER["HTTP_IF_MODIFIED_SINCE" ])? $_SERVER["HTTP_IF_MODIFIED_SINCE" ]:"" ;

    $modified = substr(gmdate("r" , $aikaleima), 0, -5)."GMT" ;

    jos ($hdr == $muokattu)
    {
    header("HTTP/1.1 304 Ei modifioitu");
    header("Viimeksi muokattu: $muokattu");
    exit();
    }
    header("Viimeksi muokattu: $muokattu");
    //renderöi

    * Tämä lähdekoodi korostettiin Source Code Highlighterilla.

    Kuinka käsitellä If-Modified-Since-pyyntöä symfonyssa?

    symfonylla on jo otsikon käsittelymekanismi. Kehittäjän tarvitsee vain välittää otsikko sfWebResponse-objektille. Jos määrität sen, kehys tekee kaiken itse.
    $datestamp = aika();
    $response->setHttpHeader("Viimeksi muokattu" , $response->getDate($datestamp));

    * Tämä lähdekoodi korostettiin Source Code Highlighterilla.


    Koska sivu sisältää yleensä erilaista sisältöä, kirjoitin menetelmän, joka asettaa uusimman lähetetyistä otsikoista!
    staattinen julkinen funktio setLastModified($datestamp)
    {
    $response = sfContext::getInstance()->getResponse();
    $pyyntö = sfContext::getInstance()->getRequest();

    if (on_array($datestamp))
    {
    rsort($päivämääräleima, SORT_NUMERIC);
    $päivämääräleima = $päivämääräleima;
    }

    if (!$response->hasHttpHeader("Muokattu viimeksi" ))
    {
    $response->setHttpHeader("Viimeksi muokattu" , $response->getDate($datestamp));
    }
    muu
    {
    $origLastModified = strtotime($response->getHttpHeader("Viimeksi muokattu" ));
    if ($origLastModified< $datestamp)
    $response->setHttpHeader("Viimeksi muokattu" , $response->getDate($datestamp));
    }
    }

    * Tämä lähdekoodi korostettiin Source Code Highlighterilla.


    Se on erittäin kätevä käyttää, jos sivulla on esimerkiksi 3 uusinta videota, 3 Viimeisimmät artikkelit ja siellä on muutakin. Lataamalla kunkin mallin tietokannasta, voimme kutsua menetelmän ja saada viimeisimmän muokkauspäivämäärän vastauksessa.
    Kiinnostuneille otsikon käsittelykoodi on luokkaa sfCacheFilter.class.php.

    Lopuksi haluaisin sanoa, että Last-Modified -otsikon käyttäminen ei ole aina perusteltua. Esimerkiksi, jos sivustolla on 5 tuhatta sivua ja jokainen sisältää saman lohkon usein vaihtuvalla sisällöllä, otsikon käyttäminen on hyödytöntä! Tässä tapauksessa voit antaa asiakkaille ja hakuroboteille vain erilaisia ​​otsikoita. Mutta minun kohdallani robottien pettäminen ei johda mihinkään hyvään. No, tai poista tämä lohko ;).

    Voit tarkistaa sivustolta oikean otsikon käsittelyn

    Tässä artikkelissa määritämme tärkeimmän palvelimen vastausotsikon - Last-Modified, jonka vuoksi palvelimen kuormitus laskee 20-30%, ja sivustosi indeksointi nopeutuu merkittävästi. Opetamme myös palvelimesi antamaan 304-virheen, kun hakurobotti saapuu sivustollesi If-Modified-Since-otsikon avulla.

    Miksi tarvitsemme Last-Modified -otsikon?

    Ensinnäkin haluaisin keskustella Last-Modified -otsikon merkityksestä. Mutta kuten käytäntö osoittaa, äärimmäisen merkityksensä ja välttämättömyytensä ohella tämä nimike unohdetaan jotenkin yleisesti ja aliarvioitiin täysin epäoikeudenmukaisesti. Jos luet hakukoneiden suosituksia, joissa selkeästi ja avoimesti sanotaan viimeksi muokatun (tietyn sivun viimeisen muokkauksen päivämäärä) lähettämisen tärkeydestä otsikoissa, sinulla ei ole epäilystäkään siitä, että tämä on tehtävä ja ennemmin sen parempi. Tämä pätee erityisesti resursseihin, joilla on paljon ja keskisuurta liikennettä ja joiden sisältöä päivitetään säännöllisesti. Staattiset 10-sivuiset sivustot voivat kuitenkin pärjätä ilman tätä tätä toimintoa Sillä ei ole kielteisiä vaikutuksia tai estä sinua.

    Viimeksi muokattu -otsikko sisältää sivun GMT-päivämäärän ja -ajan viime kerta muuttunut. Jokaisella sivulla on oma päivämäärä. Lähes kaikki olemassa olevat sisällönhallintajärjestelmät tallentavat nyt sivujen tai viestien muokkauspäivämäärän, ja sivun päivityspäivä muuttuu myös, kun joku jätti indeksoidun kommentin (kaikki riippuu tietyt asetukset). Mutta jostain syystä eivät kaikki nykyaikaiset järjestelmät hallinnot edellyttävät saman sivun muokkauspäivämäärän lähettämistä otsikkona, eivätkä myöskään reagoi millään tavalla vastaanotettuun If-Modified-Since-otsikkoon, mutta siitä lisää hieman myöhemmin.

    Tosiasia on, että hakurobotti voi melko usein mennä säännöllisesti päivitettävälle sivustolle ja skannata sen sivut tärkeysjärjestyksessä, joskus joudut jopa asettamaan Crawl-delay-parametrin robots.txt-tiedostossa, jotta liian aktiivisen toiminnan kiihkoa voidaan lieventää. robotit ylikuormittavat valitettavaa palvelinta, ja joskus Päinvastoin, ihmiset työskentelevät kovasti kuukausia näkemättä mitään tuloksia vain lisätäkseen hakurobottien sivustolla käymien tiheyttä. Jos tällainen sivusto ei kerro hakurobotille milloin mitä sivuja on viimeksi muutettu ja ovatko ne muuttuneet ollenkaan edellisen käynnin jälkeen, indeksointirobotti puolestaan ​​käy läpi sivut yhä uudelleen ja uudelleen ikään kuin ne olisivat muuttuneet, vaikka tämä saattaakin ei pidä paikkaansa. Ja koska yhden hakubotin käynnin aikana ladattavien sivujen määrä on rajoitettu, se ei välttämättä pääse uusiin artikkeleihisi ja palaa kotiin, koska se on käyttänyt rajoituksen vanhoille sivuille, joita ei päivitetty ollenkaan. Epäilemättä ennemmin tai myöhemmin skanneri pääsee silti uusille sivuille, mutta se on paljon myöhemmin. Tämä on muistettava aksioomana, ja joka ei usko siihen, lukee viimeksi muutetusta Yandex-verkkosivustolta.

    Sama koskee tavallisia sivuston vierailijoita, koska jos vanha artikkelisi on paikallisessa välimuistissa, eikä palvelin lähetä 304 Not Modified -otsikkoa, se ladataan uudestaan ​​ja uudestaan, joka kerta alusta alkaen, mikä lisää kuormitusta palvelin. Jos silloin tällöin viimeinen vierailu Jollekin sivulle ja lisäämällä sen välimuistiin, mikään ei ole muuttunut, tarvitset palvelimesi lähettämään vastauksessa 304 Not Modified -otsikon ja lopettamaan sivun luomisen. Miksi ladata vanhoja sivuja joka kerta, jos mikään ei ole muuttunut niissä? Niiden sisältö voidaan ottaa välimuistista. Perusteellista ja tehokasta!

    Palvelimen vastaus If-Modified-Since-otsikkoon

    Lähestyimme sujuvasti toista, ei vähempää tärkeä pointti- palvelimesi reaktio hakubottien lähettämään If-Modified-Since-otsikkoon. He tekevät tämän tarkistaakseen, onko sivusi muuttunut edellisen vierailun jälkeen, ja välittääkseen tämän ajan otsikossa. Tässä tapauksessa palvelimesi on verrattava botin käyttämän sivun viimeistä päivitysaikaa sen ilmoittamaan viimeiseen käyntiin. Jos sivulle ei ole ilmestynyt mitään uutta sen jälkeen, palvelimen tulee vastata 304 Not Modified -otsikolla ja lopettaa tiedonsiirto poistumalla suoritettavasta komentosarjasta (PHP:n tapauksessa tämä on toiminto poistu). Saatuaan 304-vastauksen hakurobotti ymmärtää, ettei täällä ole enää mitään tekemistä, ja siirtyy seuraava sivu, mikä säästää paljon aikaa.

    Tämän ansiosta sivustosi indeksointi on huomattavasti nopeampaa ja vähentää myös palvelimen turhaa kuormitusta.

    Haluaisin lisätä, että yhdessä artikkelissamme keskustelimme toisesta mielenkiintoisella tavalla nopeuttaa sivuston indeksointia. Siellä puhuimme erityisesti sivustoista WordPress-moottori ja tähän käytimme erityisiä ping-palvelimia, joiden osoitteet annoimme ja osoitimme, mitä niille pitäisi tehdä.

    PHP-toiminto

    Joten mennään suoraan asiaan ja katsotaan asiantuntijoidemme kehittämää ja useilla sivustoilla onnistuneesti testattua toimintoa:

    Funktio lastModified($gmdate) ( $IfModifiedSince = false; if (isset($_ENV["HTTP_IF_MODIFIED_SINCE"]) tai isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) ( $IfModified_Since ? ]." 304 Ei muokattu" ) header("Muokattu viimeksi: ".$gmdate);

    Haluan korostaa, että funktio käyttää GMT-päivämäärää ja -aikaa ainoana argumenttina - gmdate() , eikä Päivämäärä(), älä hämmenny. Argumentti, jonka funktio vastaanottaa, on päivämäärä ja kellonaika, jolloin sivua on viimeksi muokattu. Mistä sen saa, riippuu hallintajärjestelmästä, esimerkiksi WordPressissä saat sen näin:

    $WordpressPageLastModified = get_the_modified_date("r");

    Entä jos hallintojärjestelmää ei ole ja me puhumme staattisesta verkkosivuston sivusta, johon tehdään muutoksia manuaalisesti, suoraan koodissa. Tässä tapauksessa keksimme myös ratkaisun lähettää otsikkoon viimeisimmän muutoksen päivämäärä:

    $StaticPageLastModified = gmdate("D, d M Y H:i:s \G\M\T", filemtime($_SERVER["DOCUMENT_ROOT"]."/index.php"));

    SISÄÄN tässä tapauksessa käytämme toimintoa filemtime(), joka palauttaa ajan, jolloin tiedostoa on viimeksi muokattu Unix-aikamuodossa.

    Emme muuten suosittele tämän päivämäärän keksimistä, vaikka sivusi olisi pysynyt paikallaan koko tämän ajan. Tämä temppu ei johda mihinkään hyvään, koska... hakukoneet tarkistavat silti, onko sivu todella muuttunut, ja voivat rangaista sinua heidän harhaanjohtamisesta.

    Tarkistetaan palvelimen vastausta

    Internetissä on useita palveluita palvelimen vastauksen tarkistamiseen, mutta kuten käy ilmi, kaikki eivät tee sitä oikein, eivätkä kaikki mahdollista palvelimesi käyttäytymisen seurantaa vastauksena lähetettyyn If-Modified- Otsikon jälkeen, mutta meidän on varmistettava, että palvelin lähettää otsikon 304 Ei muokattu, jos sivua ei ole päivitetty viimeisimmän käynnin jälkeen.

    Voit tarkistaa palvelimen vastauksen verkkosivustoltamme, mutta täydellisimmän kuvan saamiseksi suosittelemme silti käyttämään virallista Yandex-palvelua. Siellä voit määrittää kaikki tarvittavat otsikot sekä valita kuvitteellisen viimeisen käynnin ajan. Yandex antaa sinun myös valita hakubotin tyypin, mutta tämän työkalun käyttämiseksi sinun on lisättävä ja vahvistettava oikeudet sivuston hallintaan Yandex.Webmasterissa, mikä on rehellisesti sanottuna aina tehtävä ensin.