urltoolskit.org
URL utilities, in the browser
Say hi →

Pagination URL generator

?page=N · ?offset=N&limit=M · /page/N · with first-page omission

Five ways to paginate, and each needs a different URL shape. Give the base URL and a page range and get the whole list — including the detail that trips people up, which is that page one usually has no parameter at all and so must be generated differently from the rest.

Ready.

How to use

  1. Paste the URL of page one. Any existing query parameters are kept, so a filtered listing works.
  2. Pick the Style your site uses. For offset-based APIs set Items per page as well — the offset is computed as (page − 1) × per page.
  3. Set the range. Step above 1 is for sampling a long archive rather than fetching every page.
  4. Leave Omit the parameter on the first page ticked: /blog and /blog?page=1 are the same content, and generating both is how you create a duplicate.
  5. Copy or download the list.

The duplicate-content trap

/blog, /blog?page=1 and /blog/page/1 are three URLs for one page of content. If all three are reachable and none carries a canonical tag, you have created duplicates in the most literal way possible — and pagination is where this happens most, because the "page 1" case is special and templating engines rarely handle it.

The fix is to pick one form for page one (almost always the bare URL, with no parameter and no /page/1) and make the others redirect or self-canonicalise to it. Every paginated page after that should be self-canonical: page 3 canonicalises to page 3, never to page 1. Canonicalising a paginated series back to the first page tells Google that pages 2 onward do not exist, which de-indexes the content on them.

rel="next" and rel="prev" are worth a note: Google announced in 2019 that it no longer uses them for indexing. They are still valid HTML and browsers can use them for prefetching, so keeping them is harmless — just do not rely on them to communicate the series. The Link header builder generates them if you want them.

FAQ

What about cursor-based pagination?

It cannot be generated ahead of time — each cursor comes from the previous response, which is exactly the point of cursors. Use this tool for the offset-based styles; for cursors you need a script that walks the responses.

Should page 2 onward be indexable?

Generally yes. noindex on paginated pages is a common but usually wrong reflex — it can stop crawlers discovering the items linked only from those pages. Let them be indexed and self-canonical, and keep the listing pages genuinely useful.

Why does the offset style also emit limit?

Because an offset without a limit is ambiguous — the API's default page size may not match what you assumed, and then your offsets skip or repeat rows. Sending both makes the range explicit.

I need more than a range — several patterns at once.

The URL pattern expander handles arbitrary combinations with {a,b} and [1-50] globbing, including multiple varying parts in one pattern.