Cześć!
Chciałem poddać w wątpliwość mit jedynego słusznego pluginu do SEO ( ͡° ͜ʖ ͡°) ...
który zabija każdy większy blog i sklep.
Tekst jest dla ludzi, którzy tworzą strony - będzie technicznie i konkretnie.
Na końcu polecam identyczny plugin do SEO, który nie kosztuje 600 euro rocznie i nie śmieci reklamami.
Pominę kwestię “czym jest SEO” i przejdę do konkretu: Czemu plugin zabija większe strony?
Dobijamy do 256MB RAM dla CMS ?!?
Od 4 lat nie ogarnęli term-meta - mimo próśb społeczności.
WordPress starszych jak 4 lata trzeba by zrobić klasę proxy. Ludzie wklejali propozycję kodu.
Plugin zabija MySQL bo pchają do wp_options wszystko co dotyczy każdej taksonomii WordPress.
Masz 10 tagów, kilka kategorii - możesz spać spokojnie.
Na portalach, sklepach internetowych, forach taksonomia idzie w setki lub tysiące sztuk.
Jeśli do każdego Taga i Kategorii stworzysz opis, przypiszesz ustawienia, zrobisz optymalizację to wiedz, że wszystko jest trzymane w jednym miejscu - tablicy wp_options.
Czemu to jest złe?
Chcąc wyświetlić 1 kategorię lub tag musimy wybrać informacje o wszystkich tagach i taksonomiach jakie tylko mamy na stronie.
Często kilka MB lata między komponentami CMS-a - głównie z MySQL bo Memcached/APCu ma limit 1MB więc... masz cache ale nie użyjesz go. Masz cache w Redis - super limit 512MB, ale pozostaje kwestia tego że kilka MB trzeba "transportować" do wątku PHP i go tam trzymać, serializować / deserializować itp.
Jeśli mamy bloga z 1 osobą online to strata 4MB na wątku nikogo nie zaboli.
Jeśli na Twojej stronie/sklepie/forum trzeba wyświetlić 100 stron kategorii równocześnie np. kategorii produktowej to "100 x 4MB już zaboli" bo trzeba przerzucić sprawnie z MySQL lub z Cache te 400MB a potem je za-alokować w RAM dla PHP.
- 400MB więcej RAMu na VPS - kosztuje.
- Pobranie 400MB siecią trwa... a Google nie śpi tylko mierzy.
Tak przy okazji:
Jeśli uszkodzisz jeden “wpis” seo, to tracisz całą pracę ze wszystkich tagów i kategorii bo wszystko jest jedną zserializowaną tablicą.
Jeśli chcesz przeszukać tagi i kategorie - musisz wyciągać, deserializować i obrobić wyniki w PHP, albo pisać procedury dla MySQL.
MEGA wpisy po raz drugi, tym razem w Rewrite API.
Załóżmy, że NIE chcemy mieć w URL brzydkiego "/category/"
Czyli, klient zamiast:
"/category/buty-damskie/kozaki/"
chce:
"/buty-damskie/kozaki/" Kurcze - uwielbiają pętle.
Zamiast zbudować wyrażenie regularne "^( implode($category_slug,'|') )/..." to robią pętlę i dodają każdy Tag i kategorię osobno.
100 kategorii w sklepie to 1.000 wpisów (dochodzi oembed, feed, attachment, przekierowania starych na nowe itp).
Na dużej stronie osiągnęli 4,5 MB samego rewrite w wp_options ...
Rewrite to jest element, który jest niezbędny żeby wyświetlić stronę. Za każdym razem jest używany.
Gdzie tu jest problem?
Taki sam jak w punkcie 1) .
Weźmy sobie “kumulacje” - mamy na stronie 100 osób, które chcą wyświetlić kategorię w sklepie... 8MB extra per „użytkownika” (4MB z rewrite i 4MB z taksonomii), czyli kilka MB lata między komponentami WordPress.
To co...
- kupujemy VPS, którzy ma 800MB RAM więcej?
- najlepiej z lokalnym MySQL na SSD lub kartą Gigabitową do MySQL/Redis??
Przeliczanie SiteMap
Od kilku lat nie stworzyli własnej tabeli "cache dla sitemap" - mimo próśb społeczności. Czy próbowaliście kiedyś zwiększyć limit 1.000 wpisów na sitemape?
Wszystkie wyszukiwarki Google/BING/Yandex/Baidu/ ... pozwalają na 50.000 URLi i 20M, a od 2016 jest nawet limit 50MB (mowa o zwykłych sitemapach, a nie specjalnych typu NewsStand, które mają specyficzny kod i limity np. limit 1000 najnowszych newsów nie starszych jak 7 dni i mogą wymagać “wczytania zależności”).
Ustawcie sobie większy limit niż 1000 i przekonajcie się sami.
Plugin zabija serwer i MySQL bo SiteMape generowany jest w super pętli w pętli w pętli w... .
A jak skończy generować to wynik ponownie ląduje w wp_options.
Szkoda tracić czas crawlera (crawl budget) na przesyłanie 100 malutkich sitemap ...
Społeczność stworzyła gotowe skrypty transformujące tabele WordPress bezpośrednio w MySQL na "taką pod sitemapę".
Zwykłe CREATE TABLE `cache` AS SELECT ... JOIN ... tworzy nam tabelę z wszystkim co potrzeba do SiteMapy.
UPDATE TABLE `cache` SET ... SELECT `` FROM `post_meta` dodaje informacje np o obrazku lub cenie/typie treści z post_meta.
Dwa polecenia wykonane w MySQL obrabiają ~10.000 wpisów/produktów w sekundę.
Czyli jakieś 2 minuty szybciej niż pętla w PHP.
Choinka reklamowa.
Śmieci cały panel '/wp-admin/' reklamami "KUP". To jest ogólnie problem WordPress bo w panelu robi się ostatnio choinka reklamowa. Złapałem się na tym, że zacząłem dodawać klasy z panelu /wp-admin/ do AdBlocka ?!?!
Co do funkcji jaką ma spełniać - czyli SEO.
Jak wspomniałem pominę kwestię “czym jest SEO” bo to temat szerszy niż “tekst na stronie widziany przez ludzi”.
W wersji darmowej od 10 lat nie promuje nic więcej niż keyword stuffing. Nie poleca nic więcej, jak wielokrotne powtórzenie gdzie tylko się da frazy „exact match”. Google tak definiuje spamowanie słowami kluczowymi. Kiedyś to działało. Zwłaszcza na Altavista ;-). Prawię dekadę temu wyszukiwarki wyewoluowały w pełnotekstowe (synonimy itp). 2013r wchodzi kontekstowe wyszukiwanie, graf wiedzy w Google, kolibry , LSI KeyWords itp Ostatnie 5 lat to Semantyka, asystenci głosowi, boty - tutaj dostaliśmy, najprostszy OpenGraph oraz JSON-LD ale to z błędami i nijak nie oddające możliwości obydwu. Tu chodzi o tworzenie grafu, a spłycono to do dodawania obrazka do posta na FB.
Plugin jest na etapie 2.0, sieć od dekady na etapie 3.0, a korporacje powoli wdrażają 4.0.
Tak na marginesie:
- działania z WordPress API oraz Gutenberg to próba wchodzenia głębiej w 3.0, nadawanie znaczenia elementom - blokom, aby wejść jako platforma w Web 4.0
- ostatnie akty prawne w których “za cytaty trzeba płacić” są wybiegiem w web 4.0 gdzie bot/asystent głosowy będzie zdolny sam oceniać BLOKI treści i je odczytać bez odsyłania ludzi na stronę
- ...
Nie jeden mój klient płaciŁ po 600 euro rocznie za pakiet premium SEO dla swoich stron i „strona mu przymulała” a szału w SERP-ach nie było...
To już detal,
ale pokazuje jak nie szanuje się MySQL. Parametry SEO są ważne przy edycji i optymalizacji treści. Specjalista optymalizuje treść. Przy normalnej pracy „FrontEnd-u” potrzebujemy tylko rzeczy, z których generuje się HTML np. tytuł, description, ... i nagłówki np. noindex, last-mod, ... . Gdyby wyciągnąć zbędne parametry „SEO” do osobnej tabeli to na dużych forach/portalach/ecommerce zyskuje się kilka set tysięcy wpisów w postmeta i termmeta mniej do przeszukiwania, aktualizowania, przesyłania. Nie oczekuje tego od darmowego pluginu ale za 600 Euro rocznie ...
ale nr 2.
Uzależniają działanie pluginu od publicznie wystawionego API. Jeśli ktoś zabezpieczy rest api za pomocą hasła w .htaccess część pluginu przestaje działać. Trzeba samemu dopisać nagłówki „Authorization: Basic {token}” do autoryzacji. (Tak pisałem do supportu “premium” i nie widza powodu czemu nie wystawiać API publicznie. Doprosić się haczyka gdzie najłatwiej dodać nagłówek nie zdołałem).
Tu macie plugin SEO, za free
Robi to samo co pakiet premium, ale bez kwiatków z punktu 1 oraz 2.
Chcesz komuś polecić plugin SEO? Podaj informacje dalej – może ktoś zaoszczędzi 600 euro.
https://wordpress.org/plugins/...
Na koniec trochę po nosaczowemu ;-)
WordPress … tak znam, żre to RAMu jak Photoshop. Kurła – ale ten WordPress zamula. Dedyka trzeba!
BIBLIOGRAFIA:
Intro do term meta: https://www.smashingmagazine.c...
Jak działa rewrite: https://codex.wordpress.org/Cl...
Jak blokować reklamy w /wp-admin/: https://adblockplus.org/filter... Podniesiono limit zwykłych SiteMap do 50MB: https://searchengineland.com/g...
Upychanie słów „exact match” https://sprawnymarketing.pl/ba...
Semantyka: https://developers.google.com/... „exact match” stracił na znaczeniu w 2013r:
https://www.artefakt.pl/blog/s... “Speed Update” - szybkość (sprawność/ekonomia) jako czynnik rankingowy
https://searchengineland.com/g...
#wordpress #plugin #seo #mysql #performance #speed
Komentarze (40)
najlepsze
Niestety, popularne wtyczki brną do przodu efektem śnieżnej kuli. Wyświetlają się na samej górze (bo kiedyś nie było sensownych alternatyw), większość myśli że skoro ta jest najpopularniejsza to ją wybierają nawet jeśli wśród mniej popularnych jest coś
Na stronach które ja tworzę dla klientów wrzucam swoje rozwiązanie które zrzuca do cache'u HTML generowany przez
wp_nav_menu
, potem skanuję regexem żeby odzyskać klasy CSS odpowiedzialne za bieżącą stronę (current_page
itp.) i mam 0 zapytań (w kwestii nawigacji).@nebuso: Ale przyznasz, że wtedy prawdopodobnym problemem jest (błędna) specyfika projektu i wybrane techniki niż sam problem z zapytaniami. Innymi słowy - próbujemy optymalizować coś, co w swoich założeniach jest błędne. Typu przewieść materiały budowlane do budowy stadionu przez pół
godzinę po
Nikt, nic nie daje za darmo... albo daje, ale jak zaczyna umierać z głodu to idzie polować na kury, a nie siedzieć nad kodem. Dlatego wolę korzystać z yoasta, bo póki co daje radę (choć nie jest bez