Index: scripts/migrate-circles.mjs
===================================================================
--- scripts/migrate-circles.mjs	(revision 8ef8c3eac2476504a52ea0e74c93a6692330eecb)
+++ scripts/migrate-circles.mjs	(revision d71ed0317f432dcfec0a7c029d67f8d6f429ff9f)
@@ -13,5 +13,5 @@
   try {
     const r = await fetch(siteUrl, { headers: { Accept: 'application/activity+json' }, redirect: 'manual' });
-    if (r.status >= 300 && r.status < 400) { const loc = r.headers.get('location'); if (loc) return loc; }
+    if (r.status >= 300 && r.status < 400) { const loc = r.headers.get('location'); if (loc) return new URL(loc, siteUrl).href; }
     if (r.ok) return siteUrl; // root already serves the actor
   } catch (e) { /* unreachable */ }
