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 ofbody) - 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:imagescans a configurable list of image fields in order, with an optional ancestor-walk and a site-wide default fallbackog:image:width,og:image:height,og:image:secure_url, andog:image:typeare included automatically when the image is a realPageimageog:type=articletriggers thearticle:author,article:published_time, andarticle:modified_timetags automaticallyog:locale:alternateis 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
- Quickstart ⭐ — get up and running in five minutes.
- Smart-Map & Fallbacks — how SEO NEO resolves a value when the per-page field is empty.
- Configuration — every module setting explained.
Last updated