Docs SEO NEO Version 1.x Getting Started

Getting Started

A tour of what SEO NEO outputs: meta tags, Open Graph, Twitter cards, hreflang, robots, and JSON-LD — and how the fallback chain keeps most pages SEO-correct with no manual data entry.

How SEO NEO works

SEO NEO does not use a custom Fieldtype. It creates standard ProcessWire fields for each SEO concern, reads them through a configurable fallback chain, and renders the full <head> block. Because every SEO value lives in a real PW field, you get multi-language support, selector queries, and import/export for free.

The typical flow for any page:

  • SEO NEO checks the page's own SEO fields (e.g. seoneo_title, seoneo_description)
  • If a field is empty, the smart-map fallback chain tries other fields on the page (e.g. summary, first 160 chars of body)
  • If nothing is found, per-template defaults in module config provide a last-resort value
  • The resolved value is rendered into the appropriate tag and injected into <head>

The Smart-Map & Fallbacks page covers this chain in detail. For now, the key point is that most pages don't need explicit SEO data entered at all — the fallbacks do the work.

What SEO NEO outputs

Here's the full head block SEO NEO emits for a typical page on a multilingual site (English / German / Finnish), with an image and an article template:

<!-- SeoNeo -->
<title>Nine Standards Rigg | LakesAndTrails.go</title>
<meta name="description" content="Nine drystone cairns on a Pennine watershed above Kirkby Stephen.">
<link rel="canonical" href="https://lakesandtrails.go/walks/nine-standards-rigg/">
<meta name="keywords" content="coast to coast, pennine, yorkshire dales">

<meta property="og:title" content="Nine Standards Rigg">
<meta property="og:description" content="Nine drystone cairns on a Pennine watershed above Kirkby Stephen.">
<meta property="og:url" content="https://lakesandtrails.go/walks/nine-standards-rigg/">
<meta property="og:type" content="article">
<meta property="og:site_name" content="LakesAndTrails.go">
<meta property="og:image" content="https://lakesandtrails.go/site/assets/files/1048/hero.jpg">
<meta property="og:image:width" content="1600">
<meta property="og:image:height" content="900">
<meta property="og:image:secure_url" content="https://lakesandtrails.go/site/assets/files/1048/hero.jpg">
<meta property="og:image:type" content="image/jpeg">
<meta property="og:locale" content="en_GB">
<meta property="og:locale:alternate" content="de_DE">
<meta property="og:locale:alternate" content="fi_FI">
<meta property="article:author" content="Editorial Team">
<meta property="article:published_time" content="2026-05-12T11:49:20+01:00">
<meta property="article:modified_time" content="2026-05-14T15:37:31+01:00">

<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Nine Standards Rigg">
<meta name="twitter:description" content="Nine drystone cairns on a Pennine watershed above Kirkby Stephen.">
<meta name="twitter:image" content="https://lakesandtrails.go/site/assets/files/1048/hero.jpg">

<link rel="alternate" hreflang="en-GB" href="https://lakesandtrails.go/walks/nine-standards-rigg/">
<link rel="alternate" hreflang="de" href="https://lakesandtrails.go/de/wanderungen/nine-standards-rigg/">
<link rel="alternate" hreflang="fi" href="https://lakesandtrails.go/fi/vaellukset/nine-standards-rigg/">
<link rel="alternate" hreflang="x-default" href="https://lakesandtrails.go/walks/nine-standards-rigg/">

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    { "@type": "Organization", ... },
    { "@type": "WebSite", ... },
    { "@type": "WebPage", ... },
    { "@type": "BreadcrumbList", ... }
  ]
}
</script>
<!-- /SeoNeo -->

Tag-by-tag breakdown

Title and description

The <title> tag is built from the resolved title plus the separator and site name from module config. The meta description is resolved through the fallback chain. Both are also used as the base for their Open Graph and Twitter counterparts.

Canonical URL

The canonical defaults to the page's own URL. It correctly includes URL segments and pagination — so /news/page2/ stays /news/page2/ rather than collapsing to /news/. Per-page overrides win if set.

Open Graph

SEO NEO emits the full set of og:* tags. A few things worth knowing:

  • og:image scans a configurable list of image fields in order, with an optional ancestor-walk and a site-wide default fallback
  • og:image:width, og:image:height, og:image:secure_url, and og:image:type are included automatically when the image is a real Pageimage
  • og:type=article triggers the article:author, article:published_time, and article:modified_time tags automatically
  • og:locale:alternate is emitted once per active language other than the current one

Twitter / X cards

Twitter cards inherit the same title, description, and image as Open Graph. The card type switches between summary and summary_large_image automatically based on whether an image resolved.

Hreflang

One <link rel="alternate"> tag per active language, using BCP47 codes from the configurable language map. Segment strings and page numbers are preserved and translated per language. A final hreflang="x-default" line points at the default-language URL.

Robots

The <meta name="robots"> tag is only emitted when something non-default is needed. For a standard index,follow page, no tag is output — bots assume index,follow when nothing is declared, so silence is the correct signal.

JSON-LD structured data

SEO NEO emits a @graph containing Organization, WebSite, WebPage, and BreadcrumbList nodes wired by canonical @id URIs. Article and Person nodes are added on templates you configure. This is a Beta feature — the API shape and hook surface may still change in point releases.

The SEO tab in the page editor

Every page on a template with seoneo_tab added shows an SEO tab (with an optional NEO badge) in the admin. It contains a live Google SERP Preview (with Desktop/Mobile toggle and, on multilingual sites, an automatic language switcher), character counters that switch between desktop and mobile budgets, and the per-page override fields. See The SEO Tab for the full walkthrough.

See also

Last updated