diff --git a/packages/backend/src/remote/activitypub/models/person.ts b/packages/backend/src/remote/activitypub/models/person.ts
index 1257e75b8..73f49d20a 100644
--- a/packages/backend/src/remote/activitypub/models/person.ts
+++ b/packages/backend/src/remote/activitypub/models/person.ts
@@ -48,6 +48,7 @@ import Resolver from "../resolver.js";
 import { extractApHashtags } from "./tag.js";
 import { resolveNote, extractEmojis } from "./note.js";
 import { resolveImage } from "./image.js";
+import { getSubjectHostFromUri } from "@/remote/resolve-user.js"
 
 const logger = apLogger;
 
@@ -184,7 +185,7 @@ export async function createPerson(
 
 	logger.info(`Creating the Person: ${person.id}`);
 
-	const host = subjectHost ?? toPuny(new URL(object.id).hostname);
+	const host = subjectHost ?? await getSubjectHostFromUri(object.id) ?? toPuny(new URL(object.id).hostname);
 
 	const { fields } = analyzeAttachments(person.attachment || []);
 
diff --git a/packages/backend/src/remote/resolve-user.ts b/packages/backend/src/remote/resolve-user.ts
index e1efcd12b..1e83a917c 100644
--- a/packages/backend/src/remote/resolve-user.ts
+++ b/packages/backend/src/remote/resolve-user.ts
@@ -171,6 +171,22 @@ export async function resolveUser(
 	return user;
 }
 
+export async function getSubjectHostFromUri( uri: string): Promise<string | null> {
+	try {
+		const acct = subjectToAcct((await webFinger(uri)).subject);
+		const res = await resolveUserWebFinger(acct.toLowerCase());
+		const finalAcct = subjectToAcct(res.subject);
+		const m = finalAcct.match(/^([^@]+)@(.*)/);
+		if (!m) {
+			return null;
+		}
+		return m[2];
+	}
+	catch {
+		return null;
+	}
+}
+
 async function resolveUserWebFinger(acctLower: string, recurse: boolean = true): Promise<{
 	subject: string,
 	self: {