On this page

What it does

Schema markup

Every page gets one connected description of who you are and what the page is, in the format search engines read (structured data, JSON-LD). It covers your organisation, or you as a person, or your local business with its address and opening hours. It also describes the website, the page itself, blog posts and articles with their authors, services, team members and breadcrumbs.

A page type for every kind of content

The plugin guesses what each content type is from its name. You can change the guess for a whole content type or for a single page.

Pages to fix

A list of the pages that have a missing description, a title shared with another page, or a canonical that points somewhere else. Each row links to the page. There is no score and no traffic light, and once you’ve fixed everything the list is empty.

Hide from search

You can keep a whole content type out of Google. While anything is hidden, the SEO page shows a warning so that nobody forgets.

Redirects

Add, change and remove redirects by hand. If you have a list exported from Redirection, Yoast SEO Premium or Rank Math, paste it in and the plugin imports it.

Google preview in the editor

While you edit a page you can see its address, title and description as Google may show them, along with anything that needs fixing.

Try the Google preview

The plugin shows this beside every page in the editor, as the page was last published. Try it here: type a title and a description.

The full address, or the part after the domain.

How it may appear

harbourstreetbakery.example

harbourstreetbakery.example › menu

Menu: fresh bread, cakes and coffee | Harbour Street Bakery

Baked every morning on Harbour Street. See today’s bread, cakes and coffee, with today’s specials and opening hours.

    This runs in your browser, and nothing you type is sent anywhere. The title is measured against roughly 580 pixels and the description against about 155 characters; Google publishes no limit, so every warning says “probably”. Google also rewrites titles, and sometimes picks its own description.

    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-seo
    // astro.config.mjs
    import seo from "@moorage/plugin-seo";
    import { defineConfig } from "astro/config";
    import emdash from "emdash/astro";
    
    export default defineConfig({
      integrations: [emdash({ plugins: [seo] })],
    });

    Listed under plugins, it runs in your site’s own process, which works on any EmDash site. To run it sandboxed, list it under sandboxed instead; that needs a sandbox runner.

    Then open SEO in the admin sidebar. The plugin works before you change a single setting. Answer one question about who the site is for and the result becomes more accurate.

    The registry lists it as @moorage.dev/seo and npm lists it as @moorage/plugin-seo. They are the same plugin.

    This site runs on EmDash and uses this plugin.

    Screenshots

    The SEO page shows how many pages were checked, what Google still needs from you, and the pages to fix.
    The plugin's Overview tab. Three counters read: pages checked 3, nothing to fix 1, to fix 2. Below them, a table of two details Google still needs, opening hours and a phone number, and a table of the two pages to fix, Menu and Home, each with a plain sentence saying what is missing and a link to open the page.
    Redirects, where you add one by hand or import a list from WordPress.
    The Redirects tab: buttons to add a redirect, import from WordPress and export, and a link to the full Redirects screen; the Add a redirect form, open, from /wedding-cakes to /menu, permanent; and a table of three existing redirects, each with Change and Remove.
    The Google preview panel, beside the page you are editing.
    The Google preview panel for a page called Menu. It shows the address and title as Google may show them, says there is no description yet, lists the page type as Web page, and names one thing to fix: no search description.
    Settings, where you say who the site is for and add an address, opening hours and content types.
    The Settings tab. Under This site is for, the option A local business customers visit is chosen, the kind of business is Restaurant, cafe or bakery, and the name is Harbour Street Bakery, with a Save button.

    What it does not do

    • It does not write the page title, the sitemap or robots.txt. EmDash and your theme do those.
    • There is no keyword density score and no readability score. We left them out on purpose.
    • It has no FAQ, Product or Event schema yet. Until it does, add a JSON field named json_ld to a content type and paste in any schema.org object.
    • It handles one business location.
    • EmDash has no regular-expression redirects. On import, exact addresses and “everything under a folder” rules are converted. Any other pattern is listed so that you can rewrite it yourself.

    Permissions

    The plugin asks to read your content, bylines and content structure. It needs those to check pages and build the markup. It also asks to manage redirects, so that you can add and import them. It makes no requests to any outside service.

    Questions

    Is it free?

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

    Is there a Yoast alternative for EmDash?

    Yes, in two parts. EmDash itself covers titles, descriptions, sitemaps and canonicals. This plugin adds the schema graph, the page checks, the Google preview and the redirects import, which accepts redirects exported from Yoast SEO Premium. It has no keyword or readability score.

    How do I add schema markup to EmDash?

    Install this plugin. Every page gets structured data (JSON-LD) straight away. To make it accurate, answer the one question about who the site is for. The setup guide walks through it.

    How do I import redirects from WordPress?

    Export them from Redirection, Yoast SEO Premium or Rank Math. In the admin, open SEO and then Redirects. Press “Import from WordPress”, paste the list and press “Check list”. Nothing is added until you confirm.

    How do I hide a content type from Google?

    Open SEO, then Settings, then Content types, and choose to hide that content type.

    Is there an SEO score?

    No, and that is deliberate. You get a list of pages to fix, and when you have fixed them the list is empty.

    Does it need an account?

    No. Nothing in the plugin connects to Moorage, and it is the same plugin on every EmDash site.

    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” at the bottom of the Settings tab and press Save.

    Where do I report a problem?

    Open an issue on GitHub. If it is a security problem, email 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.