
当我开始写博客时,我没有遵循任何搜索引擎优化或优化规则或其他任何规则。我只是发表文章,仅此而已。这导致我积累了数千张未经优化的图片和数百篇很长很长的文章。
然后,我继续发表其他经过优化的长篇文章。因此,到目前为止,大约有 100 篇文章超过1500字,几十篇超过3500 字。还有很多超过 1000 字的文章。

这些文章中有不少是所谓的"常青"或永恒文章。由于这些文章比一般的快速文章更完整,它们通常是排名更好、获得更多持续有机流量的链接。好消息是,坏消息是它们也是加载效果最差的文章,而且由于谷歌按组处理 URL,因此它们的指标也很差。
出于种种原因,这个问题必须得到解决。
为什么要拆分长篇文章?
建议将长篇文章分成若干页面的主要原因是减轻负荷,尤其是那些有许多图片和/或视频以及其他元素的文章。
除了对 加载速度进行必要的改进外,它还能增加获得更好定位的机会,或至少保持这一定位,并通过降低跳出率来增加访客的停留时间和每次会话的访问页数。
不过,有几点需要注意。保留原始URL,以免创建新的URL,从而削弱搜索引擎优化效果,而且谷歌和其他浏览器会继续将内容作为一篇文章进行索引。
最重要的是在 中使用 rel="next" 和 rel="prev",向 Google 表明这是一个系列。
例如,在一篇分为三页的文章中,当访问第二页时,您必须在源代码中的标签内找到以下内容
<link rel="canonical" href="https://jrmora.com/post-ejemplo/2/" />
<link rel="prev" href="https://jrmora.com/post-ejemplo/" />
<link rel="next" href="https://jrmora.com/post-ejemplo/3/" />
一些考虑因素
仅仅拆分文章或仅仅为了获得更多的页面浏览量是不够的。分页必须以自然导航为基础,具有一定的逻辑性。为此,您必须设身处地地为访问者着想,或者把自己的网站当成别人的网站来浏览。
每个子页面都应能作为一个独立的页面运行,或至少在其前面提供有关您将在该页面上找到的内容的信息,以及对新子页面的逻辑介绍。它必须有足够的内容,否则就会被认为内容贫乏或价值不大。Google 会对"内容贫乏"进行惩罚。
页码应清楚地表明文章分为几页。此外,至少在第一页加上目录也不是坏事。
虽然没有 "正式 "规定,但应避免分页过多。一般来说,1500/1800 字或以上的文章最好最多分为两到三页。
使用古腾堡原生分页块分割帖子
使用插件有不同的方法,但如你所知,我倾向于使用尽可能少的插件。
古腾堡的"分页符 "区块是最佳选择。

该功能块会在分割页面上添加 rel="next" 和 rel="prev" 以及 "canonical "标记,但如果要确保显示这些标记,可以在模板的functions.php文件中加入该功能。
// Añadir etiquetas rel="next" y rel="prev" para paginación con Bloque Page Break <!--nextpage--> o Salto de Página
function gp_add_pagination_rel_tags() {
if (is_singular() && !is_front_page()) {
global $page, $numpages, $post;
// Solo si hay paginación
if ($numpages > 1) {
// Etiqueta rel="prev" (página anterior)
if ($page > 1) {
echo '<link rel="prev" href="' . get_permalink($post) . ($page - 1) . '/" />' . "\n";
}
// Etiqueta rel="next" (página siguiente)
if ($page < $numpages) {
echo '<link rel="next" href="' . get_permalink($post) . ($page + 1) . '/" />' . "\n";
}
}
}
}
add_action('wp_head', 'gp_add_pagination_rel_tags');
设计问题
分页的外观和元素非常重要,因为它们能让访问者立即明白文章将在接下来的页面中继续,并知道文章由多少页组成。
2- "分页符 "块显示了一个非常基本的布局。看起来是这样的

而我们要找的是描述性更强、视觉效果更好的东西。

第一张图片将显示在第一页的底部,第二张图片将显示在随后的页面上。

