Index: src/routes/admin-migrate.js
===================================================================
--- src/routes/admin-migrate.js	(revision dc802b4223862381c3a03fc87973462a7b333346)
+++ src/routes/admin-migrate.js	(revision e9128bc5aab022193bf90a325fb16b03b9d6540f)
@@ -35,4 +35,6 @@
 import { buildArchive, zipArchive } from '../services/ArchiveExportService.js';
 import { readArchiveZip, importArchive } from '../services/ArchiveImportService.js';
+import { parseApAliases } from './admin-sites.js';
+import db from '../config/database.js';
 
 const router = express.Router();
@@ -72,4 +74,9 @@
 }
 
+/** De aliassen als tekst, een per regel, zoals het invoerveld ze wil. */
+function aliasTekst(site) {
+  try { return (JSON.parse((site && site.ap_aliases) || '[]') || []).join('\n'); } catch { return ''; }
+}
+
 /**
  * Waar zouden we vandaan kunnen halen? De alias die we zelf claimen (FEP-7628
@@ -94,5 +101,5 @@
     telling, fout, mb,
     verslag: null,
-    bron: bronKandidaat(site),
+    bron: bronKandidaat(site), aliassen: aliasTekst(site), movedTo: (site && site.moved_to) || null,
     mig: site ? Migration.migrationStatus(site.slug) : null,
     haalVerslag: null,
@@ -133,5 +140,5 @@
     pageTitle: 'Migreren', bodyClass: 'on-special',
     telling, fout: null, mb, verslag: null,
-    bron: opgegeven || bronKandidaat(site),
+    bron: opgegeven || bronKandidaat(site), aliassen: aliasTekst(site), movedTo: site.moved_to || null,
     mig: Migration.migrationStatus(site.slug),
     haalVerslag: r,
@@ -139,4 +146,28 @@
     error: null,
   });
+});
+
+/**
+ * Je oude account claimen (FEP-7628 alsoKnownAs).
+ *
+ * Stond op de site-bewerkpagina, tussen de kleuren en de feedinstellingen. Maar
+ * dit is stap EEN van een verhuizing, en zonder deze claim weigert de oude
+ * instantie de Move met `no_backreference`. Het hoort dus hier, boven de knop
+ * die hem nodig heeft.
+ */
+router.post('/aliases', requireGod, async (req, res) => {
+  const site = res.locals.site;
+  if (!site) return res.redirect('/admin/migrate?error=' + encodeURIComponent('Geen site'));
+  const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, '');
+  let lijst;
+  try {
+    lijst = await parseApAliases(req.body.ap_aliases, ActivityPubService.actorId(base, site.slug));
+  } catch (e) {
+    // Welke regel niet deugde, niet alleen DAT er iets niet deugde.
+    return res.redirect('/admin/migrate?error=' + encodeURIComponent(`Onbruikbaar adres: ${e && e.message}`));
+  }
+  db.prepare('UPDATE sites SET ap_aliases = ? WHERE slug = ?').run(JSON.stringify(lijst), site.slug);
+  res.redirect('/admin/migrate?success=' + encodeURIComponent(
+    lijst.length ? `${lijst.length} adres(sen) opgeslagen als jouw vorige account.` : 'Aliassen leeggemaakt.'));
 });
 
@@ -195,5 +226,6 @@
     pageTitle: 'Migreren', bodyClass: 'on-special',
     telling: tellen(site).telling, fout: null, mb,
-    bron: bronKandidaat(site), mig: Migration.migrationStatus(site.slug), haalVerslag: null,
+    bron: bronKandidaat(site), aliassen: aliasTekst(site), movedTo: site.moved_to || null,
+    mig: Migration.migrationStatus(site.slug), haalVerslag: null,
     verslag: verslag ? { ...verslag, echt, overschrijf, bestand: req.file.originalname, bytes: req.file.buffer.length } : null,
     success: (echt && verslag && !fout) ? 'Archief geïmporteerd' : null,
Index: src/routes/admin-sites.js
===================================================================
--- src/routes/admin-sites.js	(revision dc802b4223862381c3a03fc87973462a7b333346)
+++ src/routes/admin-sites.js	(revision e9128bc5aab022193bf90a325fb16b03b9d6540f)
@@ -80,5 +80,5 @@
  * Move fail at the old server with no hint why. Throws the offending line.
  */
-async function parseApAliases(raw, ownActorUri) {
+export async function parseApAliases(raw, ownActorUri) {
   const lines = String(raw || '').split(/\r?\n/).map((s) => s.trim()).filter(Boolean);
   if (lines.length > 5) throw new Error(lines[5] + ' (max 5)');
@@ -332,10 +332,18 @@
   // FEP-7628 aliases — validated/resolved before anything is written.
   const base = (process.env.PUBLIC_BASE_URL || '').replace(/\/+$/, '');
-  let apAliasesJson = null;
-  try {
-    const arr = await parseApAliases(f.ap_aliases, AP.actorId(base, req.params.slug));
-    apAliasesJson = arr.length ? JSON.stringify(arr) : null;
-  } catch (e) {
-    return res.redirect(`/admin/sites/${req.params.slug}/edit?error=` + encodeURIComponent(`Alias niet herkend of niet vindbaar: ${e.message}`));
+  // Het INVOERVELD staat hier sinds 14-8 niet meer: aliassen horen bij
+  // Migreren. Dit formulier mag ze dus niet aanraken, en al helemaal niet
+  // leegmaken omdat het veld ontbreekt. Anders verlies je je claim op je oude
+  // account door je kleuren aan te passen, en weigert de Move daarna met
+  // no_backreference. Alleen verwerken als het veld ECHT is meegestuurd, zodat
+  // een oude gecachte pagina die hem nog wel heeft blijft werken.
+  let apAliasesJson = site.ap_aliases || null;
+  if (Object.prototype.hasOwnProperty.call(f, 'ap_aliases')) {
+    try {
+      const arr = await parseApAliases(f.ap_aliases, AP.actorId(base, req.params.slug));
+      apAliasesJson = arr.length ? JSON.stringify(arr) : null;
+    } catch (e) {
+      return res.redirect(`/admin/sites/${req.params.slug}/edit?error=` + encodeURIComponent(`Alias niet herkend of niet vindbaar: ${e.message}`));
+    }
   }
 
