Find broken links in your DatoCMS content before your visitors do. Scan the whole project to see every link that needs fixing and exactly where it's used, or check a single record right from its sidebar.

Install Broken Link Checker from Configuration β Plugins and, when asked, let it use the current user's API token. The project scan needs it to read your records. There's nothing else to configure.
Without that permission, the record sidebar check still works, but the Link checker page is hidden.
The menus above the table switch between Needs attention, All URLs or a single status, filter by model or locale, and search the URLs. Export CSV downloads the whole report.
The scan reads the latest saved version of every record in the current environment, drafts and invalid records included. Results stay on the page until you leave it, so export them if you want to keep a copy.
To scan only some models or locales, click Choose what to scanβ¦, turn on the limits you need and pick what to include. Scan links keeps using that choice until you change it.
Open a record, expand Broken links in its sidebar and click Check links. Every locale is checked, including changes you haven't saved yet. Each result shows the field and locale that use the link: click it to jump to that field. Once you've fixed it, click Check again.

Every result comes with a short explanation, on the Link checker page and in the record sidebar alike.
| Status | What it means |
|---|---|
| Broken | The page doesn't exist (HTTP 404 or 410), or the website's domain doesn't exist. |
| Unverified | The check couldn't confirm the link: a server error, an invalid security certificate, no response, or another unexpected answer. The result says which. |
| Invalid | The address is malformed, like http://[bad-link. |
| Blocked | The website refused the automated check with bot protection, rate limiting or a sign-in page. This usually isn't a problem with the link. |
| Reachable | The link works. |
| Skipped | Not a public web address: mailto: links, relative paths, localhost and private IP addresses aren't checked. |
| Not checked | The scan was canceled before reaching it. |
Needs attention covers Broken, Unverified, Invalid and Not checked links. Blocked links are counted separately ("5 blocked") and have their own entry in the status menu.
Why "Blocked"? Links are checked through DatoCMS's link-checking service, so websites see an automated request instead of a visitor. Many sites guard against those with services like Cloudflare and answer with a challenge page instead of the real one. The plugin recognizes these answers and reports the link as Blocked rather than broken. Open it to check it yourself.
# is requested, so a missing anchor on an existing page isn't detected.From this directory:
npm cinpm run devnpm testnpm run lintnpm run buildConnect the development URL to a test project using the DatoCMS plugin development workflow. Automated coverage and the host validation checklist are in docs/VALIDATION.md.