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

RoutePage 1 canonicalPage N canonical
/blog/blog/blog?page=N
/blog?q=term/blognoindex,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): SEOData
  • BlogListingSeo::forCategory(Category $category, int $page = 1): SEOData
  • BlogListingSeo::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