cnj/seotamic
Seotamic is a Laravel package for managing SEO metadata across your app. It helps you define titles, descriptions, Open Graph and Twitter card tags, and canonical URLs for pages and Eloquent models, making it easy to improve search visibility and social sharing with minimal configuration.
Architecture fit. cnj/seotamic is a Statamic v4 addon, which in Laravel terms means a standard Composer package with an addon service provider, auto-discovery, a publishable config, blueprint fieldset additions, and one or more Antlers tags responsible for emitting meta tags into the document <head>. That is the correct architectural shape for this problem domain: SEO metadata belongs in entry front matter, is authored in the control panel, and is rendered declaratively in templates. There is no architectural friction in adopting it — it is not a service, not a sidecar, and it introduces no new runtime infrastructure. The fit question is therefore not "does the architecture work" but "is this the right implementation of a commodity capability."
Integration feasibility. Mechanically trivial: composer require cnj-digital/seotamic, publish config, append the addon's fieldset to a collection blueprint, drop a single Antlers partial into the layout, and validate output. Realistic effort for a competent Statamic developer is measured in hours for a pilot, days for a full multi-site rollout. Two caveats raise the true cost. First, the addon competes with an entrenched, well-documented incumbent in the Statamic ecosystem (SEO Pro by Aerni), so the burden of proof is on this package to be meaningfully better, not merely available. Second, SEO metadata changes are not neutral: canonical, robots, and hreflang are directives that can deindex pages or consolidate ranking signals onto the wrong URL. Integration effort is low; integration risk is asymmetric because the blast radius of a subtle default-config error is a traffic incident, not a bug ticket.
Technical risk. The dominant risk is lifecycle, not code quality:
Key questions to put to the maintainer and to our own team before adoption:
composer.json and a LICENSE file?statamic/cms and laravel/framework, and is there a stated or in-progress path to Statamic v5/v6?hreflang/multisite, JSON-LD schema, XML sitemap, redirects, 404 monitoring, OG image generation? Capability surface determines whether this replaces an incumbent or merely supplements it.<title> and duplicate canonical tags?Stack fit. The package slots cleanly into an existing Statamic-on-Laravel stack with no new runtime dependencies, no queue workers, no external API calls assumed, and no database migrations implied by the front-matter model. That is a genuine advantage: it is deployable through the normal Composer + deploy pipeline and carries no incremental infrastructure cost. It is a poor fit only if we are on Statamic v5+, in which case it is likely a non-starter until compatibility is verified.
Migration path. The saving grace of this entire category is that SEO data lives in Markdown front matter alongside the entry. That means migration off this package is cheap — we retain the content and only lose the rendering layer. Migration onto it from an incumbent (SEO Pro, Aardvark, or hand-rolled Antlers meta) is the harder direction: field handles differ, so we need an explicit handle-mapping table and a one-time scripted rewrite of front matter across all collections, plus a fallback in the head partial so pages render correctly during the transition window. Plan for a dual-read period rather than a cutover.
Compatibility. Verify explicitly, not by assumption: PHP version floor, Laravel major, statamic/cms constraint, and behaviour under multisite and static caching. Also verify coexistence — if any legacy meta tags remain in layouts, we will emit duplicate canonical and og:* tags, which search engines handle inconsistently. Removal of legacy tags must be part of the same change set as the new partial, not a follow-up.
Sequencing. Gate the rollout:
curl diff of the <head>.If any of steps 1–4 fails, the fallback is to keep the front-matter field schema and render meta tags ourselves with a small Antlers partial. That fallback is genuinely viable and should be documented before we commit, because it caps our downside and neutralises the maintenance concerns below.
Maintenance. Ownership sits with a single external agency whose incentives are not aligned with our upgrade calendar. Concretely: when Statamic ships a major version, we do not control the timeline on which this addon follows, and an unmaintained addon becomes a blocker on core security updates. Mitigations are (a) confirm the license permits forking, (b) budget a fork-and-maintain contingency of roughly a few engineer-days per year, and (c) treat the addon as replaceable by design — since the metadata is portable front matter, the exit cost is the rendering layer only. Do not let it become load-bearing for anything beyond head markup.
Support. Realistically GitHub issues with no SLA and no commercial tier. Internal support therefore rests on our own team's Statamic fluency. For a 21-star package, expect to debug edge cases ourselves and to upstream fixes or carry a local patch. This is acceptable for a rendering-layer addon and unacceptable if we were relying on it for redirects or 404 monitoring, where failure is operationally visible.
Scaling. Runtime cost is negligible — it is string assembly in the head. The scaling concerns are elsewhere: sitemap generation on large content sets (tens of thousands of entries) can be slow and should be checked against static caching and any sitemap caching layer; multisite multiplies the URL surface and therefore the hreflang/canonical permutation space, which is the most common correctness failure at scale; and any OG image generation, if present, is the one place where per-request compute could appear. Confirm behaviour before committing a large-site rollout.
Failure modes, ranked by expected damage:
robots or a canonical pointing at the wrong host after a domain or environment change. Highest severity, lowest visibility; only Search Console catches it.canonical/og:* signals.noindex after a content edit; the SEO addon and the cache layer must be verified as coupled.hreflang set bleeding into another.Ramp-up. Developer ramp is short for anyone already fluent in Statamic blueprints and Antlers — under a day. Editor ramp is short but needs deliberate training, because the failure mode is human: editors leaving noindex on, or pasting full URLs into canonical fields. Allocate a short CMS-editor guide and a CP-level guardrail (sensible defaults, inline help, required fields). The genuine ramp cost is domain expertise: whoever owns this must be able to reason about canonicalization, hreflang, and structured data, and must own a recurring Search Console review. Scope this as an ongoing responsibility, not a one-off integration task.
How can I help you explore Laravel packages today?