gwd/seo-meta-nova-field
gwd/seo-meta-nova-field adds a ready-to-use SEO metadata field to Laravel Nova. Manage page titles, meta descriptions, keywords, Open Graph and Twitter card tags from a clean Nova form, keeping SEO content alongside your Eloquent models. Reduce custom code and keep metadata editable by non-developer...
Architecture fit. The package is a Laravel Nova custom field, which means it is a UI-layer artifact, not a domain package. It contributes two things: a PHP Field subclass that hydrates/fills a resource attribute, and a compiled Vue component that renders a grouped set of SEO inputs (meta title, description, keywords, OG/Twitter tags, canonical, robots, etc.) inside a Nova form. Fit therefore depends entirely on two decisions the consuming team must make anyway: (1) whether SEO metadata lives in a single JSON column or in discrete columns, and (2) whether the front end renders meta tags from that store. This package only solves the admin input problem. It does not emit tags, generate sitemaps, validate against SERP length limits at the model layer, or handle og:image uploads. Teams expecting an end-to-end SEO subsystem will be disappointed; teams that need a tidy Nova editing surface for ~10 meta keys get exactly that.
Integration feasibility. Nominal install is a Composer require plus registering the field in a Nova resource and publishing compiled assets. The real constraint is version alignment: the last release is 2020-09-15, i.e. the Nova 3 / Laravel 6–8 era. Nova 4 (2022) moved custom fields to Vue 3 and a new asset pipeline; Nova 5 continues that. A Vue 2 component will not render in a current Nova install without a rebuild. With zero dependents and 24 stars, there is no evidence anyone has validated this against modern Nova or PHP 8.1+. Feasibility is high on a legacy stack, low-to-moderate on a current one, and in the latter case the honest estimate is a small fork project rather than an install.
Technical risk.
resolveUsing/fillUsing breaks on a newer Nova, the field renders but writes nothing, and editors wipe SEO metadata on save without an error.gwd/*) and repository owner (AndreasGJ) differ, suggesting a transfer or internal fork published publicly. Confirm provenance before adopting.Key questions to resolve before adoption.
composer.json constraint, or does it rely on whatever is installed?nova-translatable or spatie/laravel-translatable for multi-locale sites?Stack fit. Clean fit for a Laravel + Nova 3 application that already stores SEO metadata per record and simply wants a better editing experience. Poor fit for Nova 4/5 without a rebuild, and irrelevant for teams not using Nova at all — Nova's license cost is a precondition, which narrows the addressable base and explains the low adoption signal.
Migration path. Recommended sequence: fork or vendor the package into a private repository (Composer path or VCS repository), then upgrade in place rather than waiting on upstream. Concretely: bump the Vue component to Vue 3 and the Nova 4+ asset build, update field class namespace/imports and any deprecated withMeta/resolve/fill signatures, confirm PHP 8.x compatibility, and add a minimal test that asserts round-trip persistence (fill → save → resolve) so the data-loss failure mode is caught by CI rather than by an editor.
Compatibility gates. Do not adopt on the strength of the README. Verify in a throwaway branch: install against the exact Nova/Laravel/PHP versions in production, load the field on a real resource, save and reload, and confirm the payload survives. Budget a day. If it fails, the decision becomes build-vs-fork, and for ~10 form inputs the build option is genuinely competitive.
Sequencing.
Maintenance. The dominant cost. Assume upstream is frozen and you own the code. That means tracking Nova majors yourself, rebuilding assets on every Nova upgrade, and absorbing PHP/Laravel deprecations. For a single field this is a few days per Nova major — acceptable if you have several resources using it, wasteful if you have one.
Support. No vendor, no SLA, no documented maintainer responsiveness. Community support is effectively nil at 24 stars and zero dependents: there is no crowd to have already hit your bug. Internal owners must be named explicitly, with a fallback plan (build in-house) if the fork stalls.
Scaling. Runtime cost is negligible — it is a form field rendered on admin pages only, with no front-end or query-path footprint. The scaling concern is data-shape, not load: a JSON blob is fine for rendering but awkward for reporting, bulk audits, or search across meta fields. If SEO metadata will feed analytics, bulk exports, or a sitemap generator, discrete indexed columns are the better long-term shape.
Failure modes to monitor.
Ramp-up. Low for a Laravel developer already comfortable with Nova custom fields: roughly half a day to read the source and stand it up, one to two days to fork, upgrade, and test, plus the separate work of building the tag renderer and validation. Developers without Vue or Nova internals experience should add several days, and the upgrade path is where that time goes.
Recommendation. Adopt only as a fork you control on a Nova 3 stack, or as a reference implementation to copy from when building an equivalent Nova 4/5 field. Do not take a direct dependency on it in a current Nova environment; the install is cheap, but the hidden cost is ownership, and the package's low adoption signal tells you that cost has already deterred everyone else.
How can I help you explore Laravel packages today?