diff --git a/src/client/app/common/views/components/mention.vue b/src/client/app/common/views/components/mention.vue
index f212fd3ca5..4e9f9e90d6 100644
--- a/src/client/app/common/views/components/mention.vue
+++ b/src/client/app/common/views/components/mention.vue
@@ -1,11 +1,17 @@
 <template>
-<router-link class="ldlomzub" :to="`/${ canonical }`" v-user-preview="canonical">
+<router-link class="ldlomzub" :to="url" v-user-preview="canonical" v-if="url.startsWith('/')">
 	<span class="me" v-if="isMe">{{ $t('@.you') }}</span>
 	<span class="main">
 		<span class="username">@{{ username }}</span>
 		<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }" v-if="(host != localHost) || $store.state.settings.showFullAcct">@{{ toUnicode(host) }}</span>
 	</span>
 </router-link>
+<a class="ldlomzub" :href="url" target="_blank" rel="noopener" v-else>
+	<span class="main">
+		<span class="username">@{{ username }}</span>
+		<span class="host" :class="{ fade: $store.state.settings.contrastedAcct }">@{{ toUnicode(host) }}</span>
+	</span>
+</a>
 </template>
 
 <script lang="ts">
@@ -32,6 +38,15 @@ export default Vue.extend({
 		};
 	},
 	computed: {
+		url(): string {
+			switch (this.host) {
+				case 'twitter.com':
+				case 'github.com':
+					return `https://${this.host}/${this.username}`;
+				default:
+					return `/${this.canonical}`;
+			}
+		},
 		canonical(): string {
 			return this.host === localHost ? `@${this.username}` : `@${this.username}@${toUnicode(this.host)}`;
 		},