On this page

What it does

Problems, grouped by how bad

Every page: a broken link in the menu or footer. One page: a page that shows visitors an error, or loads a map, video or form over an insecure connection, which browsers block. One link: a link inside a page that goes nowhere. One row per broken address, with the pages it was found on.

A Fix menu on every row

Send visitors to another page: a redirect from the dead address to a page you pick from a list, which fixes it everywhere at once (admins only, as in EmDash itself). Or open the page with the link named, check it again now, or mark it as fine.

Links to other sites, checked politely

Three a minute, never one site more than once a minute, and each request says who it is. A link counts as broken only when the other website says the page is gone on two checks at least a day apart.

“Could not check” is not broken

Sites that turn away automatic checkers, such as LinkedIn and Instagram, are listed apart and never counted. Links that work but take a detour have a folded list of their own.

Email when it matters

At once when a page shows an error or a menu link breaks, and a weekly list of only what is new. Several addresses, the site’s name first in the subject, never more than one email a day of each kind.

A setup checklist

The site address is set and secure; the insecure address and the one with or without www send visitors on; a made-up address shows the “page not found” page; search engines are allowed in; scheduled tasks run; email works, with a test button.

Who sees what

Editors see the links they can fix. Page errors, the checklist and the options are for admins. A dashboard widget shows the count.

Install

How to install a plugin on EmDash: the registry or npm

Install it from Registry in your EmDash admin. If you’d rather add it in code:

npm install @moorage/plugin-site-health
// astro.config.mjs
import siteHealth from "@moorage/plugin-site-health";
import { defineConfig } from "astro/config";
import emdash from "emdash/astro";

export default defineConfig({
  integrations: [emdash({ plugins: [siteHealth] })],
});

Listed under plugins, it runs in your site’s own process, which works on any EmDash site, the Workers free plan included. To run it sandboxed, list it under sandboxed instead; that needs a sandbox runner, which Cloudflare provides on Workers Paid. It works the same either way. It needs EmDash 1.3.0 or newer. Installed from the registry on Cloudflare, it can send email only from EmDash 1.4.0.

It also needs EmDash’s scheduled tasks: on Cloudflare, a Cron Trigger on the Worker. If they are not running, the Checklist says so and gives your web person the steps.

Then open Tools > Site Health in the admin. The first check starts by itself and takes about 20 minutes for a site with 40 pages; links to other sites follow a day later.

Screenshots

The Problems tab: what is broken, worst first, with a Fix menu on every row.
The Site Health page on its Problems tab. Three counters read: pages checked 42, links checked 318, to fix 5. Below them the problems in three groups: Every page, a menu link to a page that does not exist; One page, a broken page and a map loaded over an insecure connection; One link, a link to a page another website has removed and a link to a page not published yet. Each row has a Fix button. Then Check everything again; at the foot, below a rule, the help line: Help, More free plugins, by Moorage.
Send visitors to another page: one redirect fixes a dead address everywhere at once.
The Send visitors to another page form opened from a Fix button: the old address, /menu-2024, a list to pick the page to send visitors to, and a Send visitors there button, above the list of problems; at the foot, below a rule, the help line: Help, More free plugins, by Moorage.
The Checklist, for admins: the setup of the site, checked once a week, and who gets the emails.
The Checklist tab. A yellow notice says one thing needs attention: the address without www does not answer. Below it, seven checks with their status, Working or Needs attention; then the Email line, not tested yet, with who gets the emails and a Send a test email button; and Options; at the foot, below a rule, the help line: Help, More free plugins, by Moorage.

What it does not do

  • It does not change the links inside your pages. For an address on your own site, the redirect fixes it everywhere instead.
  • No score, grade, history, charts or CSV export.
  • No speed tests, security headers, certificate expiry or version checks.
  • No missing alt text and no canonical addresses: the SEO plugin looks after those.
  • It cannot read menus, widget areas or sections directly. Menu and footer links are found on the rendered home page, so they need the site to be public.

Permissions

It asks to read your content and content types (to find the links in your pages), to change redirects (for “Send visitors to another page”), to fetch any address (links to other sites, and your own address, are not known in advance) and to send email (alerts and the test email). It sends nothing anywhere except requests to the websites your pages link to and email to the addresses you list.

Questions

Is it free?

Yes, on any number of EmDash sites, with no account and no key. It is open source under the MIT License; the licence page says in plain words what you may do with it.

How do I find broken links on an EmDash site?

Install this plugin and open Tools > Site Health. It reads every page, finds the menu and footer links on the live home page, and checks links to other sites a few a minute. The Problems tab lists what is broken, worst first.

Why does a link show under “could not check”?

Some sites refuse automatic checkers, ask them to slow down, or did not answer within 8 seconds. Open the link to see for yourself; it is tried again next week.

Why do links to other sites take a day?

A site that is down for an hour should not send you an alert, so a broken answer is confirmed a day later.

My site is not public yet. Does it work?

Partly. Links inside your pages that point to one of your pages or posts are checked straight away, and a link to a page that is not published yet shows as broken. Links to any other address on your own site, the menus, page errors and the Checklist need the site to open its own pages, so they wait until it has a public address; until then those links are listed under “Links we could not check”, never as broken.

Who gets the emails?

The first admin who opens Site Health, plus anyone added under Checklist, Options. Your site needs an email service set up in EmDash; “Send a test email” tells you whether it has one.

Is it in the EmDash registry?

Yes, as @moorage.dev/site-health. Install it from Registry in your EmDash admin, or from npm in the site’s code, as shown under Install.

What is the line at the foot of the plugin’s page?

Only admins see it: “Help · More free plugins · by Moorage”. Help opens the plugin’s setup guide; editors never see the line. To hide it, switch on “Hide the help line at the foot of this page” under Checklist, Options and press Save.

Where do I report a problem?

Open an issue on GitHub. If it is a security problem, write to security@moorage.dev instead.

Report a problem on GitHub: what happened, and your EmDash and plugin versions.

What should we make next?

Tell us the job you would like a plugin to do. We read every answer and use your email only to reply to it; release emails come only if you tick the box.