diff --git a/app/Entities/Models/Page.php b/app/Entities/Models/Page.php
index 52c64f048..076850e63 100644
--- a/app/Entities/Models/Page.php
+++ b/app/Entities/Models/Page.php
@@ -126,4 +126,18 @@ class Page extends BookChild
         $refreshed->html = (new PageContent($refreshed))->render();
         return $refreshed;
     }
+
+    public function getCoverImage(): string
+    {
+        $dom = new \DomDocument();
+        $dom->loadHTML($this->html);
+        $images = $dom->getElementsByTagName('img');
+
+        try {
+            $cover = $images->length > 0 ? $images[0]->getAttribute('src') : $this->book->getBookCover();
+        } catch (Exception $err) {
+            $cover = $this->book->getBookCover();
+        }
+        return $cover;
+    }
 }
diff --git a/resources/views/base.blade.php b/resources/views/base.blade.php
index a5404a365..e85029573 100644
--- a/resources/views/base.blade.php
+++ b/resources/views/base.blade.php
@@ -11,6 +11,13 @@
     <meta name="base-url" content="{{ url('/') }}">
     <meta charset="utf-8">
 
+    <!-- Social Cards Meta -->
+
+    <meta property="og:title" content="{{ isset($pageTitle) ? $pageTitle . ' | ' : '' }}{{ setting('app-name') }}">
+    <meta property="og:url" content="{{ url()->current() }}">
+    @stack('social-meta')
+    
+
     <!-- Styles and Fonts -->
     <link rel="stylesheet" href="{{ versioned_asset('dist/styles.css') }}">
     <link rel="stylesheet" media="print" href="{{ versioned_asset('dist/print-styles.css') }}">
diff --git a/resources/views/books/show.blade.php b/resources/views/books/show.blade.php
index def198bdd..72fa9f777 100644
--- a/resources/views/books/show.blade.php
+++ b/resources/views/books/show.blade.php
@@ -6,6 +6,11 @@
     option:entity-search:entity-type="book"
 @stop
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($book->description, 50, '...') }}">
+    <meta property="og:image" content="{{ $book->getBookCover() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-s">
diff --git a/resources/views/chapters/show.blade.php b/resources/views/chapters/show.blade.php
index db02ebcc4..47fd42fe2 100644
--- a/resources/views/chapters/show.blade.php
+++ b/resources/views/chapters/show.blade.php
@@ -6,6 +6,11 @@
     option:entity-search:entity-type="chapter"
 @stop
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($chapter->description, 50, '...') }}">
+    <meta property="og:image" content="{{ $chapter->book->getBookCover() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-m print-hidden">
diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php
index 48c88434e..ca639f54b 100644
--- a/resources/views/pages/show.blade.php
+++ b/resources/views/pages/show.blade.php
@@ -1,5 +1,10 @@
 @extends('tri-layout')
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($page->html, 50, '...') }}">
+    <meta property="og:image" content="{{ $page->getCoverImage() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-m print-hidden">
diff --git a/resources/views/shelves/show.blade.php b/resources/views/shelves/show.blade.php
index 6fee6f45d..9615466d8 100644
--- a/resources/views/shelves/show.blade.php
+++ b/resources/views/shelves/show.blade.php
@@ -1,5 +1,10 @@
 @extends('tri-layout')
 
+@push('social-meta')
+    <meta property="og:description" content="{{ Str::words($shelf->description, 50, '...') }}">
+    <meta property="og:image" content="{{ $shelf->getBookCover() }}">
+@endpush
+
 @section('body')
 
     <div class="mb-s">