Repository navigation
v2.1.0 — listing SEO, schema completion, search, pagination
First feature release on the new namespace. Two real bug fixes and seven new features, no breaking changes.
Fixed
- Sitemap was silently skipping tag URLs.
BlogSitemapGeneratordocumented/blog/tag/{slug}as a first-class route but only iterated categories + posts. Now iterates tags too, gated byRoute::has('blog.tag')+config('ink.features.tags'). - Paginated listing pages were canonicalizing to page 1. Every
/blog?page=2,/blog/category/X?page=2, and/blog/tag/X?page=2was telling Google "this is a duplicate of page 1." Now each page carries its own canonical and a— Page Ntitle suffix. - Schema wasn't rendering on post pages in public-routes mode. The shipped
showandpreviewroutes didn't callseo()->for(\$post)—BlogPosting+BreadcrumbListonly worked for consumers who overrode the controller.
Added
Schema
FAQPageJSON-LD auto-detected from## FAQH2 +### Question?/ answer paragraphs. Default on; disable viaconfig('ink.schema.faq_auto', false).HowToJSON-LD auto-detected from## StepsH2 +### Step Name/ paragraphs. Opt-in viaconfig('ink.schema.howto_auto', true).Blog+CollectionPageJSON-LD on/blog,/blog/category/{slug},/blog/tag/{slug}.Relaticle\Ink\Support\SchemaExtractor— pure helper for FAQ + HowTo HTML parsing.
Listings
Relaticle\Ink\Support\BlogListingSeo—forIndex/forCategory/forTagfactories for headless consumers. Used internally by the shipped controllers.- Numbered, aria-labeled paginator at
ink::pagination.blog. Replaces Laravel's default tailwind paginator on the shipped listing pages. Publish via--tag=ink-viewsto customize. wire:navigateon<x-ink::post-card>for SPA-feel navigation in Livewire 4 hosts.
Search
Post::search(\$term)scope — portable LIKE search across title/excerpt/content. Empty terms are no-ops. LIKE wildcards in the term are escaped.- Override via config callback. Set
config('ink.search.callback')to afunction (Builder \$query, string \$term): voidto use Postgres FTS, MySQL FULLTEXT, Scout, Meilisearch, etc. ?q=honored on the shipped/blogroute withnoindex,followon result URLs (search queries should not be indexed as separate pages).<livewire:blog::search />— drop-in Livewire component with URL-synced query, 400ms debounce, and empty state. Theme-agnostic.
Docs
Three new pages: search.md, schema.md, listing-seo.md. Configuration + blade-components pages updated for the new config keys and components.
Upgrade
```bash
composer require relaticle/ink:^2.1
```
No breaking changes vs v2.0.0. Consumers on the previous manukminasyan/filament-blog v1.x should follow the v2.0.0 release notes first.
Test coverage
23 → 58 tests (+35, +152%). 118 assertions. All passing.