Salin dan Bagikan
Cara Optimasi Pagination untuk SEO
Pagination mempengaruhi bagaimana Google menemukan dan mengindex konten Anda. Implementasi yang benar memastikan semua halaman dapat diakses dan diindex.
Jenis Pagination
Traditional Pagination
Page 1 | Page 2 | Page 3 | ... | Page 10
URL structure:
/blog/
/blog/page/2/
/blog/page/3/
Standard navigation numbers.
Load More Button
Halaman awal load 10 items
Click "Load More" → tambah 10 items
Content stays on same URL
URL tidak berubah.
Infinite Scroll
Scroll down → auto load more content
No user action needed
Popular di social media
Challenging for SEO.
Rel Next/Prev (Deprecated)
Historical Context
Old implementation:
<link rel="prev" href="/page/1/">
<link rel="next" href="/page/3/">
Status: Google ignored since 2019.
No longer necessary, but not harmful.
Current Approach
Google now:
- Crawls paginated pages individually
- Treats each as standalone page
- Uses internal links to discover
Focus on good internal linking.
Best Practices
1. Crawlable Links
<!-- Good: Standard links -->
<a href="/blog/page/2/">2</a>
<!-- Bad: JavaScript-only navigation -->
<span onclick="loadPage(2)">2</span>
Google needs HTML links to crawl.
2. Self-Referencing Canonical
<!-- Page 2 canonical -->
<link rel="canonical" href="https://example.com/blog/page/2/" />
Each paginated page = own canonical. Don't all point to page 1.
3. Unique Titles
<!-- Page 1 -->
<title>Blog - My Site</title>
<!-- Page 2 -->
<title>Blog - Page 2 - My Site</title>
Prevent duplicate title issues.
4. Unique Meta Descriptions
<!-- Page 1 -->
<meta name="description" content="Latest blog posts..." />
<!-- Page 2 -->
<meta name="description" content="Blog posts - Page 2..." />
Or use dynamic descriptions.
Pagination HTML Structure
Numbered Pagination
<nav aria-label="Blog pagination">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="/blog/">1</a>
</li>
<li class="page-item active">
<span class="page-link">2</span>
</li>
<li class="page-item">
<a class="page-link" href="/blog/page/3/">3</a>
</li>
<li class="page-item">
<a class="page-link" href="/blog/page/4/">Next</a>
</li>
</ul>
</nav>
First/Last Links
<nav aria-label="Pagination">
<a href="/blog/">« First</a>
<a href="/blog/page/4/">‹ Previous</a>
<span>Page 5 of 20</span>
<a href="/blog/page/6/">Next ›</a>
<a href="/blog/page/20/">Last »</a>
</nav>
Infinite Scroll SEO
The Problem
Issues dengan infinite scroll:
- No page URLs untuk Google
- Can't access content directly
- JavaScript dependency
- No crawlable links
Bad for SEO out of the box.
Solution: Pushstate
// Update URL saat scroll
window.addEventListener("scroll", function () {
if (userScrolledToNewSection) {
history.pushState(null, null, "/page/2/");
}
});
Static Fallback
Implement:
1. Infinite scroll for JS users
2. Traditional pagination for crawlers
3. <noscript> fallback
Google gets traditional pages.
Example Implementation
<!-- For users: infinite scroll -->
<div id="posts-container" data-infinite-scroll>
<!-- Posts load here -->
</div>
<!-- For crawlers: pagination links -->
<noscript>
<nav class="pagination">
<a href="/page/2/">Page 2</a>
<a href="/page/3/">Page 3</a>
</nav>
</noscript>
Load More Button SEO
Basic Implementation
<div id="posts">
<!-- Initial posts -->
</div>
<button id="load-more" data-page="2">Load More</button>
<noscript>
<a href="/page/2/">View More Posts</a>
</noscript>
SEO-Friendly Version
// Load more with pushState
document.getElementById("load-more").addEventListener("click", function () {
const page = this.dataset.page;
// Fetch new content
fetch(`/api/posts?page=${page}`)
.then((response) => response.json())
.then((data) => {
// Append content
appendPosts(data.posts);
// Update URL
history.pushState(null, null, `/page/${page}/`);
// Update button for next page
this.dataset.page = parseInt(page) + 1;
});
});
Category/Archive Pages
Indexing Strategy
Options:
1. Index all paginated pages
2. Index only page 1, noindex rest
3. View-all page (if manageable)
Recommendation:
Index all if content is unique on each.
View-All Option
Single page with all items:
/products/all/
Considerations:
- Page size (don't exceed 2MB)
- Load time
- User experience
Only for smaller collections.
Common Issues
Duplicate Content
Problem:
Page 1, 2, 3 have similar meta descriptions
Solution:
- Unique titles per page
- Unique descriptions
- Self-referencing canonicals
Orphan Pages
Problem:
Deep paginated pages not linked
Solution:
- Link to first/last pages
- Show range (1, 2, 3... 8, 9, 10)
- XML sitemap inclusion
Parameter URLs
Bad: /blog/?page=2
Good: /blog/page/2/
Clean URLs are better for:
- Users
- Sharing
- Crawling
WordPress Pagination
Default Pagination
<?php the_posts_pagination(array(
'mid_size' => 2,
'prev_text' => '‹ Previous',
'next_text' => 'Next ›',
)); ?>
Custom Pagination
function custom_pagination($pages = '', $range = 2) {
global $paged;
if (empty($paged)) $paged = 1;
echo '<nav class="pagination">';
if ($paged > 1) {
echo '<a href="' . get_pagenum_link($paged - 1) . '">Previous</a>';
}
for ($i = 1; $i <= $pages; $i++) {
if ($i == $paged) {
echo '<span class="current">' . $i . '</span>';
} else {
echo '<a href="' . get_pagenum_link($i) . '">' . $i . '</a>';
}
}
if ($paged < $pages) {
echo '<a href="' . get_pagenum_link($paged + 1) . '">Next</a>';
}
echo '</nav>';
}
Pagination Checklist
Structure:
☐ Clean URLs (/page/2/, not ?page=2)
☐ Crawlable HTML links
☐ First/Last page links
☐ Reasonable number per page
SEO:
☐ Self-referencing canonicals
☐ Unique titles per page
☐ Unique meta descriptions
☐ Include in XML sitemap
Infinite Scroll/Load More:
☐ Fallback for crawlers
☐ pushState URL updates
☐ Static URLs accessible
☐ noscript alternative
Testing:
☐ Test with JS disabled
☐ Check crawlability (Screaming Frog)
☐ Verify in GSC Coverage
☐ Test deep page access
Kesimpulan
Pagination SEO simple: pastikan setiap halaman memiliki URL unik, crawlable HTML links, dan self-referencing canonical. Untuk infinite scroll, sediakan fallback static pages.
Artikel Terkait
Link Postingan : https://www.tirinfo.com/cara-optimasi-pagination-seo/
Editor : Hendra WIjaya
Publisher :
Tirinfo
Read : 4 minutes.
Update : 7 January 2026