WordPress i 404 – noćna mora

Konačno ste zamenili vaš stari sajt novim i lepim, pravim remek-delom urađenom u WordPress-u i umesto pohvala posetilaca – javljaju vam da se sajt otvara sporo ili ne vidi. A potom je usledio poziv od hosting kompanije u kojem su vam rekli da trošite previše resursa i ljubazno napomenuli da će morati da vas suspenduju kako ne bi ste oborili server. Šta se dešava?

WordPress sam po sebi je jako dobro pisan softver, a uz dodatak modula za keširanje nudi i neprevaziđene performanse među open-source CMS-ovima. Međutim, postoji jedna stvar sa kojom se on, a verovatno i drugi CMS-ovi koji svoj rad baziraju na SEO-friendly linkovima, ne može lako izboriti: masa 404 zahteva koji dolaze istovremeno.

Otkud vam masa 404 zahteva na sajtu odjednom? Najčešći razlog za to su baneri koje ste razmenili sa drugim sajtovima ili prijavili u neki servis “razmene banera”. Dakle, ako na drugim sajtovima postoje linkovi na vaš baner koji se poziva sa vašeg servera i potom greškom uklonite te fajlove sa servera – dobijate 404. Ista stvar se dešaka kada neko hotlinkuje slike direktno sa vašeg servera na svom sajtu, bez vašeg znanja.

Problem

Ukoliko se slika koja nedostaje prikazuje na nekom jako popularnom sajtu, to će sa vaše strane izazvati veliki broj 404 zahteva. Ovo samo po sebi nije problem, međutim sada stupa na scenu default ponašanje WordPress-a: “za svaki fajl koji nedostaje, otvori početnu stranicu i uradi pretragu”!
WordPress se ovako ponaša zbog načina na koji koristi SEO-friendly linkove. Menjanje ovog ponašanja bi, u principu, značilo menjanje samog WordPress-a, što bi neizbežno napravilo glavobolje pri narednim update-ima.

Pošto se ovaj problem dovoljno puta obio o glavu i meni, i mojoj ekipi, a i našim saradnicima, seli smo i razmislili – osim vraćanja slika nazad na mesto odakle su uklonjene (što nije uvek moguće), da li postoji drugi način da se WordPress natera da ne reaguje na zahteve za slikama koje fale ali da i dalje radi normalno tj. reaguje na SEO-friendly zahteve za postove (koji takođe fizički ne postoje kao fajlovi na serveru)?

Rešenje

Na kraju, rešenje do kojeg smo došli je iznenađujuće jednostavno – i posle testiranja, pokazalo se neverovatno efikasno. Ukratko, u WordPress-ov .htaccess se doda deo koji presreće zahteve za slikama koje nedostaju i servira neku default sliku koju odaberemo. I to je to!

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ [NC]
RewriteRule .* /noimage.gif [L]

Ovaj deo koda se postavlja iznad # BEGIN WordPress, a potrebno je i podići noimage.gif sliku u root sajta. Noimage može biti bilo kakva slika, ali idealno treba da bude što manja. Mi smo, recimo, postavili naš logotip veličine 30×30 piksela.
Koji je efekat ovo imalo? Opterećenje servera se višestruko smanjilo, a jedan pogled na grafik zauzeća MySQL-a govori sve:

PRIJAVITE SE ODMAH ZA NAJNOVIJE TEKSTOVE SA NAŠEG BLOGA!

 

Tags: , ,