
Dane strukturalne – o co chodzi?
Ostatnio zwróciło moją uwagę coś, co w narzędziach dla Webmasterów Google nazywane jest “dane strukturalne”. Jest to standaryzowany opis stron i ich elementów z którego korzystają m.in. wyszukiwarki. (np. Google Authorship jest takim zapisem).
Po modyfikacjach strony, zintegrowałem ją z moim profilem G+ i teraz w artykułach Google widzie mnie jako autora, wrzuca fotkę i w ogóle jest super 🙂 ale… niespodziewanie pojawiły się dodatkowe błędy właśnie w danych strukturalnych a dokładnie hentry: microformats.com.
Na niektórych podstronach brakuje elementów:
- author,
- entry-title,
- updated…
czyli jednak „nie ma róży bez kolców”.
Co można w takim razie z tym fantem zrobić?
Są dwie możliwości:
- poprawić błędy czyli dodać brakujące znaczniki
- usunąć miejsca w których znaczniki powinny się pojawiać, a dokładnie usunąć klasę CSS hentry
Każde z rozwiązań ma niestety swoje plusy… dodatnie i ujemne…
Problem pojawiania się tych błędów związany jest z tym, że dane strukturalne wymagają specyficznej składni, która przez twórców motywów często jest pomijana albo błędnie stosowana (szczególnie chodzi tu o klasę css : hentry) Zatem możemy taką klasę usunąć, przez co zniknie nam problem błędu, ale też możemy mieć na stronie problem z danymi strukturalnymi.
Możemy też, wiedząc jak dane strukturalne wyglądają, poprawić nasz motyw. Tutaj warto posiłkować się Narzędziami dla webmasterów Googla a dokładniej narzędziem do testowania danych strukturalnych.
Oba rozwiązania wymagać będą edycji kodu php, zatem jest dedykowane osobom które mają już jakieś doświadczenie w edycji kodu motywu.
Usuwamy klasę hentry – “leczenie skutków”
Zacznijmy od prostszego rozwiązania, jakim jest usunięcie klasy hentry. W zależności od sytuacji w której się błąd pojawia, najczęściej będzie to w przypadku wyświetlania pojedynczego wpisu. Za wyświetlanie pojedynczych wpisów odpowiada plik single.php. W tym pliku bardzo często używamy funkcji post_class();
Funkcja ta generuje różne klasy CSS np.:
class="post-1195 post type-post status-publish format-standard hentry category-sample category-main"
Na klasach tych opierają się definicje CSS poszczególnych elementów strony. Wśród nich występuję właśnie klasa hentry, która sprawia nam tyle kłopotu… Niestety jeśli na stronie mamy Google Rich Snippets w różnych formatach klasa hentry będzie generowała nam błędy. Mówiąc krótko w specyficznych sytuacjach występuje konflikt pomiędzy tym, co zwraca WordPress a tym, czego wymagają dane strukturalne według różnych standardów.
Co do standardów to Google Rich Snippets możemy na stronie zaimplementować na kilka sposobów:
- microformats – skkładnia tego formatu zaczyna się od class=„…”
- microdata – tutaj składnia itemscope itemtype=„…”
- RDF – składnia property=„v:…”
Google rekomenduje format microdata z opisem schamatów z schema.org a niestety twórcy WordPressa umieścili domyślnie w kodzie element z microformats. Zatem przy walidacji uzyskamy błąd.
Możemy „naprawić” to w sposób prosty… usuwając klasę hentry. Stwórzmy zatem w pliku motywu functions.php funkcję którą podepniemy pod zdarzenie “post_class”.
function usuwanie_hentry( $classes ) { if ( is_page() ) { $classes = array_diff( $classes, array( 'hentry' ) ); } return $classes; } add_filter( 'post_class','usuwanie_hentry' );
Za pomocą tej funkcji możemy usunąć dowolną klasę spośród klas generowanych automagicznie prze WP. … można to porównać do leczenia objawowego… leczenia skutków.
Teraz czas na “leczenie przyczyn”.
Poprawiamy kod strony -” leczenie przyczyn”
Teraz może przyjrzyjmy się leczeniu przyczyn, czyli wprowadźmy poprawki w kodzie naszego motywu. Najprościej przyjrzeć się znów plikowi single.php
Bardzo często mamy w nim konstrukcję zbliżoną do :
<h2><?php the_title(); ?></h2>
By pozbyć się błędnego wyświetlania należało by ją zmienić na :
<h2 class=”entry-title”><?php the_title(); ?></h2>
w ten sposób mamy „załatwione” błąd z „entry-title”.
Podaję tu ogólny przykład. Generalnie by nie stracić formatowania CSS które mamy już przydzielone do znacznika w tym przypadku h2 zapis “entry-title” może występować jako kolejna klasa, jedna z wielu dla tego znacznika.
Teraz szukamy wiersza informacją o autorze:
<?php the_author(); ?>
i zmieniamy na dość rozbudowaną składnię:
<span class=”vcard author post-author”><span class=”fn”><?php the_author(); ?></span></span>
I w końcu:
<?php the_date(); ?>
zmieniamy na
<span class=”post-date updated”><?php the_date(); ?></span>
A co zrobić, gdy Google informuje nas o błędzie a treść, wokół której mają znaleźć się dane klasy, nie występuje? Rozwiązałem to, może nie elegancko ale skutecznie – dodałem znaczniki ale bez treści 🙂
np.
<span class="post-date updated"> </span>
Efekty naszych zmian powinniśmy przetestować w 2 miejscach. Pierwsze to przeglądarka, czyli sprawdzamy, czy dopisane klasy przypadkiem nie wpłynęły na poprawne wyświetlanie naszej strony w przeglądarce.
Drugim miejscem to Narzędzia dla Webmasterów Googla http://www.google.com/webmasters/tools/richsnippets.
Należy też pamiętać, że w Narzędziach dla Webmasterów efekty nie będą od razu widoczne, ponieważ Google bazuje na informacjach przesłanych jakiś czas temu zatem trzeba zgłosić mapę strony do ponownej indeksacji wtedy też odświeżą się informacje o danych strukturalnych. Natomiast można w Narzędziach dla Webmasterów “na żywo” modyfikować kod i zobaczyć czy faktycznie osiągnęliśmy oczekiwany efekt.
U mnie, w praktyce wygląda to tak, że otwieram sobie zmodyfikowaną stronę i klikam w przeglądarce “wyświetl źródło”, znajduję kod odpowiedzialny za daną klasę danych strukturalnych. Następnie w Narzędziach dla Webmasterów => Dane strukturalne, uruchamiam tester i podmieniam fragment kodu na fragment ze strony ze zmianami. Klikam podgląd i już widzę czy zmiany które wprowadziłem odniosą poprawny efekt po aktualizacji indeksu przez Googla.
W ten sposób znów podnieśliśmy trochę swoją widoczność w wynikach wyszukiwania…
Jeśli masz problem z tym o czym piszę lub masz obawy przed samodzielnym modyfikowaniem motywu… napisz do mnie, coś na to poradzimy 😉
Mam problem gdyż mam kilka plików z functions.php, nie ważne w jakim miejscu dodam ten skrypt ? czy w jakimś określonym miejscu ?