Releases: arturrossbach/statamic-linkwise
v1.3.0
Added
- Overview — per-locale stats filter. On multilingual installs the Overview
headline stats (entries, orphaned, most/least-linked, outbound, inbound
coverage, avg outbound, broken links) were computed across all languages at
once. A locale filter — the same one already on the Links and Broken Links
pages — now scopes every Overview stat to one language. "All languages" is
unchanged. The per-language entry-count chips under "Entries Indexed" now
render again (they had been invisible since 1.2.0 due to a UI bug).
v1.2.3
Reliability release from a full-project code review. No new features — data-safety
and correctness fixes plus two control-panel display fixes.
Fixed
- Data safety: A malformed (invalid-UTF-8) byte in entry content can no
longer truncate the link index, indexer state, or auto-link rules to an empty
file. JSON writes now verify the payload encoded and reached disk in full
before replacing the existing file; on failure the previous file is kept. - Indexing: Saving a draft — or unpublishing an entry — no longer adds it to,
or leaves it in, the link index when the index is set to published entries only.
The incremental save path now matches a full Scan Content. - Broken-link checker: Far fewer false positives. Servers that reject
HEAD
but serveGETfine (common behind WAFs/CDNs) are now confirmed with aGET
before being flagged, and a momentary timeout or connection error is no longer
cached as "broken" for 24 hours — the next scan re-checks it. - Auto-link rules: Editing a rule's keyword to one that already exists is now
rejected with a clear message, matching the check that already applied when
creating a rule. - Links Report: The completion toast for inbound/outbound link insertion now
shows the entry name instead of being blank.
v1.2.2 — UI polish, SuggestionModal guide, BrokenLinks badges
Polish and reliability release. No new features.
Fixed
- Links Report: removed speculative "+3" inbound/outbound amber badges — no primary source for the threshold. The
orphanbadge (0 inbound) is retained. - AtomicJsonWriter: byte-exact write verification closes a silent-truncation window (CR-H-3).
Improved
- Suggestion Modal: new collapsible "What Google says about internal links" guide — all claims are verbatim Google Search Central quotes, mode-aware for inbound vs outbound context.
- Suggestion Modal: pre-flight observation panel surfaces anchor-concentration and generic-anchor warnings before insertion.
- Broken Links: color-coded status badges per error type (red = 404, yellow = timeout/SSL/redirect, orange = 403/server error). Fixed-pill indicator on resolved rows.
- Layout: installed Linkwise version shown in help dropdown.
- Layout: onboarding modal with step-by-step "What's next?" guidance.
v1.2.1 — Marketplace submission
Marketplace submission release. No behavior changes.
Fixed
- Links Report: hide per-row locale badge on single-locale installs.
Docs / Listing
- README rewritten: dropped unverified claims, aligned with Marketplace submission requirements.
- FAQ: English-only examples, accurate language-support list.
- Marketplace listing copy finalized.
- LICENSE: minimized to supplemental terms, aligned with Statamic Marketplace ToS.
V1.2.0 — Multilingual Content
Multilingual Content Release
Linkwise now scopes suggestions, auto-link rules, and URL changes per-locale on Statamic-multisite installs with multiple content languages.
What's new
- Per-locale Suggestions — DE source entries only suggest DE target entries (and vice versa), no cross-language link suggestions sneak through.
- Auto-Link Rules with Locale Scope — restrict a rule to fire only on entries of a specific language.
- URL Changer per Locale — restrict a bulk URL change to a single site.
- Locale Filter on Links Report, Broken Links, and Activity Log.
- Locale Badges in the Inbound and Outbound suggestion modals.
- Per-locale entry counts on the Overview ("165 EN, 10 DE, 10 NL").
- Inherited-title hint when a blueprint marks the title as non-localizable.
Polish
- Permanent license disclaimer on every Linkwise tab.
- FAQ documentation page.
- Settings UI hides the "Single-site content language" field automatically on multilingual installs.
- URL Changer now shows the full paragraph context for each match instead of just the linked phrase.
Compatibility
Single-site installs see no UI changes. The multilang features only activate when your install has multiple content languages.
Upgrade
After upgrading, run Scan Content once so every entry gets its locale stamp. The Overview shows a banner reminding you until you do.
Documentation: https://github.com/arturrossbach/statamic-linkwise/blob/master/docs/FAQ.md
v1.1.0 — Cloudways smoke fixes + UX cleanups
First post-launch release. Bundles the Cloudways production-smoke fixes, several UX cleanups, and a few additive features. No breaking changes to settings or stored data.
What's new
- Per-pair ignored-suggestions blocklist — mark a (source, target) pair as "don't suggest this again"; ignore survives re-scans, pair is undirected. (#74)
- Frequency-based keyword filter — Top-50000 word-frequency list filters filler words from TF-IDF extraction. (#75, #76)
- Exec-availability pre-flight banner — warns up-front when PHP
exec()/proc_open()are blocked bydisable_functions. (#80) - Welcome-screen onboarding checklist for first-run users. (#84)
- Seed test data command
linkwise:seed-test-data 30 --with-homepopulates a fresh site with realistic content, including a multi-link Markdown home page. (#88, #91, #92)
What's changed
- "Target Keywords" tab renamed to "Custom Keywords" — clearer label + cleaner table (auto-extracted column gone from table, still in the Add Keywords modal). (#89)
- Excluded entries no longer leak into reports —
excluded_entriesnow only filters the Suggestion machinery; Domains/Broken Links/URL Changer see every entry. (#87) - Overview recommendations are dismissable per session (orphaned, coverage). (#90)
- Stale-broken-link banner removed entirely. (#90)
- Suggestion-overlap toggle marked experimental + orphaned
min_keyword_scorefield removed from settings UI. (#77, #78, #79) - BARD developer badge removed from the Bard toolbar. (#81)
What's fixed
- Select-All in the Suggestion modal now respects ignored pairs — pre-fix, master-checkbox added ignored items to the bulk and the server inserted them anyway. Three-layer defense: modal counter + emit filter + per-item server gate. (#85)
- URL Changer Apply works for multi-link Markdown fields — pre-fix, second-and-later matches skipped with "Links were already gone — Run Scan Content". Counter semantic aligned with Bard/Replicator;
replaceNthInMarkdownAPI now matches its siblings. (#86) - Excluded entries no longer silently hidden from Domains and Broken Links. (#87)
Internal
- Bundle now shipped in the repo — no more
npm run buildafter composer require. (#83) - Package renamed to
arturrossbach/statamic-linkwisefor Marketplace consistency. (#82) - Settings UI: range-validation + auto-detected language display. (#71, #72, #73)
Action required after upgrade
Run php artisan linkwise:index once. Hard-refresh the Control Panel.
Full Changelog: v1.0.0...v1.1.0
Linkwise v1.0.0
The internal linking assistant for Statamic.
Find broken links, suggest internal-link opportunities, manage link attributes, and bulk-replace URLs across your entire site — without leaving the Control Panel.
Highlights
- Inbound + Outbound Suggestions — Multi-tier matching (title phrase → custom keywords → unordered stem cluster → TF-IDF keyword overlap)
- Auto-Linking — Keyword → URL rules with case-sensitivity, collection scoping, once-per-post enforcement, auto-apply-on-save
- Broken-Link Finder — HTTP HEAD/GET scan with retries + error classification
- URL Changer — Bulk replace any URL across the entire site
- Domain Manager — Per-domain
rel="nofollow"/"sponsored"/"ugc" - Target Keywords — TF-IDF auto-extracted + manual per-entry, with manual exclude block-list
- 7-tab Control Panel with CSV export
Built for Statamic 6 with Inertia + native UI. No external services, no telemetry, all data local in storage/linkwise/.
Installation
composer require arturrossbach/linkwise
php artisan vendor:publish --provider="Arturrossbach\\Linkwise\\ServiceProvider"
php artisan linkwise:indexSee the CHANGELOG for the full feature list.