Skip to content

Releases: PeterKnightDigital/SeoNeo

SeoNeo 1.1.4

12 Jun 21:15

Choose a tag to compare

Auto-inject resilience + docs polish

Hardens SeoNeo's head-rendering pipeline against unexpected failures and improves discoverability of two existing features that testers were missing.

Resilience

  • Error boundary inside ___renderHead() — the full section-builder pipeline is now wrapped in a try-catch. If any resolver or section builder throws (a hooked getTitle that crashes, a field-type edge case, a null reference inside getOgLines, etc.), the page renders normally without the SeoNeo block, and the error is written to a new ProcessWire log called seoneo (site/assets/logs/seoneo.txt). The log is created on demand on first failure — clean installs stay clean.
  • Defence in depth — matching try-catches added to SeoNeoAccessor::render() (the $page->seoneo->render() template path) and hookPageRenderInject() (the auto-inject hook path), so all three call paths are protected.
  • Null-template safetyshouldAutoInject() and hookPageRenderInject() now guard against the (rare) case of a page with no template object, preventing a TypeError on PHP 8.x.

UX

  • Config hint when no templates have seoneo_tab — the auto-inject checkbox in module config shows a one-line note when no fieldgroup includes seoneo_tab, explaining that the field must be on at least one template for injection to take effect.

Documentation

  • Installation: clearer auto-complete callout — emphasises that you only need to add seoneo_tab to a template; the rest of the SEO fields are inserted automatically in the correct order on save (a 1.1.0 feature that was previously buried).
  • JSON-LD: custom Schema.org types — the hooks section now includes worked examples for adding a Recipe node on a custom template and suppressing BreadcrumbList on the homepage, plus a link to the full structured-data reference.

Compatibility

Fully backwards-compatible. No database changes, no field changes, no template changes required. Drop in over 1.1.3 and refresh modules.

SeoNeo 1.1.3

10 Jun 14:39

Choose a tag to compare

SeoNeo 1.1.3

Fixes

  • NEO badge on Wire tab — targets the tab link (a#_Inputfield_seoneo_tab); re-runs after WireTabs initialises; badge centred with flexbox

Since 1.1.1 (also included in this download)

1.1.2 — Empty SeoNeo tab

  • Upgrade self-heal backfills missing SEO fields when only seoneo_tab was present
  • Repairs collapsedTab on seoneo_tab that left child fields outside the Wire tab
  • Module config: NEO badge checkbox and tab label sync fixes
  • Auto-complete runs on ProcessTemplate::fieldAdded

1.1.1 — Migration-friendly editor tab

  • Configurable SEO tab label and optional NEO badge (on by default)
  • data-seoneo-tab="1" on the Wire tab link
  • README: installing alongside MarkupSEO / Seo Maestro

Docs (this release)

  • README: JSON-LD marked BETA consistently; removed broken ROADMAP.md reference; PRO scope note clarified

Full changelog: https://github.com/PeterKnightDigital/SeoNeo/blob/main/README.md#changelog

SeoNeo 1.1.1

10 Jun 13:24

Choose a tag to compare

What's new

Migration-friendly tab UI — when MarkupSEO (or another module) also adds an SEO tab, SeoNeo no longer looks identical:

  • Editor tab label defaults to SEO (configurable)
  • Small NEO badge on the Wire tab by default
  • data-seoneo-tab="1" on the tab link for stable admin styling

Configure under Modules → Configure → SeoNeo → Page editor tab:

  • SEO tab label — e.g. SEO, SEO Neo, or anything you prefer (synced to the seoneo_tab field)
  • Show NEO badge on tab — turn off if you use a distinct label instead

Coexistence during migration — legacy SEO fields and SeoNeo fields can stay on the same template while you copy data across. Watch frontend auto-inject on both modules to avoid doubled meta tags in <head>.

Upgrade from 1.1.0

Replace module files and refresh. ProcessWire will run the upgrade path; the tab label syncs from module config automatically.

SeoNeo 1.1.0

10 Jun 12:59

Choose a tag to compare

What's new

When you add seoneo_tab to a template, SeoNeo now inserts any missing SEO fields (seoneo_preview, seoneo_title, seoneo_description, seoneo_canonical, etc.) in the canonical order when the fieldgroup is saved.

  • Idempotent — safe on every template save
  • Shows an admin notice when fields are added via ProcessTemplate
  • Install step 4 in the README updated to document the behaviour

Install

Copy the SeoNeo folder to site/modules/, refresh modules in the PW admin, and install SeoNeo.

Upgrading from 1.0.0: replace the module files and refresh — ProcessWire will pick up the new version automatically.

SEO NEO 1.0.0 — First stable release

16 May 17:30

Choose a tag to compare

SEO NEO 1.0.0

First stable release. Upgrades cleanly from 1.0.0-beta.1.

What's new since beta.1

Google SERP Preview

  • Field renamed to Google SERP Preview with a descriptive helper line beneath the heading
  • Desktop / Mobile surface toggle above the card
  • Language switcher (multilingual sites only) — switch language versions of the SERP without leaving the page
  • Both control groups now use consistent active state: white pill, accent-coloured text, subtle shadow
  • Button vertical padding increased for a more comfortable click target

Defensive upgrade self-heal

  • ___upgrade() now re-asserts seoneo_preview->inputfieldClass = InputfieldSeoNeoPreview, repairs the field label and description, and ensures the companion InputfieldSeoNeoPreview module is registered — guards against stale installs where the SERP card was silently falling back to a plain text input

CSS design tokens

  • SeoNeo.css rebuilt with a three-layer token system (--sn-* namespace): primary palette → secondary palette → semantic tokens (border, radius, shadow, transition)
  • Accent colour reads var(--pw-main-color, #eb1d61) — automatically matches the active ProcessWire admin theme

New test

  • tests/test-upgrade-self-heal.php — 9-check CLI smoke test covering version, companion-module install state, field wiring, helper idempotency, and live SERP card render

Upgrade path

  1. Copy module files to site/modules/SeoNeo/ (or pull if symlinked)
  2. Modules → Refresh in the PW admin
  3. Click Upgrade on SeoNeo — ___upgrade() runs automatically and will surface an admin message if it repaired anything

Requirements

  • ProcessWire ≥ 3.0.200
  • PHP ≥ 8.1