Skip to content

Commit 99a5dad

Browse files
committed
Modify the meta and schema
1 parent 37982c8 commit 99a5dad

File tree

7 files changed

+69
-141
lines changed

7 files changed

+69
-141
lines changed

.idea/git_toolbox_blame.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/material_theme_project_new.xml

+10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/php.xml

+20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Laravel SEO Manager
22

3-
**Laravel SEO Manager** is a powerful tool for improving the SEO of your Laravel website. It helps manage meta tags, schema markups, and integrates popular SEO features such as Facebook OpenGraph, Twitter Card, and more.
3+
**Laravel SEO Manager** is a powerful and easy-to-use SEO optimization tool for Laravel applications. It helps enhance your website's search engine rankings by automatically adding essential meta tags and structured data to your web pages. With built-in support for Facebook OpenGraph, Twitter Cards, Schema Markup (JSON-LD), and Dublin Core metadata, this package ensures your content is properly indexed and displayed across search engines and social media platforms.
4+
5+
By integrating **Laravel SEO Manager**, you can boost organic traffic, improve click-through rates (CTR), and enhance your website’s visibility in Google Search, Bing, and other search engines. Whether you're managing a blog, eCommerce store, or business website, this package provides a comprehensive SEO solution with customizable settings to match your specific needs.
46

57
## SEO Features
68

resources/views/meta.blade.php

