diff --git a/src/components/link-preview/link-preview.js b/src/components/link-preview/link-preview.js
index 2f6da55e..444aafbe 100644
--- a/src/components/link-preview/link-preview.js
+++ b/src/components/link-preview/link-preview.js
@@ -5,6 +5,11 @@ const LinkPreview = {
     'size',
     'nsfw'
   ],
+  data () {
+    return {
+      imageLoaded: false
+    }
+  },
   computed: {
     useImage () {
       // Currently BE shoudn't give cards if tagged NSFW, this is a bit paranoid
@@ -15,6 +20,15 @@ const LinkPreview = {
     useDescription () {
       return this.card.description && /\S/.test(this.card.description)
     }
+  },
+  created () {
+    if (this.useImage) {
+      const newImg = new Image()
+      newImg.onload = () => {
+        this.imageLoaded = true
+      }
+      newImg.src = this.card.image
+    }
   }
 }
 
diff --git a/src/components/link-preview/link-preview.vue b/src/components/link-preview/link-preview.vue
index 493774c2..69171977 100644
--- a/src/components/link-preview/link-preview.vue
+++ b/src/components/link-preview/link-preview.vue
@@ -7,7 +7,7 @@
       rel="noopener"
     >
       <div
-        v-if="useImage"
+        v-if="useImage && imageLoaded"
         class="card-image"
         :class="{ 'small-image': size === 'small' }"
       >