Nieskończone przewijanie (infinite scroll), a SEO…
Nieskończone przewijanie w wielu przypadkach jest bardzo wygodną formą paginacji dużej liczby artykułów na stronie internetowej. Internauci nie muszą tutaj tracić czasu na przełączanie się do następnej strony – wszystko odbywa się automatycznie. Pytanie tylko co z wyszukiwarkami, a w szczególności z robotami indeksującymi treść oraz internautami, którzy mają wyłączoną obsługę skryptów JavaScript?

Fot: markus spiske, CC BY 2.0.
Rozwiązanie tego problemu jakie przychodzi po chwili zastanowienia to oczywiście wyświetlanie dwóch rodzajów paginacji. Pasowało by więc udostępnić tradycyjne linki dla robotów oraz osób z wyłączoną obsługą skryptów JS oraz infinite scroll dla reszty. Trzeba również pamiętać, że nie możemy wyświetlić jednego i drugiego na raz.
Z pomocą przychodzi nam tutaj znacznik HTML 5 <noscript> </noscript>, obsługiwany jest on przez wszystkie popularne przeglądarki internetowe (IE, Chrome, Safari, Opera, Firefox) i umożliwia wyświetlenie jakiś elementów tylko wtedy kiedy nie zostanie wykryta obsługa skryptów JavaScript.
Wracając do artykułu „Paginacja w WordPressie, wczytywanie postów w tle (nieskończone przewijanie – infinite scroll)” gdzie opisałem dodanie „nieskończonego przewijania” na bazie motywu Tewnety Fifteen przerobimy teraz nasz skrypt tak aby był w pełni przyjazny wyszukiwarką.
Kod z pliku index.php
(katalog główny szablonu):
// Start the loop. //while ( have_posts() ) : the_post(); /* * Include the Post-Format-specific template for the content. * If you want to override this in a child theme, then include a file * called content-___.php (where ___ is the Post Format name) and that will be used instead. */ //get_template_part( 'content', get_post_format() ); //End the loop. //endwhile; // Previous/next page navigation. //the_posts_pagination( array( // 'prev_text' => __( 'Previous page', 'twentyfifteen' ), // 'next_text' => __( 'Next page', 'twentyfifteen' ), // 'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>', //) );
Umieszczamy teraz w znaczniku <noscript> </noscript>
(wcześniej został on usunięty):
<?php /** * The main template file * * This is the most generic template file in a WordPress theme * and one of the two required files for a theme (the other being style.css). * It is used to display a page when nothing more specific matches a query. * e.g., it puts together the home page when no home.php file exists. * * Learn more: {@link https://codex.wordpress.org/Template_Hierarchy} * * @package WordPress * @subpackage Twenty_Fifteen * @since Twenty Fifteen 1.0 */ get_header(); ?> <div id="primary" class="content-area"> <main id="main" class="site-main" role="main"> <?php if ( have_posts() ) : ?> <?php if ( is_home() && ! is_front_page() ) : ?> <header> <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1> </header> <?php endif; ?> <noscript> <?php // Start the loop. while ( have_posts() ) : the_post(); /* * Include the Post-Format-specific template for the content. * If you want to override this in a child theme, then include a file * called content-___.php (where ___ is the Post Format name) and that will be used instead. */ get_template_part( 'content', get_post_format() ); //End the loop. endwhile; // Previous/next page navigation. the_posts_pagination( array( 'prev_text' => __( 'Previous page', 'twentyfifteen' ), 'next_text' => __( 'Next page', 'twentyfifteen' ), 'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentyfifteen' ) . ' </span>', ) ); ?> </noscript>
Takie rozwiązanie zabezpieczy nas przed brakiem dostępu do postów przez wyszukiwarki oraz osoby nie mające włączonego JavaScriptu.
Oczywiście resztę czynności podanych w poradniku wykonujemy tak samo.