+17-133
Original file line numberDiff line numberDiff line change
@@ -1,170 +1,54 @@
1+
<!-- Standard SEO -->
12
@isset($title)
2-
<title>{{ $title }}</title>
3+
<title>{{ $title }}</title>
34
@endisset
4-
5-
<meta name="robots" content="index, follow">
65
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
7-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
8-
<link rel="sitemap" type="application/xml" title="Sitemap" href="{{ url('sitemap.xml') }}">
9-
106
<meta name="referrer" content="{{ !empty($referrer)? $referrer : config('laravel-seo-manager.referrer') }}">
117
<meta name="robots" content="{{ !empty($robots)? $robots : config('laravel-seo-manager.robots') }}">
128
<meta name="description" content="{{ !empty($description)? $description : config('laravel-seo-manager.description') }}">
139
<meta name="keywords" content="{{ !empty($keywords)? $keywords : config('laravel-seo-manager.keywords') }}">
14-
1510
@if(config('laravel-seo-manager.geo_region') !=='')
1611
<meta name="geo.region" content="{{ config('laravel-seo-manager.geo_region') }}">
1712
@endif
18-
1913
@if(config('laravel-seo-manager.geo_position') !=='')
2014
<meta name="geo.position" content="{{ config('laravel-seo-manager.geo_position') }}">
2115
<meta name="ICBM" content="{{ config('laravel-seo-manager.geo_position') }}">
2216
@endif
23-
2417
<meta name="geo.placename" content="{{ config('app.name') }}">
25-
<meta name="author" content="{{ !empty($author)? $author : env('APP_NAME') }}">
26-
<meta name="Language" content="{{ str_replace('_', '-', app()->getLocale()) }}">
27-
<link rel="canonical" href="{{ !empty($canonical)? $canonical : url('/') }}">
28-
29-
@if(!empty($manifest) || config('laravel-seo-manager.manifest') !=='')
30-
<link rel="manifest" href="{{ !empty($manifest)? $manifest : config('laravel-seo-manager.manifest') }}">
31-
@endif
32-
@if(!empty($theme_color) || config('laravel-seo-manager.theme_color') !=='')
33-
<meta name="theme-color" content="{{ !empty($theme_color)? $theme_color : config('laravel-seo-manager.theme_color') }}">
34-
@endif
35-
36-
@if(!empty($mobile_web_app_capable) || config('laravel-seo-manager.mobile_web_app_capable') !=='')
37-
<meta name="mobile-web-app-capable" content="{{ !empty($mobile_web_app_capable)? $mobile_web_app_capable : config('laravel-seo-manager.mobile_web_app_capable') }}">
38-
<meta name="apple-mobile-web-app-status-bar-style" content="black">
39-
@endif
40-
41-
<link rel="shortcut icon" href="{{ getSystemImage(path: $SYSTEM_CONFIG['System_Favicon_Logo'] ?? '', type:'logo-sm') }}">
42-
43-
<link rel="apple-touch-icon" href="{{ getSystemImage(path: $SYSTEM_CONFIG['System_Favicon_Logo_96'] ?? '', type:'logo-sm') }}">
44-
<link rel="apple-touch-icon" sizes="152x152" href="{{ getSystemImage(path: $SYSTEM_CONFIG['System_Favicon_Logo_144'] ?? '', type:'logo-sm') }}">
45-
<link rel="apple-touch-icon" sizes="167x167" href="{{ getSystemImage(path: $SYSTEM_CONFIG['System_Favicon_Logo_168'] ?? '', type:'logo-sm') }}">
46-
<link rel="apple-touch-icon" sizes="180x180" href="{{ getSystemImage(path: $SYSTEM_CONFIG['System_Favicon_Logo_192'] ?? '', type:'logo-sm') }}">
47-
48-
@if(!empty($meta['title']))
49-
<title>{{ $meta['title'] }} {{ config('System_Page_Separator_And_Tagline', env('APP_NAME')) }}</title>
50-
<meta name="twitter:title" content="{{ $meta['title'] }} | {{ config('app.name', 'Infinity') }}">
51-
<meta name="dcterms.Title" content="{{ $meta['title'] }} | {{ config('app.name', 'Infinity') }}">
52-
<meta property="og:title" content="{{ $meta['title'] }} | {{ config('app.name', 'Infinity') }}">
53-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
54-
<meta itemprop="name" content="{{ $meta['title'] }} {{ config('System_Page_Separator_And_Tagline', env('APP_NAME')) }}">
55-
@endif
56-
57-
@if(!empty($meta['description']))
58-
<meta name="description" content="{{ substr(strip_tags(str_replace('&nbsp;', ' ', $meta['description'])), 0, 155) }}">
59-
<meta name="twitter:description" content="{{ substr(strip_tags(str_replace('&nbsp;', ' ', $meta['description'])), 0, 155) }}">
60-
<meta name="dcterms.Description" content="{{ substr(strip_tags(str_replace('&nbsp;', ' ', $meta['description'])), 0, 155) }}">
61-
<meta property="og:description" content="{{ substr(strip_tags(str_replace('&nbsp;', ' ', $meta['description'])), 0, 155) }}">
62-
<meta name="twitter:description" content="{{ substr(strip_tags(str_replace('&nbsp;', ' ', $meta['description'])), 0, 155) }}">
63-
<meta itemprop="description" content="{{ substr(strip_tags(str_replace('&nbsp;', ' ', $meta['description'])), 0, 155) }}">
64-
@endif
65-
66-
@if(!empty($meta['keywords']))
67-
<meta name="keywords" content="{{ $meta['keywords'] }}">
68-
<meta name="dcterms.Subject" content="{{ $meta['keywords'] }}">
69-
@endif
70-
71-
@if(!empty($meta['image']))
72-
<meta property="og:image" content="{{ $meta['image'] }}">
73-
<meta name="twitter:image" content="{{ $meta['image'] }}">
74-
<meta itemprop="image" content="{{ $meta['image'] }}">
75-
@endif
76-
77-
@if(isset($meta['hreflang']) && !empty($meta['hreflang']))
78-
<link rel="alternate" hreflang="{{ 'en' }}" href="{{ url()->current().'?locale=en' }}" />
79-
@foreach ($meta['hreflang'] as $locale)
80-
@if(in_array($locale, getActiveLanguageList()?->pluck('language_code')?->toArray()))
81-
<link rel="alternate" hreflang="{{ $locale }}" href="{{ url()->current().'?locale='.$locale }}" />
82-
@endif
83-
@endforeach
84-
@endif
85-
86-
<meta name="dcterms.Relation" content="{{ env('APP_NAME') }}">
87-
<meta name="dcterms.Publisher" content="{{ env('APP_NAME') }}">
88-
<meta name="dcterms.Contributor" content="{{ env('APP_NAME') }}">
8918

9019
<!-- Dublin Core basic info -->
91-
<meta name="dcterms.Type" content="text/html">
9220
<meta name="dcterms.Format" content="text/html">
93-
<meta name="dcterms.Language" content="{{ str_replace('_', '-', app()->getLocale()) }}">
21+
<meta name="dcterms.Language" content="{{ config('app.locale') }}">
9422
<meta name="dcterms.Identifier" content="{{ url()->current() }}">
95-
<meta name="dcterms.Coverage" content="{{ url()->current() }}">
9623
<meta name="dcterms.Relation" content="{{ config('app.name') }}">
9724
<meta name="dcterms.Publisher" content="{{ config('app.name') }}">
25+
<meta name="dcterms.Type" content="text/html">
26+
<meta name="dcterms.Coverage" content="{{ url()->current() }}">
9827
<meta name="dcterms.Title" content="{{ !empty($title)? $title : config('laravel-seo-manager.title') }}">
9928
<meta name="dcterms.Subject" content="{{ !empty($keywords)? $keywords : config('laravel-seo-manager.keywords') }}">
10029
<meta name="dcterms.Contributor" content="{{ !empty($author)? $author : config('laravel-seo-manager.author') }}">
10130
<meta name="dcterms.Description" content="{{ !empty($description)? $description : config('laravel-seo-manager.description') }}">
10231

