Essentials
Listing SEO
Per-page canonicals, titles, and metadata for listing routes.
The package's listing routes (/blog, /blog/category/{slug}, /blog/tag/{slug}) emit per-page canonical URLs, titles, and metadata via BlogListingSeo.
Behavior
| Route | Page 1 canonical | Page N canonical |
|---|---|---|
/blog | /blog | /blog?page=N |
/blog?q=term | /blog | noindex,follow |
/blog/category/guides | /blog/category/guides | /blog/category/guides?page=N |
/blog/tag/filament | /blog/tag/filament | /blog/tag/filament?page=N |
Titles include — Page N from page 2 onward.
Headless consumers
If you write your own controllers in headless mode, call the helper directly:
use Relaticle\Ink\Support\BlogListingSeo;
public function index(Request $request)
{
$page = (int) $request->query('page', 1);
seo()->for(BlogListingSeo::forIndex(page: $page, searchQuery: $request->query('q')));
return view('blog.index', [...]);
}
Available factories:
BlogListingSeo::forIndex(int $page = 1, ?string $searchQuery = null): SEODataBlogListingSeo::forCategory(Category $category, int $page = 1): SEODataBlogListingSeo::forTag(Tag $tag, int $page = 1): SEOData
Pagination
The package ships a numbered, aria-labeled pagination view at ink::pagination.blog. Listing pages use it by default. Publish to customize:
php artisan vendor:publish --tag=ink-views