PHPackages                             arturrossbach/statamic-linkwise - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. arturrossbach/statamic-linkwise

ActiveStatamic-addon[Utility &amp; Helpers](/categories/utility)

arturrossbach/statamic-linkwise
===============================

Internal-linking and SEO toolkit for Statamic: broken-link checker, suggestion engine, rel-attribute control per domain, and bulk URL replacement.

v1.3.0(1w ago)06↓100%proprietaryPHPPHP ^8.2CI passing

Since May 21Pushed 1w agoCompare

[ Source](https://github.com/arturrossbach/statamic-linkwise)[ Packagist](https://packagist.org/packages/arturrossbach/statamic-linkwise)[ Docs](https://github.com/arturrossbach/statamic-linkwise)[ RSS](/packages/arturrossbach-statamic-linkwise/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (7)Dependencies (4)Versions (8)Used By (0)

Linkwise
========

[](#linkwise)

**An internal-linking and SEO toolkit for Statamic 6: broken-link checking, entry-level link suggestions, `rel`-attribute control per domain, and bulk URL replacement, all inside the Control Panel.**

❓ **FAQ:** [docs/FAQ.md](docs/FAQ.md)📝 **Changelog:** [CHANGELOG.md](CHANGELOG.md)🛒 **Marketplace:** [statamic.com/addons/arturrossbach/linkwise](https://statamic.com/addons/arturrossbach/linkwise)

Features
--------

[](#features)

- 🔗 **Suggestion engine.** Surfaces inbound and outbound link candidates per entry through title overlap (with language-aware stemming) and editor-defined custom keywords. Prioritises high-signal matches over a long list of noisy ones.
- 🧱 **Indexes nested Replicator fields.** Peak Cards, Bard custom sets, accordions, and any addon that stores text in standard Statamic field structures, so suggestions cover the full body of every entry.
- ⚡ **Auto-Link Rules.** Map a keyword to a URL with case-sensitivity, collection scoping, once-per-post enforcement, per-locale scope, and auto-apply on save. Apply retroactively across existing content with one click.
- 🔍 **Broken-link finder.** Crawls every external link on your site, classifies the failure (timeout, SSL error, connection failure, 4xx, 5xx), and lets you fix, ignore, or unlink it inline. Discovery dates are preserved across re-scans.
- 🔄 **URL Changer.** Bulk-replace URLs across the entire site with locale-restricted apply. Conflict-safe against concurrent edits: skips entries that another editor modified mid-operation rather than overwriting them.
- 🌐 **Domain Manager.** Set `rel="nofollow"`, `"sponsored"`, or `"ugc"` per external domain. The attribute applies on render to every existing and future link to that domain, with no Bard content rewritten.
- 📊 **Custom Keywords.** Tell Linkwise which topics each entry should be a link target for, beyond what the title contains. Editor-curated keywords take priority over default title-matching, with TF-IDF auto-extraction as reference.
- 📋 **7-tab dashboard.** Overview, Links Report, Broken Links, Domains, Auto-Linking, Custom Keywords, URL Changer. CSV export on Links Report, Broken Links, Domains, and Auto-Linking.

Installation
------------

[](#installation)

```
composer require arturrossbach/statamic-linkwise
```

Auto-registers via `AddonServiceProvider`. Open the Control Panel and navigate to **Linkwise**. Click **Scan Content** to build the initial index, or run `php artisan linkwise:index` from the CLI.

Requirements
------------

[](#requirements)

- Statamic 6.x
- Laravel 12+
- PHP 8.2+
- `exec()` **and** `proc_open()` enabled (see [Hosting notes](#hosting-notes))

### Hosting notes

[](#hosting-notes)

Linkwise dispatches long-running operations (Scan Content, Check Links, Bulk Unlink, Apply Rule, URL Changer Apply, Inbound/Outbound Insert) as detached background processes via `exec()`. If your host has blacklisted `exec` or `proc_open` via the PHP `disable_functions` directive, those features silently no-op: the buttons reach the server but the dispatched job never starts.

The Linkwise Control Panel detects this on every page load and shows a visible red banner when the primitives are missing, so you'll know up front instead of debugging a hanging "Scan Content" button. Single-entry actions (creating individual links from the entry editor, custom keywords) keep working without `exec()`.

Cheap shared-hosting plans often disable these PHP functions; managed Statamic-friendly hosts and self-managed VPS / cloud servers normally have them enabled. If you're unsure, check `phpinfo()` for the `disable_functions` directive or ask your provider before deploying.

Configuration
-------------

[](#configuration)

All settings are configurable in the Control Panel under **Settings &gt; Linkwise**, or via `config/linkwise.php` after `php artisan vendor:publish --tag=linkwise-config`.

Language support
----------------

[](#language-support)

Linkwise's NLP pipeline (stemming, stopwords, keyword extraction) is language-aware. Three tiers reflect what Linkwise actually does for each language out of the box, derived from objective code-level capability (not marketing claims). If your language is not listed, the runtime falls back to English defaults; verify behaviour with a local scan before licensing.

### Language tiers

[](#language-tiers)

**Full pipeline** (stemming, stopwords, and inflected-form matching): English, German, French, Spanish, Italian, Dutch, Portuguese, Swedish, Danish, Norwegian, Finnish, Romanian, Russian, Catalan.

**Stopwords only** (no stemmer, so auto-link matches exact word forms; plurals and conjugations don't fold together): Hungarian, Polish, Czech, Slovak, Slovenian, Croatian, Bulgarian, Ukrainian, Latvian, Lithuanian, Estonian, Irish, Greek, Turkish.

**Not supported**: Arabic, Hebrew, Chinese, Japanese, Korean, Thai, Vietnamese.

The Settings dropdown only lists supported languages, so you cannot accidentally configure something that won't work.

### Multilingual content (V1.2+)

[](#multilingual-content-v12)

> Multisite is not the same as multilingual. Multisite means multiple Sites in `sites.yaml` (can share a language). Multilingual means content in two or more different languages, typically via Multisite where each Site declares its own `lang:`. The features below kick in when the index carries two or more distinct locales.

On Statamic-multisite installs with multiple content languages, Linkwise auto-detects each entry's content language via `$site->lang()` and:

- **Scopes Suggestions per-site.** A DE-source entry only suggests DE-target entries. EN sources don't surface DE targets, and vice versa.
- **Per-rule locale scoping for Auto-Link.** A rule with `locales: ['de']` fires only on DE entries, even when the keyword appears in EN content as a loanword.
- **URL Changer per-locale option.** Restrict a URL migration to a single site when needed.
- **Locale filters** on Links Report, Broken Links, and locale badges in the Suggestion modals.
- **Inherited title hint.** If a blueprint declares `title: { localizable: false }`, the Links Report shows an `(inherited )` hint so the editor knows the title is the Origin's.

Single-site installs see no UI differences; every multilang surface hides itself when the index has fewer than two distinct locales.

For the full per-tab UX inventory + V1.3 roadmap, see [`docs/POST_MULTILANG_GAPS.md`](docs/POST_MULTILANG_GAPS.md). For the code-level audit, see [`docs/MULTISITE_AUDIT.md`](docs/MULTISITE_AUDIT.md).

Privacy
-------

[](#privacy)

All link data lives in `storage/linkwise/` on your server. No telemetry, no analytics, no external service calls. Frontend errors are captured locally to `storage/linkwise/frontend-errors.log` for debugging.

Reporting issues
----------------

[](#reporting-issues)

Open a [GitHub issue](https://github.com/arturrossbach/statamic-linkwise/issues). The Control Panel's **Help &gt; Download diagnostic ZIP** attaches the privacy-safe runtime info needed for triage.

Commercial support:

License
-------

[](#license)

Commercial license. See [LICENSE.md](./LICENSE.md). Free in development; the per-installation license activates when you deploy to production. Purchase via the [Statamic Marketplace](https://statamic.com/addons/arturrossbach/linkwise).

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance98

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

7

Last Release

11d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/fc4e13b8f7eaa662b539abcd2f80dbbe62516fa84713f2255a7d62d428b70108?d=identicon)[arturrossbach](/maintainers/arturrossbach)

---

Top Contributors

[![arturrossbach](https://avatars.githubusercontent.com/u/241942638?v=4)](https://github.com/arturrossbach "arturrossbach (35 commits)")

---

Tags

auto-linkingbroken-link-checkercms-addoncontent-managementinternal-linkinglaravellink-managementphpseostatamicstatamic-addonurl-changercontentseostatamicbroken-linksStatamic addoninternal-linkingurl-changerauto-linking

### Embed Badge

![Health badge](/badges/arturrossbach-statamic-linkwise/health.svg)

```
[![Health](https://phpackages.com/badges/arturrossbach-statamic-linkwise/health.svg)](https://phpackages.com/packages/arturrossbach-statamic-linkwise)
```

###  Alternatives

[statamic-rad-pack/runway

Eloquently manage your database models in Statamic.

135212.4k7](/packages/statamic-rad-pack-runway)[statamic/statamic

Statamic

831176.7k](/packages/statamic-statamic)[marcorieser/statamic-livewire

A Laravel Livewire integration for Statamic.

23100.9k12](/packages/marcorieser-statamic-livewire)[aerni/livewire-forms

A Statamic forms framework powered by Laravel Livewire

2914.3k](/packages/aerni-livewire-forms)[withcandour/aardvark-seo

Save time and get your Statamic site to rank better with the SEO addon for Statamic.

15131.5k](/packages/withcandour-aardvark-seo)[aerni/advanced-seo

Comprehensive SEO addon for Statamic with flexibility in mind

1417.8k](/packages/aerni-advanced-seo)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
