diff --git a/src/client/pages/explore.vue b/src/client/pages/explore.vue
index 596bc1f0ed..0c29b11b38 100644
--- a/src/client/pages/explore.vue
+++ b/src/client/pages/explore.vue
@@ -69,7 +69,7 @@
 						<template #prefix><i class="fas fa-search"></i></template>
 						<template #label>{{ $ts.searchUser }}</template>
 					</MkInput>
-					<MkRadios v-model="searchScope">
+					<MkRadios v-model="searchOrigin">
 						<option value="local">{{ $ts.local }}</option>
 						<option value="remote">{{ $ts.remote }}</option>
 						<option value="both">{{ $ts.both }}</option>
@@ -167,14 +167,14 @@ export default defineComponent({
 				limit: 10,
 				params: computed(() => (this.searchQuery && this.searchQuery !== '') ? {
 					query: this.searchQuery,
-					scope: this.searchScope,
+					origin: this.searchOrigin,
 				} : null)
 			},
 			tagsLocal: [],
 			tagsRemote: [],
 			stats: null,
 			searchQuery: null,
-			searchScope: 'both',
+			searchOrigin: 'both',
 			num: number,
 		};
 	},
diff --git a/src/server/api/endpoints/users/search-by-username-and-host.ts b/src/server/api/endpoints/users/search-by-username-and-host.ts
index 8fdc710658..3b8d024af5 100644
--- a/src/server/api/endpoints/users/search-by-username-and-host.ts
+++ b/src/server/api/endpoints/users/search-by-username-and-host.ts
@@ -46,13 +46,15 @@ export const meta = {
 };
 
 export default define(meta, async (ps, me) => {
+	const activeThreshold = new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)); // 30日
+
 	if (ps.host) {
 		const q = Users.createQueryBuilder('user')
 			.where('user.isSuspended = FALSE')
 			.andWhere('user.host LIKE :host', { host: ps.host.toLowerCase() + '%' });
 
 		if (ps.username) {
-			q.andWhere('user.usernameLower like :username', { username: ps.username.toLowerCase() + '%' });
+			q.andWhere('user.usernameLower LIKE :username', { username: ps.username.toLowerCase() + '%' });
 		}
 
 		q.andWhere('user.updatedAt IS NOT NULL');
@@ -65,12 +67,12 @@ export default define(meta, async (ps, me) => {
 		let users = await Users.createQueryBuilder('user')
 			.where('user.host IS NULL')
 			.andWhere('user.isSuspended = FALSE')
-			.andWhere('user.usernameLower like :username', { username: ps.username.toLowerCase() + '%' })
+			.andWhere('user.usernameLower LIKE :username', { username: ps.username.toLowerCase() + '%' })
 			.andWhere(new Brackets(qb => { qb
-				.where('user.lastActiveDate IS NULL')
-				.orWhere('user.lastActiveDate > :activeThreshold', { activeThreshold: new Date(Date.now() - USER_ACTIVE_THRESHOLD) });
+				.where('user.updatedAt IS NULL')
+				.orWhere('user.updatedAt > :activeThreshold', { activeThreshold: activeThreshold });
 			}))
-			.orderBy('user.lastActiveDate', 'DESC', 'NULLS LAST')
+			.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
 			.take(ps.limit!)
 			.skip(ps.offset)
 			.getMany();
@@ -79,7 +81,7 @@ export default define(meta, async (ps, me) => {
 			const otherUsers = await Users.createQueryBuilder('user')
 				.where('user.host IS NOT NULL')
 				.andWhere('user.isSuspended = FALSE')
-				.andWhere('user.usernameLower like :username', { username: ps.username.toLowerCase() + '%' })
+				.andWhere('user.usernameLower LIKE :username', { username: ps.username.toLowerCase() + '%' })
 				.andWhere('user.updatedAt IS NOT NULL')
 				.orderBy('user.updatedAt', 'DESC')
 				.take(ps.limit! - users.length)
diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts
index e4fbfedd10..9aa988d9ed 100644
--- a/src/server/api/endpoints/users/search.ts
+++ b/src/server/api/endpoints/users/search.ts
@@ -3,7 +3,6 @@ import define from '../../define';
 import { UserProfiles, Users } from '@/models/index';
 import { User } from '@/models/entities/user';
 import { Brackets } from 'typeorm';
-import { USER_ACTIVE_THRESHOLD } from '@/const';
 
 export const meta = {
 	tags: ['users'],
@@ -25,9 +24,9 @@ export const meta = {
 			default: 10,
 		},
 
-		scope: {
-			validator: $.optional.str.or(['local', 'remote', 'both']),
-			default: 'both',
+		origin: {
+			validator: $.optional.str.or(['local', 'remote', 'combined']),
+			default: 'combined',
 		},
 
 		detail: {
@@ -48,59 +47,49 @@ export const meta = {
 };
 
 export default define(meta, async (ps, me) => {
+	const activeThreshold = new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)); // 30日
+
 	const isUsername = ps.query.startsWith('@');
 
 	let users: User[] = [];
 
 	if (isUsername) {
 		const usernameQuery = Users.createQueryBuilder('user')
-			.where('user.usernameLower like :username', { username: ps.query.replace('@', '').toLowerCase() + '%' })
+			.where('user.usernameLower LIKE :username', { username: ps.query.replace('@', '').toLowerCase() + '%' })
 			.andWhere(new Brackets(qb => { qb
-				.where('user.lastActiveDate IS NULL')
-				.orWhere('user.lastActiveDate > :activeThreshold', { activeThreshold: new Date(Date.now() - USER_ACTIVE_THRESHOLD) });
+				.where('user.updatedAt IS NULL')
+				.orWhere('user.updatedAt > :activeThreshold', { activeThreshold: activeThreshold });
 			}))
 			.andWhere('user.isSuspended = FALSE');
 
-		if (ps.scope === 'local') {
-			usernameQuery
-				.andWhere('user.host IS NULL')
-				.orderBy('user.lastActiveDate', 'DESC', 'NULLS LAST');
-		} else if (ps.scope === 'remote') {
-			usernameQuery
-				.andWhere('user.host IS NOT NULL')
-				.orderBy('user.updatedAt', 'DESC', 'NULLS LAST');
-		} else { // both
-			usernameQuery
-				.orderBy('user.updatedAt', 'DESC', 'NULLS LAST');
+		if (ps.origin === 'local') {
+			usernameQuery.andWhere('user.host IS NULL');
+		} else if (ps.origin === 'remote') {
+			usernameQuery.andWhere('user.host IS NOT NULL');
 		}
 
 		users = await usernameQuery
+			.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
 			.take(ps.limit!)
 			.skip(ps.offset)
 			.getMany();
 	} else {
 		const nameQuery = Users.createQueryBuilder('user')
-			.where('user.name ilike :query', { query: '%' + ps.query + '%' })
+			.where('user.name ILIKE :query', { query: '%' + ps.query + '%' })
 			.andWhere(new Brackets(qb => { qb
-				.where('user.lastActiveDate IS NULL')
-				.orWhere('user.lastActiveDate > :activeThreshold', { activeThreshold: new Date(Date.now() - USER_ACTIVE_THRESHOLD) });
+				.where('user.updatedAt IS NULL')
+				.orWhere('user.updatedAt > :activeThreshold', { activeThreshold: activeThreshold });
 			}))
 			.andWhere('user.isSuspended = FALSE');
 
-		if (ps.scope === 'local') {
-			nameQuery
-				.andWhere('user.host IS NULL')
-				.orderBy('user.lastActiveDate', 'DESC', 'NULLS LAST');
-		} else if (ps.scope === 'remote') {
-			nameQuery
-				.andWhere('user.host IS NOT NULL')
-				.orderBy('user.updatedAt', 'DESC', 'NULLS LAST');
-		} else { // both
-			nameQuery
-				.orderBy('user.updatedAt', 'DESC', 'NULLS LAST');
+		if (ps.origin === 'local') {
+			nameQuery.andWhere('user.host IS NULL');
+		} else if (ps.origin === 'remote') {
+			nameQuery.andWhere('user.host IS NOT NULL');
 		}
 
 		users = await nameQuery
+			.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
 			.take(ps.limit!)
 			.skip(ps.offset)
 			.getMany();
@@ -108,32 +97,25 @@ export default define(meta, async (ps, me) => {
 		if (users.length < ps.limit!) {
 			const profQuery = UserProfiles.createQueryBuilder('prof')
 				.select('prof.userId')
-				.where('prof.description ilike :query', { query: '%' + ps.query + '%' });
+				.where('prof.description ILIKE :query', { query: '%' + ps.query + '%' });
 
-			if (ps.scope === 'local') {
+			if (ps.origin === 'local') {
 				profQuery.andWhere('prof.userHost IS NULL');
-			} else if (ps.scope === 'remote') {
+			} else if (ps.origin === 'remote') {
 				profQuery.andWhere('prof.userHost IS NOT NULL');
 			}
 
 			const query = Users.createQueryBuilder('user')
 				.where(`user.id IN (${ profQuery.getQuery() })`)
 				.andWhere(new Brackets(qb => { qb
-					.where('user.lastActiveDate IS NULL')
-					.orWhere('user.lastActiveDate > :activeThreshold', { activeThreshold: new Date(Date.now() - USER_ACTIVE_THRESHOLD) });
+					.where('user.updatedAt IS NULL')
+					.orWhere('user.updatedAt > :activeThreshold', { activeThreshold: activeThreshold });
 				}))
 				.andWhere('user.isSuspended = FALSE')
 				.setParameters(profQuery.getParameters());
 
-			if (ps.scope === 'local') {
-				query.orderBy('user.lastActiveDate', 'DESC', 'NULLS LAST');
-			} else if (ps.scope === 'remote') {
-				query.orderBy('user.updatedAt', 'DESC', 'NULLS LAST');
-			} else { // both
-				query.orderBy('user.updatedAt', 'DESC', 'NULLS LAST');
-			}
-
 			users = users.concat(await query
+				.orderBy('user.updatedAt', 'DESC', 'NULLS LAST')
 				.take(ps.limit!)
 				.skip(ps.offset)
 				.getMany()