32+
<!-- Facebook OpenGraph -->
33+
<meta property="og:locale" content="{{ config('app.locale') }}">
10334
<meta property="og:type" content="{{ !empty($type)? $type : config('laravel-seo-manager.type') }}">
10435
<meta property="og:url" content="{{ url()->current() }}">
10536
<meta property="og:title" content="{{ !empty($title)? $title : config('laravel-seo-manager.title') }}">
10637
<meta property="og:description" content="{{ !empty($description)? $description : config('laravel-seo-manager.description') }}">
10738
<meta property="og:image" content="{{ !empty($image)? $image : config('laravel-seo-manager.image') }}">
39+
<meta property="og:site_name" content="{{ config('app.name') }}">
10840

109-
<!-- Twitter Card -->
110-
@if(!empty($twitter_card) || config('laravel-seo-manager.twitter_card') !== '')
111-
<meta name="twitter:card" content="{{ !empty($twitter_card) ? $twitter_card : config('laravel-seo-manager.twitter_card') }}">
112-
@endif
113-
@if(!empty($twitter_site) || config('laravel-seo-manager.twitter_site') !=='')
114-
<meta name="twitter:site" content="{{ !empty($twitter_site)? $twitter_site : config('laravel-seo-manager.twitter_site') }}">
115-
@endif
116-
117-
<meta name="twitter:title" content="{{ !empty($title)? $title : config('laravel-seo-manager.title') }}">
118-
<meta name="twitter:description" content="{{ !empty($description)? $description : config('laravel-seo-manager.description') }}">
119-
<meta name="twitter:image" content="{{ !empty($image)? $image : config('laravel-seo-manager.image') }}">
120-
121-
122-
@if(!empty($fb_app_id) || config('laravel-seo-manager.fb_app_id') !=='')
123-
<meta property="fb:app_id" content="{{ !empty($fb_app_id)? $fb_app_id : config('laravel-seo-manager.fb_app_id') }}"/>
41+
@if(config('laravel-seo-manager.fb_app_id') !=='')
42+
<meta property="fb:app_id" content="{{ config('laravel-seo-manager.fb_app_id') }}"/>
12443
@endif
12544

126-
@if(!empty($twitter_card))<meta name="twitter:card" content="{{ $twitter_card }}">@endif
127-
@if(!empty($twitter_site))<meta name="twitter:site" content="{{ $twitter_site }}">@endif
128-
<meta name="geo.region" content="{{ env('APP_TIMEZONE') }}">
129-
130-
<!-- Open Graph and Social Media Meta Tags -->
131-
<meta property="og:title" content="{{ $meta['title'] ?? env('APP_NAME') }}">
132-
<meta property="og:image" content="{{ $meta['image'] ?? asset('default-image.png') }}">
133-
<meta property="og:url" content="{{ url()->current() }}">
134-
<meta name="site_name" content="{{ getSystemConfig(name: 'company_name') ?? env('APP_NAME') }}">
135-
136-
<meta property="og:site_name" content="{{ config('app.name') ?? env('APP_NAME') }}">
137-
138-
<meta property="og:locale" content="{{ str_replace('_', '-', app()->getLocale()) }}">
139-
<meta property="og:type" content="{{ !empty($type) ? $type : 'website' }}">
140-
<meta property="og:image:width" content="1200">
141-
<meta property="og:image:height" content="630">
142-
<meta property="og:image:alt" content="{{ $meta['title'] ?? 'Default Image' }}">
143-
14445
<!-- Twitter Card -->
145-
<meta name="twitter:card" content="{{ $twitter_card ?? 'summary_large_image' }}">
146-
<meta name="twitter:site" content="{{ $twitter_site ?? '@YourTwitterHandle' }}">
147-
<meta name="twitter:image" content="{{ $meta['image'] ?? asset('default-image.png') }}">
148-
<meta name="twitter:image:alt" content="{{ $meta['title'] ?? 'Default Image' }}">
149-
150-
151-
<!-- Additional Open Graph Tags -->
152-
<meta property="og:image:type" content="image/jpeg">
153-
<meta property="og:image:secure_url" content="{{ $meta['image'] ?? asset('default-image.png') }}">
154-
<meta property="og:updated_time" content="{{ now()->toIso8601String() }}">
155-
<meta property="og:determiner" content="the">
156-
157-
<!-- Optional Twitter Card Tags for Video (if applicable) -->
158-
@if(!empty($meta['video']))
159-
<meta name="twitter:player" content="{{ $meta['video'] }}">
160-
<meta name="twitter:player:width" content="1280">
161-
<meta name="twitter:player:height" content="720">
46+
@if(config('laravel-seo-manager.twitter_card') !=='')
47+
<meta name="twitter:card" content="{{ !empty($twitter_card)? $twitter_card : config('laravel-seo-manager.twitter_card') }}">
16248
@endif
163-
164-
<!-- Optional OG Tags for Video -->
165-
@if(!empty($meta['video']))
166-
<meta property="og:video" content="{{ $meta['video'] }}">
167-
<meta property="og:video:width" content="1280">
168-
<meta property="og:video:height" content="720">
169-
<meta property="og:video:type" content="video/mp4">
49+
@if(config('laravel-seo-manager.twitter_site') !=='' || !empty($twitter_site))
50+
<meta name="twitter:site" content="{{ !empty($twitter_site)? $twitter_site : config('laravel-seo-manager.twitter_site') }}">
17051
@endif
52+
<meta name="twitter:title" content="{{ !empty($title)? $title : config('laravel-seo-manager.title') }}">
53+
<meta name="twitter:description" content="{{ !empty($description)? $description : config('laravel-seo-manager.description') }}">
54+
<meta name="twitter:image" content="{{ !empty($image)? $image : config('laravel-seo-manager.image') }}">

resources/views/schema.blade.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77
"description": "{{ !empty($description) ? $description : config('laravel-seo-manager.description') }}",
88
"image": "{{ !empty($image) ? $image : config('laravel-seo-manager.image') }}",
99
"keywords": "{{ !empty($keywords) ? $keywords : config('laravel-seo-manager.keywords') }}",
10-
@if(config('laravel-seo-manager.author'))
10+
@if(!empty(config('laravel-seo-manager.author')))
1111
"author": {
1212
"@type": "Person",
1313
"name": "{{ config('laravel-seo-manager.author') }}"
1414
},
1515
@endif
16-
@if(config('laravel-seo-manager.fb_app_id'))
16+
@if(!empty(config('laravel-seo-manager.fb_app_id')))
1717
"sameAs": [
1818
"https://www.facebook.com/{{ config('laravel-seo-manager.fb_app_id') }}"
1919
],
@@ -23,29 +23,29 @@
2323
"name": "{{ config('app.name') }}",
2424
"logo": {
2525
"@type": "ImageObject",
26-
"url": "{{ config('laravel-seo-manager.image') }}"
26+
"url": "{{ !empty($image) ? $image : config('laravel-seo-manager.image') }}"
2727
}
2828
},
2929
"mainEntityOfPage": {
3030
"@type": "WebPage",
3131
"@id": "{{ url()->current() }}"
3232
},
33-
@if(isset($breadcrumbs) && is_array($breadcrumbs))
33+
@if(!empty($breadcrumbs) && is_array($breadcrumbs))
3434
"breadcrumb": {
3535
"@type": "BreadcrumbList",
3636
"itemListElement": [
37-
@foreach($breadcrumbs as $index => $breadcrumb)
37+
@foreach($breadcrumbs as $index => $breadcrumb)
3838
{
3939
"@type": "ListItem",
4040
"position": {{ $index + 1 }},
4141
"name": "{{ $breadcrumb['name'] }}",
4242
"item": "{{ $breadcrumb['url'] }}"
4343
}@if(!$loop->last),@endif
44-
@endforeach
44+
@endforeach
4545
]
4646
},
4747
@endif
48-
@if(config('laravel-seo-manager.type') == 'Article')
48+
@if(!empty($article_body) || !empty($date_published) || !empty($date_modified))
4949
"articleBody": "{{ !empty($article_body) ? $article_body : '' }}",
5050
"datePublished": "{{ !empty($date_published) ? $date_published : now()->toIso8601String() }}",
5151
"dateModified": "{{ !empty($date_modified) ? $date_modified : now()->toIso8601String() }}"

0 commit comments

Comments
 (0)