Skip to content

v0.24.0 - SEO podstrony generatora

Choose a tag to compare

@mtsle mtsle released this 25 Jul 16:57
· 109 commits to main since this release

v0.24.0 — SEO podstrony generatora, dostrojone do witryny

Podstrona tworzona przez wtyczkę miała dotąd SEO wspólne dla wszystkich witryn:
tytuł „Generator FAQ", ogólny opis i zero treści do zaindeksowania. To wydanie
sprawia, że SEO tej podstrony dostraja się do strony, na której wtyczka siedzi
tak samo, jak od początku robią to odpowiedzi generatora.

Temat witryny (src/Seo/SiteProfile.php)

Wtyczka wyprowadza temat z treści bazy wiedzy (początki najobszerniejszych stron),
jednym wywołaniem API i wyłącznie przy indeksowaniu — nigdy przy wyświetlaniu strony.
Wynik siedzi w opcji i znika przy czyszczeniu bazy.

Drabinka, gdy wywołania nie da się wykonać: temat z pamięci → opis witryny (tagline,
z odrzuceniem domyślnych WordPressa) → nic. Żaden szczebel nie zmyśla.

Temat zasila tytuł podstrony, akapit wstępu, wyciąg (czyli meta description) oraz
pola about i description w danych strukturalnych.

Zmierzone na dwóch różnych witrynach, ta sama wtyczka, zero konfiguracji:

  • przedszkole → „Pytania i odpowiedzi — Przedszkole z kompleksową terapią"
  • testbed rolniczy → „Pytania i odpowiedzi — Chów bydła mlecznego"

Publikowanie par na podstronie (src/Faq/PublicFaq.php)

Nowy przycisk w Narzędziu FAQ: „Opublikuj na podstronie". Pary trafiają do opcji
wtyczki (nie do treści strony), wtyczka renderuje je serwerowo jako widoczny tekst
i z tych samych par składa FAQPage. Widoczna treść i dane strukturalne mają jedno
źródło, więc nie mogą się rozjechać.

Dlaczego w opcjach, a nie w treści strony:

  1. kses wycina <script> przy zapisie przez rolę bez unfiltered_html — wklejony
    JSON-LD znika po cichu;
  2. treść strony klient edytuje, a rozjazd markupu z widoczną treścią narusza wytyczne Google;
  3. wtyczka jest instalowana jako pakiet na dowolnej witrynie — cokolwiek żyje w bazie
    konkretnej strony, nie pojedzie razem z nią.

Dwie nowe trasy REST pod uprawnieniem NARZĘDZIA (publish_posts), łącznie 15 tras:
POST /admin/faq/publish i POST /admin/faq/unpublish.

Dane strukturalne (src/PublicUi/PageSchema.php)

Wtyczka wypisuje WebApplication opisujący narzędzie oraz — tylko gdy pary są
opublikowane — FAQPage. Nigdy WebPage, WebSite, Organization ani
BreadcrumbList: te należą do motywu albo wtyczki SEO, a duplikat zaszkodziłby.

Referencje isPartOf i provider są dopinane zawsze, więc SEO wtyczki nie wymaga
żadnej łatki w motywie. Strona wykrywana po obecności shortcode'u, nie po ID ani slugu.

Poprawki

  • Koniec zdublowanego <h1> — widget wpięty shortcode'em nie drukuje już nagłówka,
    bo motyw wydrukował własny z tytułu strony. Trasa /faqgenerator bez zmian.
  • Nowa podstrona powstaje z akapitem wstępu i wyciągiem — wcześniej niosła sam
    shortcode, więc wtyczki SEO budowały opis z pustki i spadały na ogólny opis witryny.
  • Etykieta w menu — pozycja z pustą nazwą pokazywała tytuł strony, co po wydłużeniu
    tytułu rozpychało nawigację. Wtyczka uzupełnia etykietę, ale wyłącznie dla pozycji
    własnych i wyłącznie gdy jest pusta.

Weryfikacja

  • runner: 40 zestawów, 0 niezaliczonych (nowy segment seo-jsonld-test.php)
  • mutacje nowych asercji: 6/6 czerwienią
  • test na żywej witrynie: 4 bloki danych strukturalnych, FAQPage z 8 pytaniami,
    pokrycie w widocznej treści 8/8, jeden <h1>
  • publikacja par: zero wywołań API