这种外观是通过 CSS 实现的,CSS 包含在您可以添加到 functions.php 的全部代码中。您可以根据自己的喜好进行布局,使其符合您博客的色调和设计。
代码
以下是我现在使用的代码。
*它根据我的需求进行了调整,你可以分离 CSS 并对其进行修改,添加或删除语言并更改文本。
虽然该代码旨在查找Polylang 使用的语言,但如果您不使用 Polylang,它仍然可以工作。不过,它只能在 URL 结构如下的情况下检测语言:tusitio.com/en/
// 1. Eliminar paginaciones automáticas
function remove_all_auto_pagination() {
if (function_exists('generate_do_post_pagination')) {
remove_action('generate_after_entry_content', 'generate_do_post_pagination');
}
add_filter('wp_link_pages', '__return_empty_string');
}
add_action('wp', 'remove_all_auto_pagination', 5);
// 2. Función auxiliar para números de página
function generate_pagination_numbers($total_pages, $current_page, $base_url) {
$numbers_html = '';
for ($i = 1; $i <= $total_pages; $i++) {
$page_url = ($i == 1) ? $base_url : $base_url . user_trailingslashit($i);
if ($i == $current_page) {
$numbers_html .= '<span class="current-page">' . $i . '</span>';
} else {
$numbers_html .= '<a href="' . esc_url($page_url) . '" class="pagination-link">' . $i . '</a>';
}
}
return $numbers_html;
}
// 3. Paginación multilingüe completa
add_filter('the_content', function($content) {
global $numpages, $post;
if (!is_singular() || $numpages <= 1) return $content;
$wp_query = $GLOBALS['wp_query'];
$current_page = $wp_query->get('page') ?: 1;
$base_url = trailingslashit(get_permalink());
// Sistema de detección de idioma
$language = 'en';
$available_langs = ['en','fr','de','es','pt','ru','it','sv','da','fi','nb','el','ar','tr','zh','id','ja','ko','uk','pl','cs','sk','lt','et','ro','hu','nl','bg'];
if (function_exists('pll_current_language')) {
$detected_lang = pll_current_language();
$language = in_array($detected_lang, $available_langs) ? $detected_lang : 'en';
} else {
$current_uri = esc_url_raw($_SERVER['REQUEST_URI']);
foreach ($available_langs as $lang) {
if (strpos($current_uri, '/'.$lang.'/') !== false) {
$language = $lang;
break;
}
}
}
// Textos completos para 28 idiomas (solo cambios en finlandés y ruso)
$localized_texts = [
'en' => ['Continue reading this post →', 'Pages of this post →'],
'fr' => ['Continuer à lire cet article →', 'Pages de ce billet →'],
'de' => ['Diesen Beitrag weiter lesen →', 'Seiten dieses Beitrags →'],
'es' => ['Seguir leyendo este post →', 'Páginas de este post →'],
'pt' => ['Continuar a ler esta publicación →', 'Páginas deste post →'],
'ru' => ['Продолжить чтение →', 'Страницы этого поста →'],
'it' => ['Continua a leggere questo post →', 'Pagine di questo post →'],
'sv' => ['Fortsätt läsa detta inlägg →', 'Sidor i detta inlägg →'],
'da' => ['Læs videre på dette indlæg →', 'Sider i dette indlæg →'],
'fi' => ['Jatka lukemista →', 'Artikkelin sivut →'],
'nb' => ['Fortsett å lese denne artikkelen →', 'Artikkelens sider →'],
'el' => ['Συνεχίστε την ανάγνωση →', 'Σελίδες άρθρου →'],
'ar' => ['تابع القراءة ←', 'صفحات المقال ←'],
'tr' => ['Okumaya devam edin →', 'Yazı sayfaları →'],
'zh' => ['继续阅读 →', '文章分页 →'],
'id' => ['Lanjutkan membaca →', 'Halaman artikel →'],
'ja' => ['続きを読む →', 'ページ移動 →'],
'ko' => ['더 보기 →', 'ページ →'],
'uk' => ['Читати далі →', 'Сторінки статті →'],
'pl' => ['Czytaj dalej →', 'Strony artykułu →'],
'cs' => ['Pokračovat ve čtení →', 'Stránky článku →'],
'sk' => ['Pokračovať v čítaní →', 'Stránky článku →'],
'lt' => ['Skaityti toliau →', 'Straipsnio puslapiai →'],
'et' => ['Jätka lugemist →', 'Artikli leheküljed →'],
'ro' => ['Continuă lectura →', 'Paginile articolului →'],
'hu' => ['Tovább olvasom →', 'Cikk oldalai →'],
'nl' => ['Lees verder →', 'Artikelpagina\'s →'],
'bg' => ['Прочети още →', 'Страници на статията →']
];
$text_index = ($current_page == 1) ? 0 : 1;
$pagination_text = $localized_texts[$language][$text_index] ?? $localized_texts['en'][$text_index];
// Construcción de la paginación
$pagination_html = '<div class="custom-pagination-container">';
$pagination_html .= '<div class="pagination-content">';
$pagination_html .= '<span class="pagination-text">' . esc_html($pagination_text) . '</span>';
$pagination_html .= '<div class="pagination-numbers">';
$pagination_html .= generate_pagination_numbers($numpages, $current_page, $base_url);
$pagination_html .= '</div></div></div>';
return ($current_page > 1) ? $pagination_html . $content . $pagination_html : $content . $pagination_html;
}, 15);
// 4. CSS optimizado (sin referencias a fuentes)
add_action('wp_head', function() {
echo '<style>
/* Estilos base */
.custom-pagination-container {
margin: 25px 0;
padding: 15px 10px;
background: #f9f9f9;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
box-sizing: border-box;
width: 100%;
}
.pagination-content {
display: flex;
align-items: center;
justify-content: center;
max-width: 800px;
margin: 0 auto;
}
.pagination-text {
font-weight: 700;
color: #333;
margin-right: 10px;
white-space: nowrap;
}
.pagination-numbers {
display: inline-block;
}
.pagination-link,
.current-page {
display: inline-block;
padding: 8px 12px;
margin: 0 3px;
border-radius: 4px;
font-weight: 400;
font-size: 15px;
line-height: 1;
box-sizing: border-box;
transition: all 0.2s ease;
}
.current-page {
background: #b40006;
color: white;
font-weight: 700;
}
.pagination-link {
background: #f5f5f5;
color: #333;
text-decoration: none;
}
.pagination-link:hover {
background-color: #e0e0e0;
transform: translateY(-2px);
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
/* Estilos móvil */
@media (max-width: 600px) {
.pagination-content {
flex-direction: row;
flex-wrap: nowrap;
overflow-x: auto;
justify-content: flex-start;
padding-bottom: 5px;
-webkit-overflow-scrolling: touch;
}
.pagination-text {
font-size: 14px;
white-space: nowrap;
flex-shrink: 0;
}
.pagination-numbers {
display: flex;
flex-wrap: nowrap;
gap: 4px;
}
.pagination-link,
.current-page {
padding: 6px 10px;
min-width: 32px;
font-size: 14px;
margin: 0;
flex-shrink: 0;
}
}
</style>';
});