Configuration
A guided tour of every setting in Modules > Configure > SeoNeo, fieldset by fieldset: title format, injection, canonical policy, smart-map, Open Graph, Twitter, robots, verification, and JSON-LD.
Where to find the settings
Go to Modules > Configure > SeoNeo in the ProcessWire admin. Settings are grouped into fieldsets — you can work through them top to bottom on first setup, then come back to individual sections as your needs evolve.
Title and site name
- Site name — the text appended to every page title. Typically your brand name (e.g. "Peter Knight Digital").
- Per-language site name — optional per-language overrides, one per line in the format
langname=name(e.g.de=Mein Beispiel). Only shown when ProcessWire's multi-language support is active. - Title format — how the
<title>tag is assembled. Default:{title}{separator}{site_name}. - Title separator — the character(s) between the page title and site name. Default:
|(space-pipe-space).
Two pagination placeholders are available in the title format and per-template defaults:
{pageNum}— blank on page 1," — Page 2"," — Page 3"on subsequent pages. Use this when you want the format to read cleanly on the first page.{pageNumber}— always numeric (1,2,3). Use this when you want explicit page numbers in every title.
Injection
- Auto-inject meta tags into <head> — when enabled (the default), SEO NEO hooks into ProcessWire's page render and inserts the meta block automatically. Disable this if you want to call
echo $page->seoneo->render()from your own template file. - Injection position — Top places the block immediately after the opening
<head>tag; Bottom (default) places it just before</head>.
Canonical URL policy
- Pagination behaviour — Include the page number (default, recommended) keeps
/news/page2/as its own canonical. Always page 1 collapses every paginated variant to/news/. Language-aware page-number prefixes from$config->pageNumUrlPrefixesare honoured automatically. - URL segment behaviour — Include the segment string (default, recommended) keeps
/news/2024/article-slug/as its own canonical. Parent page only collapses every segment-driven variant to/news/.
Per-page overrides via the Canonical URL field always win — the policies above apply only to the auto-generated fallback.
Robots and indexing defaults
- Site-wide noindex — emergency switch. When enabled, every page is rendered with
noindex. Use this for staging copies, pre-launch previews, or any time you need to take the site out of the index without changing per-page settings. - Site-wide nofollow — companion switch. When enabled, every page is rendered with
nofollow, telling crawlers not to follow links from the site. - Auto-noindex unpublished pages — enabled by default. Prevents search engines from indexing drafts that a superuser has opened on the frontend for preview.
- Auto-noindex hidden pages — off by default. Enable this if you use the Hidden flag as a "not for search" signal.
Per-page noindex/nofollow checkboxes always override the auto-defaults. Site-wide noindex/nofollow override everything — they are the highest-priority signal in the chain.
Smart field mapping
This is the fallback chain for title and description. When a page's own seoneo_title or seoneo_description field is empty, SEO NEO tries the fields you map here.
Enter one mapping per line in key=field1,field2 format:
title=headline,title
description=summary,body
- Dotted paths reach into nested data:
description=banner.image.description,matrix_blocks.first.body - Prefix any field with
*to walk ancestor pages:description=*section_description,summary - Within a comma-separated list, fields are tried left to right; the first non-empty value wins
See Smart-Map & Fallbacks for the full resolution order.
Per-template defaults
Set default meta values per template. Use [template-name] sections with key=value lines:
[blog-post]
title={title} — {site_name} Blog
description={summary|body}
og_type=article
Supported placeholders:
{title}— the page's own title.{site_name}— the configured site name (per-language aware).{separator}— the configured title separator.{page.fieldname}— any field on the current page (e.g.{page.headline},{page.summary}).{fieldname}— shorthand for{page.fieldname}.{summary}is equivalent to{page.summary}.{pageNum}/{pageNumber}— pagination placeholders, as described above.
Pipe-separated fallbacks pick the first non-empty value: {summary|body|page.intro}.
Open Graph image and type
- OG image fields — which image fields to scan for
og:imageafter the dedicatedseoneo_og_imagefield, comma-separated. Default:og_image,screenshot,images,image,blog_images. Supports dotted paths (banner.image,gallery.first). - Inherit OG image from closest ancestor — off by default. When enabled, if no image is found on the current page SEO NEO walks
$page->parents()and uses the first ancestor that has an image. Useful for section landing pages. - Default OG image — fallback image URL used when no image is found on the page or any ancestor.
- Default OG type — site-wide fallback for
og:type. Default:website. Override per page via theseoneo_og_typefield (installed by default) or per template via the per-template defaults.
The Default OG type select supports the full set of common Open Graph types: website, article, book, profile, music.song, music.album, music.playlist, music.radio_station, video.movie, video.episode, video.tv_show, video.other, and product.
Open Graph locale
- Default OG locale — site-wide fallback for
og:locale(e.g.en_US). Used on single-language sites and as the fallback when no language-specific entry exists. - Locale map for languages — per-language overrides, one per line:
default=en_GB,de=de_AT. Powers bothog:localeandog:locale:alternate.
Twitter / X
- Twitter / X site handle — the
@usernameof the site itself, emitted astwitter:site. The leading@is added automatically. - Default Twitter / X creator handle — the
@usernameof the content author, emitted astwitter:creator. Hookable per-page via___getTwitterCreator($page).
Granular Google directives
These four optional settings compose into the <meta name="robots"> tag. All default to empty (nothing emitted) until you opt in:
- max-snippet — character cap for SERP text snippets.
-1for no limit,0to suppress, positive integer for the cap. - max-image-preview — image preview size in search results:
none,standard, orlarge. - max-video-preview — seconds of video preview.
-1for no limit,0to suppress. - unavailable_after — an RFC 850 or ISO 8601 datetime. Google drops the page from its index after this moment. Useful for event listings or time-limited offers.
AI / LLM opt-out
- noai — asks AI crawlers not to use the site's content for generative-AI training.
- noimageai — asks AI crawlers not to include the site's images in AI training datasets.
Both are honoured by some AI crawlers. They're a polite request, not enforcement — blocking specific bots at robots.txt or HTTP level is more reliable.
Search engine verification
Paste the bare token or the full <meta name="…" content="…"> snippet for any of the supported providers: Google Search Console, Bing Webmaster Tools, Yandex, Pinterest, Facebook Domain, Baidu. SEO NEO extracts the content attribute either way.
- Verification tags on homepage only — enabled by default. Emits the verification meta tags only when rendering the homepage. Most providers only need to see them there.
- Disable the checkbox to emit them on every page — useful when verifying subdomains, per-language country variants, or properties scoped to a section URL.
Author meta tag
- Default author — site-wide value for
<meta name="author">. Leave blank to omit the tag. - For per-page overrides, add a
FieldtypeTextfield namedseoneo_authorto any template. When it has a value it wins over the site default.
Google SERP Preview budgets
The character counter beneath the seoneo_title and seoneo_description fields is colour-coded against three thresholds. Defaults are tuned to Google's current SERP truncation:
- Title (desktop) — green up to 60 characters, amber from 61–70, red above 70. Mobile: green 50, amber 51–60.
- Description (desktop) — green up to 160 characters, amber from 161–180, red above 180. Mobile: green 120, amber 121–140.
All four green/amber thresholds (counter_title_green, counter_title_amber, counter_desc_green, counter_desc_amber) and the two mobile targets (counter_title_mobile, counter_desc_mobile) are individually configurable in the Google SERP Preview fieldset.
- Hard-cap title / description input length — optional. Enforces browser-level
maxlengthon the page-edit form. Off by default; the soft amber/red counter is preferred for most teams as it doesn't block the editor mid-word.
JSON-LD structured data (Beta)
- Emit JSON-LD — master switch. Enabled by default. Article templates are blank by default; add templates when you want Article nodes in the graph.
- Pretty-print JSON-LD — on by default. When enabled, the JSON is indented with line breaks for human readability. Disable for minified production output.
- Publisher type —
Organization(default),Person,LocalBusiness,NewsMediaOrganization, orEducationalOrganization. ChoosePersonfor solo author / personal-brand sites where the publisher is an individual rather than a company. - Publisher name (per language) / Publisher description (per language) —
langname=valuemap for multilingual Organization nodes. - Publisher logo URL — absolute URL to a square logo image. Emitted as
logo.urlon the publisher node and aspublisher.logoon Article nodes. Required by Google for certain rich-result eligibility. - Publisher sameAs URLs — one URL per line. These become the publisher's
sameAsarray — typically your social profiles (LinkedIn, X, GitHub, Crunchbase, Wikipedia). - Article templates — comma-separated template names whose pages get an
Articlenode in the graph (e.g.blog_post,journal_post). - Default Article author — select a ProcessWire User page as fallback author on Article nodes when the page has no resolvable author. Pages with a
seoneo_authorfield override this. - Emit BreadcrumbList — on by default. Adds a
BreadcrumbListnode when the page has at least one parent. Disable if your site has no meaningful breadcrumb hierarchy.
See Structured Data (JSON-LD) for more detail on the graph composition and hooks.
Field mapping
Advanced — you only need this if your site has legacy SEO fields with names other than the SEO NEO defaults, and you want to keep them.
- Title field — name of the field that holds the SEO title. Default:
seoneo_title. - Description field — default:
seoneo_description. - Keywords field — default:
seoneo_keywords. - Canonical field — default:
seoneo_canonical. - Noindex field — default:
seoneo_noindex. - Nofollow field — default:
seoneo_nofollow. - Author field — default:
seoneo_author. - Custom HTML field — default:
seoneo_custom.
Point any of these at an existing field on your templates and SEO NEO will read from it instead of the default name. Useful when migrating from MarkupSEO or SEO Maestro and you want to keep the legacy field names in place.
SEO tab label and NEO badge
- SEO tab label — Wire tab text for the SeoNeo fieldset. Default:
SEO. Synced to theseoneo_tabfield on config save. - Show NEO badge on tab — small NEO pill beside the tab label. On by default; helps distinguish from MarkupSEO's SEO tab during migration.
Custom tag mappings
Advanced — global mappings that turn arbitrary fields into <meta> tags. One rule per line: fieldname=<tag template with %s>:
seoneo_keywords=<meta name="keywords" content="%s">
seoneo_og_type=<meta property="og:type" content="%s">
The field value replaces %s. Empty fields are skipped; values are escaped before insertion. See Custom Meta Tags for when to use mappings vs seoneo_custom.
See also
- Smart-Map & Fallbacks — how the fallback chain resolves a value.
- Robots & Indexing — per-page noindex/nofollow and granular directives in detail.
- Multilingual — hreflang, locale map, and per-language site name.
Last updated