Paginated list pages need their own canonical URL, otherwise search engines treat page 2 and later as duplicates of the first page. The base layout and the canonical meta element render cms::canonical, which appends ?p=N when the request attribute cms.pagination is greater than 1. The contract is:
- name the paginator's query parameter
p - store the current page number with
$request->attributes->set('cms.pagination', $paginator->currentPage())
The canonical view supports only the p query parameter. The built-in Blog action and the News action, which extends it for the news page type, follow this contract and are good references.
If a page contains several paginated actions, only one of them can use p and set cms.pagination. Give every other paginator a unique query parameter name, because two actions using p would both react to the same request value. Pages of those secondary lists are not reflected in the canonical URL: