Fix social preview & SEO optimization

This commit is contained in:
2026-06-14 14:07:10 +02:00
parent f8022b3f18
commit b32465a7d0
6 changed files with 133 additions and 68 deletions
+8 -16
View File
@@ -1,20 +1,17 @@
<head>
<!-- Meta -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
@if (Route::currentRouteName() == 'hentai.index')
@if (isset($episode))
<title>Watch {{ $episode->title }} - {{ $episode->episode }} in 4k, 1080p, UHD, HD for Free - hstream.moe</title>
@elseif (isset($hentai))
<title>Watch {{ $hentai->episodes[0]->title }} in 4k, 1080p, UHD, HD for Free - hstream.moe</title>
@else
<title>Watch Highest Quality Hentai in 4k, 1080p, UHD, HD for Free - hstream.moe</title>
@endif
@if (isset($socialSlot))
{{ $socialSlot }}
@else
<title>Watch Highest Quality Hentai in 4k, 1080p, UHD, HD for Free - hstream.moe</title>
<meta name="description" content="The best free 4k hentai site you will ever need online! Free 1080p hentai downloads and 4k hentai streams!">
@include('partials.social-home-preview')
@endif
<!-- Sitemap -->
<link rel="sitemap" type="application/xml" href="/sitemap.xml">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net">
<link rel="preload" href="https://fonts.bunny.net/figtree/files/figtree-latin-400-normal.woff2" as="font" type="font/woff2" crossorigin>
@@ -37,11 +34,6 @@
<meta name="msapplication-navbutton-color" content="#be123c">
<meta name="apple-mobile-web-app-status-bar-style" content="#be123c">
<!-- OG -->
@if (isset($episode) || isset($hentai))
@include('partials.social-preview')
@endif
<script>
document.documentElement.classList.add('dark');
</script>
@@ -0,0 +1,84 @@
@php
$title = '';
if (! isset($episode) && isset($hentai)) {
$episode = $hentai->episodes[0];
$gallery = $episode->gallery;
$title = "{$episode->title} - Watch All Episodes English Subbed in 4K | hstream.moe";
$canonical = url('/hentai/'.$hentai->slug);
} else {
$title = "{$episode->title} Episode {$episode->episode} - English Subbed 4K Stream | hstream.moe";
$canonical = url('/hentai/'.$episode->slug);
}
$description = Str::limit(
preg_replace('/\s+/', ' ', strip_tags($episode->description)),
160
);
@endphp
<!-- Site meta -->
<title>{{ $title }}</title>
<link rel="canonical" href="{{ $canonical }}">
<meta name="robots" content="index,follow,max-image-preview:large">
<meta name="description" content="{{ $description }}">
<!-- Open Graph -->
<meta property="og:title" content="{{ $title }}">
<meta property="og:description" content="{{ $description }}">
<meta property="og:type" content="video.other">
<meta property="og:url" content="{{ $canonical }}">
<meta property="og:locale" content="en_US">
<meta property="og:site_name" content="hstream.moe">
@if(isset($gallery) && $episode->gallery->isNotEmpty())
<meta property="og:image" content="{{ url($gallery[0]->image_url) }}">
<meta property="og:image:secure_url" content="{{ url($gallery[0]->image_url) }}">
<meta property="og:image:alt" content="{{ $episode->title }} Episode {{ $episode->episode }}">
<meta property="og:image:width" content="1280">
<meta property="og:image:height" content="720">
<meta property="og:image:type" content="image/webp">
@endif
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="{{ $title }}">
<meta name="twitter:description" content="{{ $description }}">
@if($episode->gallery->isNotEmpty())
<meta name="twitter:image" content="{{ url($episode->gallery[0]->image_url) }}">
<meta name="twitter:image:alt" content="{{ $episode->title }} Episode {{ $episode->episode }}">
@endif
<!-- JSON-LD -->
@if (!isset($hentai))
@php
$data = [
"@context" => "https://schema.org",
"@type" => "VideoObject",
"name" => "$episode->title Episode $episode->episode",
"description" => $description,
"url" => $canonical,
"uploadDate" => $episode->created_at->toIso8601String()
];
if ( $episode->gallery->isNotEmpty() ) {
$data["thumbnailUrl"] = url($episode->gallery[0]->image_url);
}
$tags = [];
foreach($episode->tags as $tag) {
$tags[] = $tag->name;
}
$data["genre"] = $tags;
$data["interactionStatistic"] = [
"@type" => "InteractionCounter",
"interactionType" => [
"@type" => "WatchAction"
],
"userInteractionCount" => $episode->view_count
];
@endphp
<script type="application/ld+json">
{!! json_encode($data, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE) !!}
</script>
@endif
@@ -0,0 +1,31 @@
<!-- Site meta -->
<title>Watch English Subbed Hentai Online in HD & 4K | hstream.moe</title>
<meta name="description" content="Stream English subbed hentai online in HD, Full HD and 4K quality. Browse series, episodes and playlists with regular updates.">
<link rel="canonical" href="{{ url()->current() }}">
<!-- Indexing -->
@php
$noIndex = [
'hentai.search',
'playlist.index'
]
@endphp
@if (in_array(Route::currentRouteName(), $noIndex))
<meta name="robots" content="noindex,follow">
@else
<meta name="robots" content="index,follow">
@endif
<!-- Open Graph -->
<meta property="og:title" content="Watch English Subbed Hentai Online in HD & 4K | hstream.moe">
<meta property="og:description" content="Stream English subbed hentai online in HD, Full HD and 4K quality. Browse series, episodes and playlists with regular updates.">
<meta property="og:type" content="website">
<meta property="og:url" content="https://hstream.moe/">
<meta property="og:image" content="https://hstream.moe/images/cropped-HS-1-192x192.webp">
<meta property="og:image:alt" content="hstream.moe">
<meta property="og:image:width" content="192">
<meta property="og:image:height" content="192">
<meta property="og:locale" content="en_US">
<meta property="og:site_name" content="hstream.moe">
<meta name="twitter:card" content="summary_large_image">
@@ -1,52 +0,0 @@
@if (Route::currentRouteName() == 'hentai.index')
@php
$title = '';
if (! isset($episode) && isset($hentai)) {
$episode = $hentai->episodes[0];
$gallery = $episode->gallery;
$title = 'Watch all episodes from '.$episode->title.' in 4k, 2160p, 1080p, UHD, HD - hstream.moe';
} else {
$title = 'Watch '.$episode->title.' - '.$episode->episode.' in 4k, 2160p, 1080p, UHD, HD - hstream.moe';
}
@endphp
<meta property="og:title" content="{{ $title }}" />
<meta property="og:description" content="{{ Str::limit($episode->description, 250) }}" />
<meta property="og:type" content="video.episode" />
<meta property="og:url" content="https://hstream.moe/hentai/{{ $episode->slug }}" />
@if(isset($gallery) && $episode->gallery->isNotEmpty())
<meta property="og:image" content="https://hstream.moe{{ $gallery[0]->image_url }}" />
@endif
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="hstream.moe" />
<meta name="twitter:card" content="summary_large_image" />
@php
$tags = '';
foreach ($episode->tags as $tag) {
if (!$tags){
$tags .= $tag->name;
} else {
$tags .= ', '.$tag->name;
}
}
@endphp
<meta name="description" content="{{ $episode->description }} {{ $tags }}">
<meta name="keywords" content="hstream,hentaistream,hentai,stream,4k,hentai 4k,4k hentai,download,free">
@elseif (Route::currentRouteName() == 'home.index')
<meta property="og:title" content="Watch Hentai in 4k, 1080p, 720p, UHD, HD for Free! - hstream.moe" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://hstream.moe/" />
<meta property="og:image" content="https://hstream.moe/images/cropped-HS-1-192x192.webp" />
<meta property="og:image:width" content="300" />
<meta property="og:image:height" content="100" />
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="hstream.moe" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="description" content="Watch Hentai free download in 4k, 2160p, 1080p, UHD, HD! Daily upload, no ads, subbed in 2160p!">
@else
<meta name="description" content="Watch Hentai free download in 4k, 2160p, 1080p, UHD, HD! Daily upload, no ads, subbed in 2160p!">
@endif
+5
View File
@@ -1,4 +1,9 @@
<x-app-layout>
<x-slot name="socialSlot">
@include('partials.social-hentai-preview', ['hentai' => $hentai])
</x-slot>
@php $episode = $hentai->episodes[0]; @endphp
<div class="pt-6">
<div class="flex flex-col lg:flex-row justify-center">
+5
View File
@@ -1,4 +1,9 @@
<x-app-layout>
<x-slot name="socialSlot">
@include('partials.social-hentai-preview', ['episode' => $episode])
</x-slot>
<div class="pt-10">
<div class="flex flex-col xl:flex-row justify-center">
@if($episode->is_dvd_aspect)