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?
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.