diff --git a/packages/frontend/src/pages/search.vue b/packages/frontend/src/pages/search.vue
index c080b763bb..7918f9f577 100644
--- a/packages/frontend/src/pages/search.vue
+++ b/packages/frontend/src/pages/search.vue
@@ -12,12 +12,37 @@ import { computed } from 'vue';
 import XNotes from '@/components/MkNotes.vue';
 import { i18n } from '@/i18n';
 import { definePageMetadata } from '@/scripts/page-metadata';
+import * as os from '@/os';
+import { useRouter } from '@/router';
+import { $i } from '@/account';
+
+const router = useRouter();
 
 const props = defineProps<{
 	query: string;
 	channel?: string;
 }>();
 
+const query = props.query;
+
+if ($i != null) {
+	if (query.startsWith('https://') || (query.startsWith('@') && !query.includes(' '))) {
+		const promise = os.api('ap/show', {
+			uri: props.query,
+		});
+
+		os.promiseDialog(promise, null, null, i18n.ts.fetchingAsApObject);
+
+		const res = await promise;
+
+		if (res.type === 'User') {
+			router.replace(`/@${res.object.username}@${res.object.host}`);
+		} else if (res.type === 'Note') {
+			router.replace(`/notes/${res.object.id}`);
+		}
+	}
+}
+
 const pagination = {
 	endpoint: 'notes/search' as const,
 	limit: 10,