diff --git a/src/client/components/autocomplete.vue b/src/client/components/autocomplete.vue
index c8e0ae6d7651ae9693b9940d17ee69fcb0fd91f8..f6cf3f45edfb8f97482fb29000b6b4d2483a3751 100644
--- a/src/client/components/autocomplete.vue
+++ b/src/client/components/autocomplete.vue
@@ -2,7 +2,7 @@
 <div class="swhvrteh" @contextmenu.prevent="() => {}">
 	<ol class="users" ref="suggests" v-if="type === 'user'">
 		<li v-for="user in users" @click="complete(type, user)" @keydown="onKeydown" tabindex="-1" class="user">
-			<img class="avatar" :src="user.avatarUrl" alt=""/>
+			<img class="avatar" :src="user.avatarUrl"/>
 			<span class="name">
 				<mk-user-name :user="user" :key="user.id"/>
 			</span>
diff --git a/src/client/components/drive-file-thumbnail.vue b/src/client/components/drive-file-thumbnail.vue
index 167e95e9b14527e19e53ec5590c562abde2c28ba..3561be0bc5c440ded3bd9e21e0578aababeabd97 100644
--- a/src/client/components/drive-file-thumbnail.vue
+++ b/src/client/components/drive-file-thumbnail.vue
@@ -12,7 +12,7 @@
 		preload="metadata"
 		controls
 		v-else-if="detail && is === 'video'"/>
-	<img :src="file.thumbnailUrl" alt="" @load="onThumbnailLoaded" :style="`object-fit: ${ fit }`" v-else-if="isThumbnailAvailable"/>
+	<img :src="file.thumbnailUrl" @load="onThumbnailLoaded" :style="`object-fit: ${ fit }`" v-else-if="isThumbnailAvailable"/>
 	<fa :icon="faFileImage" class="icon" v-else-if="is === 'image'"/>
 	<fa :icon="faFileVideo" class="icon" v-else-if="is === 'video'"/>
 
diff --git a/src/client/components/error.vue b/src/client/components/error.vue
index 76dcbbcb67530e65ac98cb7868a754f9a2c9785a..f4698247b202e61f056b232963d9f423b55bff6f 100644
--- a/src/client/components/error.vue
+++ b/src/client/components/error.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="mjndxjcg _panel">
-	<img src="https://xn--931a.moe/assets/error.png" alt="" class="_ghost"/>
+	<img src="https://xn--931a.moe/assets/error.png" class="_ghost"/>
 	<p><fa :icon="faExclamationTriangle"/> {{ $t('error') }}</p>
 	<mk-button @click="() => $emit('retry')" class="button">{{ $t('retry') }}</mk-button>
 </div>
diff --git a/src/client/components/notes.vue b/src/client/components/notes.vue
index 487dff16a8eae40d3d1f8077e781c4cac2132386..fb3a4314baf856076152dbba709fa186ffdf23a0 100644
--- a/src/client/components/notes.vue
+++ b/src/client/components/notes.vue
@@ -1,7 +1,7 @@
 <template>
 <div class="mk-notes" v-size="[{ max: 500 }]">
 	<div class="empty" v-if="empty">
-		<img src="https://xn--931a.moe/assets/info.png" alt="" class="_ghost"/>
+		<img src="https://xn--931a.moe/assets/info.png" class="_ghost"/>
 		<div>{{ $t('noNotes') }}</div>
 	</div>
 
diff --git a/src/client/components/page/page.image.vue b/src/client/components/page/page.image.vue
index f0d7c7b30f4f33fb23d438e56ddee4200476d778..f5159585150fef9668867d84d243d50013a83ea9 100644
--- a/src/client/components/page/page.image.vue
+++ b/src/client/components/page/page.image.vue
@@ -1,6 +1,6 @@
 <template>
 <div class="lzyxtsnt">
-	<img v-if="image" :src="image.url" alt=""/>
+	<img v-if="image" :src="image.url"/>
 </div>
 </template>
 
diff --git a/src/client/pages/announcements.vue b/src/client/pages/announcements.vue
index 48b1e067d33311f6d1dd405231fcd5b82f6b4e60..5c6d4f58af9c7d87b9a3348671148cfc5249c8b7 100644
--- a/src/client/pages/announcements.vue
+++ b/src/client/pages/announcements.vue
@@ -8,7 +8,7 @@
 			<div class="_title"><span v-if="$store.getters.isSignedIn && !announcement.isRead">🆕 </span>{{ announcement.title }}</div>
 			<div class="_content">
 				<mfm :text="announcement.text"/>
-				<img v-if="announcement.imageUrl" :src="announcement.imageUrl" alt=""/>
+				<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/>
 			</div>
 			<div class="_footer" v-if="$store.getters.isSignedIn && !announcement.isRead">
 				<mk-button @click="read(announcement)" primary><fa :icon="faCheck"/> {{ $t('gotIt') }}</mk-button>
diff --git a/src/client/pages/follow-requests.vue b/src/client/pages/follow-requests.vue
index a212cd0e378745f9aa1d2dd5856537e86ce5ea11..14d60a12ec0825abc1fe0a1fdbd9413f5392b683 100644
--- a/src/client/pages/follow-requests.vue
+++ b/src/client/pages/follow-requests.vue
@@ -6,7 +6,7 @@
 	<mk-pagination :pagination="pagination" class="mk-follow-requests" ref="list">
 		<template #empty>
 			<div class="tkdrhpxr">
-				<img src="https://xn--931a.moe/assets/info.png" alt="" class="_ghost"/>
+				<img src="https://xn--931a.moe/assets/info.png" class="_ghost"/>
 				<div>{{ $t('noFollowRequests') }}</div>
 			</div>
 		</template>
diff --git a/src/client/pages/messaging.vue b/src/client/pages/messaging.vue
index 922d3b93c0adc9243d2f04908ebba9a3a1d969f5..bc85e7a56b78d4304d40cbb5edae68c0db3744f1 100644
--- a/src/client/pages/messaging.vue
+++ b/src/client/pages/messaging.vue
@@ -32,7 +32,7 @@
 		</router-link>
 	</sequential-entrance>
 	<div class="no-history" v-if="!fetching && messages.length == 0">
-		<img src="https://xn--931a.moe/assets/info.png" alt="" class="_ghost"/>
+		<img src="https://xn--931a.moe/assets/info.png" class="_ghost"/>
 		<div>{{ $t('noHistory') }}</div>
 	</div>
 	<mk-loading v-if="fetching"/>
diff --git a/src/client/pages/not-found.vue b/src/client/pages/not-found.vue
index e4c1b4de49d00530b42aca7ef9a6f4f2d227ae7f..6ddbd1932b3500e6714cfb200ed93d343e0e916a 100644
--- a/src/client/pages/not-found.vue
+++ b/src/client/pages/not-found.vue
@@ -5,7 +5,7 @@
 
 	<section class="_card">
 		<div class="_content">
-			<img src="https://xn--931a.moe/assets/not-found.png" alt="" class="_ghost"/>
+			<img src="https://xn--931a.moe/assets/not-found.png" class="_ghost"/>
 			<div>{{ $t('notFoundDescription') }}</div>
 		</div>
 	</section>