---
name: payload-cms-seo-column-rename
description: Payload CMS SEO plugin renamed the meta_meta_title column to meta_title between v3.33 and v3.84 — upgrading without migration leaves existing data inaccessible
type: concept
---

# Payload CMS SEO Plugin — Column Rename v3.33 → v3.84

## What Changed

The `@payloadcms/plugin-seo` plugin renamed its database columns between versions:

| Old name (≤ v3.33) | New name (≥ v3.84) |
|--------------------|-------------------|
| `meta_meta_title`  | `meta_title`      |
| `meta_meta_description` | `meta_description` |
| `meta_meta_image_id` | `meta_image_id` |

The old names had a `meta_` prefix duplicated (`meta_meta_...`) because the column was generated from a field group named `meta` with a field also named `meta`.

## Symptoms After Upgrade

- SEO fields appear blank in the admin panel
- Existing page titles/descriptions disappear from the frontend
- No error on startup — data is silently not found

## Fix — Manual Migration

Run directly on the PostgreSQL database:

```sql
-- For each Payload collection that uses the SEO plugin
ALTER TABLE pages RENAME COLUMN meta_meta_title TO meta_title;
ALTER TABLE pages RENAME COLUMN meta_meta_description TO meta_description;
ALTER TABLE pages RENAME COLUMN meta_meta_image_id TO meta_image_id;

-- Repeat for other collections (posts, products, etc.)
ALTER TABLE posts RENAME COLUMN meta_meta_title TO meta_title;
ALTER TABLE posts RENAME COLUMN meta_meta_description TO meta_description;
ALTER TABLE posts RENAME COLUMN meta_meta_image_id TO meta_image_id;
```

## Before Upgrading — Check Which Columns Exist

```sql
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'pages'
  AND column_name LIKE 'meta%'
ORDER BY column_name;
```

If you see `meta_meta_title` → you're on the old schema and will need the rename migration.

## Payload `migrate:create` Requirement

`npx payload migrate:create` requires a live PostgreSQL connection to compute the diff — it cannot run without a database. Always run it against a dev database, not in CI without a DB service.

## Related

- [[wiki/concepts/payload-cms-push-dev-prod]] — push vs migration workflow
- [[wiki/concepts/payload-cms-node26-esm-workaround]] — Node 26 seed script fix

**Source:** daily/2026-05-13.md | 2026-05-13
