Index: src/routes/posts.js
===================================================================
--- src/routes/posts.js	(revision 9eb6e1bceee7058678085d70abe8ff4dffe8bff8)
+++ src/routes/posts.js	(revision 86cfa1a2d9b65efe6ad3db8bd0411bedd61b0f82)
@@ -881,5 +881,5 @@
     try { target = await ActivityPubService.resolveRemoteNote(uri, site ? { asSlug: site.slug } : {}); } catch { /* ignore */ }
     // Not a post? Maybe the URI is a profile/actor → offer Follow, not reply.
-    if (!target) { try { followTarget = await ActivityPubService.resolveRemoteActor(uri); } catch { /* ignore */ } }
+    if (!target) { try { followTarget = await ActivityPubService.resolveRemoteActor(uri, site ? { asSlug: site.slug } : {}); } catch { /* ignore */ } }
   }
   renderPage(req, res, 'pages/authorize-interaction', {
Index: src/routes/search.js
===================================================================
--- src/routes/search.js	(revision 9eb6e1bceee7058678085d70abe8ff4dffe8bff8)
+++ src/routes/search.js	(revision 86cfa1a2d9b65efe6ad3db8bd0411bedd61b0f82)
@@ -120,5 +120,7 @@
   if (remote) remoteKind = 'note';
   if (!remote) {
-    try { remote = await ActivityPubService.resolveRemoteActor(remoteUri); } catch { /* onbereikbaar */ }
+    // Ook ondertekend: een profiel op een instance met authorized fetch
+    // (mastodon.social) geeft anders een 401 en leek dan niet te bestaan.
+    try { remote = await ActivityPubService.resolveRemoteActor(remoteUri, { asSlug: site.slug }); } catch { /* onbereikbaar */ }
     if (remote) remoteKind = 'actor';
   }
Index: src/services/ap-following.js
===================================================================
--- src/services/ap-following.js	(revision 9eb6e1bceee7058678085d70abe8ff4dffe8bff8)
+++ src/services/ap-following.js	(revision 86cfa1a2d9b65efe6ad3db8bd0411bedd61b0f82)
@@ -172,9 +172,20 @@
 // authorize_interaction "Follow" flow). Returns display fields + inbox, or null
 // when it isn't a reachable actor (e.g. the input was a post, not a profile).
-export async function resolveRemoteActor(input) {
+//
+// ONDERTEKEND ALLEEN ALS DE AANROEPER DE SITE NOEMT (opts.asSlug). Een instance
+// met authorized fetch (mastodon.social) geeft een onbetekende GET een 401, en
+// dan leek een bestaand profiel te ontbreken -- terwijl een ander Mastodon
+// zonder die instelling het wel toonde. fetchActor probeert eerst onbetekend en
+// tekent pas als dat niet lukt.
+//
+// Tekenen is deze site die voor het verzoek instaat, met haar eigen sleutel.
+// Dat mag alleen namens een ingelogde beheerder van die site: de zoekbalk
+// (achter mayLookUp) en /authorize_interaction (requireSiteManager) zijn de
+// enige die asSlug meegeven. Zonder opts blijft dit onbetekend.
+export async function resolveRemoteActor(input, opts = {}) {
   const s = String(input || '').trim();
   const actorUrl = /^https?:\/\//i.test(s) ? (safeUrl(s) || null) : await webfingerResolve(s);
   if (!actorUrl) return null;
-  const actor = await fetchActor(actorUrl).catch(() => null);
+  const actor = await fetchActor(actorUrl, opts.asSlug ? { asSlug: opts.asSlug } : {}).catch(() => null);
   if (!actor || !actor.id || !actor.inbox) return null;
   const ai = actorInfo(actor, actor.id);
