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.