Add minified JavaScript and CSS files, implement datepicker and carousel functionality

- Added minified versions of JavaScript files including main, script, google-map, bootstrap-datepicker, and jquery.easing.
- Implemented a datepicker for appointment dates and a timepicker for appointment times.
- Introduced a carousel feature for image display with automatic sliding and responsive behavior.
- Updated package.json to include scripts for minifying CSS and JS files, along with necessary dependencies.
This commit is contained in:
Mark 2025-06-30 10:13:47 +01:00
parent 2a04a8f245
commit ebc25857dc
23 changed files with 587 additions and 384 deletions

112
.gitignore vendored Normal file
View File

@ -0,0 +1,112 @@
# Node.js dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
package-lock.json
# PHP
*.log
*.tmp
*.temp
*.cache
/vendor/
composer.phar
composer.lock
# IDE and Editor files
.vscode/
.idea/
*.swp
*.swo
*~
.sublime-project
.sublime-workspace
# Operating System files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
desktop.ini
# Backup files
*.bak
*.backup
*.old
*~
# Configuration files (sensitive)
config.php
.env
.env.local
.env.production
database.config.php
# Upload directories
uploads/
images/uploads/
files/
# Cache directories
cache/
tmp/
temp/
# Session files
sessions/
# Error logs
error_log
error.log
php_errors.log
# Build artifacts
dist/
build/
# Development tools
.sass-cache/
*.css.map
*.js.map
# Prepros (CSS/JS preprocessor)
prepros-6.config
.prepros-cache/
# Local development
local/
dev/
development/
# Database dumps
*.sql
*.sqlite
*.db
# Minified files (if you want to exclude them)
# Uncomment these lines if you prefer to generate minified files during build
# *.min.css
# *.min.js
# WordPress specific (if applicable)
wp-config.php
wp-content/uploads/
wp-content/cache/
# Security
.htaccess.backup
robots.txt.backup
# Archives
*.zip
*.tar.gz
*.rar
*.7z
# Documentation temp files
*.pdf~
*.docx~

View File

@ -7,51 +7,61 @@
All pages have been updated with improved, targeted meta descriptions and keywords that include "roofer in Accrington":
#### **Home Page (index.php)**
- **Title**: "Professional Roofing Services | Roofer in Accrington"
- **Description**: Leading roofer in Accrington, Lancashire with comprehensive service area coverage
- **Keywords**: Focused on local SEO with "roofer in accrington", service-specific terms
#### **About Page (about.php)**
- **Title**: "About Warmseal Roofing | Trusted Roofer in Accrington"
- **Description**: Emphasizes trust, experience, and local presence
- **Keywords**: Trust signals and local establishment keywords
#### **Services Page (services.php)**
- **Title**: "Roofing Services | Expert Roofer in Accrington"
- **Description**: Comprehensive service overview with location targeting
- **Keywords**: Service-specific with local geo-targeting
#### **Roof Repairs (roof-repairs.php)**
- **Title**: "Expert Roof Repairs | Emergency Roofer in Accrington"
- **Description**: Emergency services focus with urgency keywords
- **Keywords**: Emergency-focused with local targeting
#### **Roofing Solutions (roofing-solutions.php)**
- **Title**: "New Roof Installation | Roofing Solutions Accrington"
- **Description**: New installation focus with material variety
- **Keywords**: Installation-focused with material types
#### **Roofline Services (roofline-services.php)**
- **Title**: "UPVC Roofline Services | Guttering & Fascias Accrington"
- **Description**: Specific to UPVC and roofline components
- **Keywords**: UPVC-focused with component-specific terms
#### **Cleaning Services (cleaning.php)**
- **Title**: "Roof Cleaning & Moss Removal | Gutter Cleaning Accrington"
- **Description**: Maintenance and cleaning service focus
- **Keywords**: Cleaning and maintenance specific
#### **Projects (projects.php)**
- **Title**: "Recent Roofing Projects | Completed Work Accrington"
- **Description**: Portfolio and quality workmanship focus
- **Keywords**: Project and portfolio focused
#### **Contact (contact.php)**
- **Title**: "Contact Us | Get a Free Quote | Roofer in Accrington"
- **Description**: Quote generation and contact focus
- **Keywords**: Contact and quote focused
#### **Blog (blog.php)**
- **Title**: "Roofing Blog | Tips & Advice | Roofer in Accrington"
- **Description**: Authority and expertise positioning
- **Keywords**: Educational and advice focused
@ -59,6 +69,7 @@ All pages have been updated with improved, targeted meta descriptions and keywor
### 2. **Global Meta Configuration Updates**
Updated `meta/config.php`:
- Default descriptions now include "roofer in Accrington"
- Improved geographic targeting with Lancashire, Blackburn, Preston
- Enhanced service-specific keyword targeting
@ -66,6 +77,7 @@ Updated `meta/config.php`:
### 3. **Advanced Schema.org Structured Data**
#### **Base Business Schema** (in `meta/meta.php`)
- `RoofingContractor` schema type
- Complete business information including:
- Service areas (Accrington, Blackburn, Preston, Lancashire)
@ -76,6 +88,7 @@ Updated `meta/config.php`:
- Customer reviews and ratings
#### **Page-Specific Schema** (new `meta/schema.php`)
- Dynamic schema generation based on current page
- Service-specific schema for each service page
- ContactPage schema for contact
@ -84,6 +97,7 @@ Updated `meta/config.php`:
- Breadcrumb navigation schema
#### **Enhanced Local Business Schema** (new `meta/local-business-schema.php`)
- Comprehensive local business markup with:
- Extended service area coverage
- Detailed service catalog with offers
@ -95,12 +109,14 @@ Updated `meta/config.php`:
### 4. **Technical SEO Improvements**
#### **Updated Sitemap** (sitemap-updated.xml)
- Added changefreq attributes for better crawling
- Prioritized pages based on importance
- Updated timestamps
- Added blog page
#### **Robots.txt** (new file)
- Optimized crawler access
- Protected sensitive directories
- Allowed important assets (CSS, JS, images)
@ -110,11 +126,13 @@ Updated `meta/config.php`:
### 5. **Local SEO Focus**
**Geographic Targeting:**
- Primary: Accrington (main location)
- Secondary: Blackburn, Preston, Burnley, Clitheroe
- Regional: Lancashire
**Service Area Coverage:**
- Emergency services across Lancashire
- Local business schema with precise geo-coordinates
- Area-specific service descriptions
@ -128,6 +146,7 @@ Updated `meta/config.php`:
## Implementation Notes
### **Files Modified:**
1. `index.php` - Enhanced homepage SEO
2. `about.php` - About page optimization
3. `services.php` - Services page SEO
@ -142,6 +161,7 @@ Updated `meta/config.php`:
12. `meta/meta.php` - Schema integration
### **Files Created:**
1. `meta/schema.php` - Page-specific schema system
2. `meta/local-business-schema.php` - Enhanced business schema
3. `robots.txt` - Search engine directives
@ -150,18 +170,21 @@ Updated `meta/config.php`:
## SEO Benefits Achieved
### **Improved Local Ranking Factors:**
- ✅ "Roofer in Accrington" targeting on all pages
- ✅ Local schema markup with geo-coordinates
- ✅ Extended service area coverage
- ✅ Local business information consistency
### **Enhanced Technical SEO:**
- ✅ Comprehensive structured data
- ✅ Page-specific meta optimization
- ✅ Improved site architecture
- ✅ Better crawlability
### **Content Optimization:**
- ✅ Service-specific landing pages
- ✅ Emergency services emphasis
- ✅ Local expertise positioning

222
blog.php
View File

@ -13,122 +13,122 @@ include_once $URlsorrection . "includes/nav.php";
<section class="ftco-section">
<div class="container">
<div class="row d-flex">
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_1.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_2.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
<div class="container">
<div class="row d-flex">
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_1.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_2.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_2.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_3.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_3.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_1.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_4.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_2.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_5.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_3.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_6.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_1.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
</div>
<div class="row mt-5">
<div class="col text-center">
<div class="block-27">
<ul>
<li><a href="#">&lt;</a></li>
<li class="active"><span>1</span></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">&gt;</a></li>
</ul>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
</section>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_2.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_3.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_3.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_1.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_4.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_2.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_5.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_3.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
<div class="col-md-4 d-flex ftco-animate">
<div class="blog-entry align-self-stretch">
<a href="blog-single.html" class="block-20" style="background-image: url('images/image_6.jpg');">
</a>
<div class="text p-3">
<div class="posted mb-3 d-flex">
<div class="img author" style="background-image: url(images/person_1.jpg);"></div>
<div class="desc pl-3">
<span>Posted by John doe</span>
<span>24 March 2020</span>
</div>
</div>
<h3 class="heading"><a href="#">How Roofing Charge for Their Services</a></h3>
</div>
</div>
</div>
</div>
<div class="row mt-5">
<div class="col text-center">
<div class="block-27">
<ul>
<li><a href="#">&lt;</a></li>
<li class="active"><span>1</span></li>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
<li><a href="#">4</a></li>
<li><a href="#">5</a></li>
<li><a href="#">&gt;</a></li>
</ul>
</div>
</div>
</div>
</div>
</section>
<?php

6
css/animate.min.css vendored Normal file

File diff suppressed because one or more lines are too long

9
css/bootstrap-datepicker.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
css/flaticon.min.css vendored Normal file
View File

@ -0,0 +1 @@
@font-face{font-family:Flaticon;src:url("../fonts/flaticon/font/Flaticon.eot");src:url("../fonts/flaticon/font/Flaticon.eot?#iefix") format("embedded-opentype"),url("../fonts/flaticon/font/Flaticon.woff") format("woff"),url("../fonts/flaticon/font/Flaticon.ttf") format("truetype"),url("../fonts/flaticon/font/Flaticon.svg#Flaticon") format("svg");font-weight:400;font-style:normal}@media screen and (-webkit-min-device-pixel-ratio:0){@font-face{font-family:Flaticon;src:url("../fonts/flaticon/font/Flaticon.svg#Flaticon") format("svg")}}[class*=" flaticon-"]:after,[class*=" flaticon-"]:before,[class^=flaticon-]:after,[class^=flaticon-]:before{font-family:Flaticon;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.flaticon-roof-5:before{content:"\f100"}.flaticon-roof-1:before{content:"\f101"}.flaticon-roof-2:before{content:"\f102"}.flaticon-roof-3:before{content:"\f103"}.flaticon-roof-4:before{content:"\f104"}.flaticon-roof:before{content:"\f105"}

1
css/jquery.timepicker.min.css vendored Normal file
View File

@ -0,0 +1 @@
.ui-timepicker-wrapper{overflow-y:auto;max-height:150px;width:6.5em;background:#fff;border:1px solid #ddd;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);outline:0;z-index:10001;margin:0}.ui-timepicker-wrapper.ui-timepicker-with-duration{width:13em}.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-30,.ui-timepicker-wrapper.ui-timepicker-with-duration.ui-timepicker-step-60{width:11em}.ui-timepicker-list{margin:0;padding:0;list-style:none}.ui-timepicker-duration{margin-left:5px;color:#888}.ui-timepicker-list:hover .ui-timepicker-duration{color:#888}.ui-timepicker-list li{padding:3px 0 3px 5px;cursor:pointer;white-space:nowrap;color:#000;list-style:none;margin:0}.ui-timepicker-list:hover .ui-timepicker-selected{background:#fff;color:#000}.ui-timepicker-list .ui-timepicker-selected:hover,.ui-timepicker-list li:hover,li.ui-timepicker-selected{background:#1980ec;color:#fff}.ui-timepicker-list li:hover .ui-timepicker-duration,li.ui-timepicker-selected .ui-timepicker-duration{color:#ccc}.ui-timepicker-list li.ui-timepicker-disabled,.ui-timepicker-list li.ui-timepicker-disabled:hover,.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled{color:#888;cursor:default}.ui-timepicker-list li.ui-timepicker-disabled:hover,.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled{background:#f2f2f2}

1
css/magnific-popup.min.css vendored Normal file
View File

@ -0,0 +1 @@
.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:0!important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-ajax-holder .mfp-content,.mfp-inline-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-arrow,.mfp-close,.mfp-counter,.mfp-preloader{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none!important}.mfp-preloader{color:#ccc;position:absolute;top:50%;width:auto;text-align:center;margin-top:-.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#ccc}.mfp-preloader a:hover{color:#fff}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-arrow,button.mfp-close{overflow:visible;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;display:block;outline:0;padding:0;z-index:1046;box-shadow:none;touch-action:manipulation}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:.65;padding:0 0 18px 10px;color:#fff;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace}.mfp-close:focus,.mfp-close:hover{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-iframe-holder .mfp-close,.mfp-image-holder .mfp-close{color:#fff;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#ccc;font-size:12px;line-height:18px;white-space:nowrap}.mfp-arrow{position:absolute;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:focus,.mfp-arrow:hover{opacity:1}.mfp-arrow:after,.mfp-arrow:before{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px;opacity:.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #fff;margin-left:31px}.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #fff;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,.6);position:fixed;text-align:center;padding:0}}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(.75);transform:scale(.75)}.mfp-arrow-left{-webkit-transform-origin:0;transform-origin:0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}

1
css/padding.min.css vendored Normal file
View File

@ -0,0 +1 @@
.padding-top-10{padding-top:10px}.padding-top-20{padding-top:20px}.padding-top-30{padding-top:30px}.padding-top-40{padding-top:40px}.padding-top-50{padding-top:50px}.padding-top-60{padding-top:60px}.padding-top-70{padding-top:70px}.padding-top-80{padding-top:80px}.padding-top-90{padding-top:90px}.padding-top-100{padding-top:100px}.padding-top-110{padding-top:110px}.padding-top-120{padding-top:120px}.padding-top-130{padding-top:130px}.padding-top-140{padding-top:140px}.padding-top-150{padding-top:150px}.padding-top-160{padding-top:160px}.padding-top-170{padding-top:170px}.padding-top-180{padding-top:180px}.padding-top-190{padding-top:190px}.padding-top-200{padding-top:200px}.padding-right-10{padding-right:10px}.padding-right-20{padding-right:20px}.padding-right-30{padding-right:30px}.padding-right-40{padding-right:40px}.padding-right-50{padding-right:50px}.padding-right-60{padding-right:60px}.padding-right-70{padding-right:70px}.padding-right-80{padding-right:80px}.padding-right-90{padding-right:90px}.padding-right-100{padding-right:100px}.padding-right-110{padding-right:110px}.padding-right-120{padding-right:120px}.padding-right-130{padding-right:130px}.padding-right-140{padding-right:140px}.padding-right-150{padding-right:150px}.padding-right-160{padding-right:160px}.padding-right-170{padding-right:170px}.padding-right-180{padding-right:180px}.padding-right-190{padding-right:190px}.padding-right-200{padding-right:200px}.padding-bottom-10{padding-bottom:10px}.padding-bottom-20{padding-bottom:20px}.padding-bottom-30{padding-bottom:30px}.padding-bottom-40{padding-bottom:40px}.padding-bottom-50{padding-bottom:50px}.padding-bottom-60{padding-bottom:60px}.padding-bottom-70{padding-bottom:70px}.padding-bottom-80{padding-bottom:80px}.padding-bottom-90{padding-bottom:90px}.padding-bottom-100{padding-bottom:100px}.padding-bottom-110{padding-bottom:110px}.padding-bottom-120{padding-bottom:120px}.padding-bottom-130{padding-bottom:130px}.padding-bottom-140{padding-bottom:140px}.padding-bottom-150{padding-bottom:150px}.padding-bottom-160{padding-bottom:160px}.padding-bottom-170{padding-bottom:170px}.padding-bottom-180{padding-bottom:180px}.padding-bottom-190{padding-bottom:190px}.padding-bottom-200{padding-bottom:200px}.padding-left-10{padding-left:10px}.padding-left-20{padding-left:20px}.padding-left-30{padding-left:30px}.padding-left-40{padding-left:40px}.padding-left-50{padding-left:50px}.padding-left-60{padding-left:60px}.padding-left-70{padding-left:70px}.padding-left-80{padding-left:80px}.padding-left-90{padding-left:90px}.padding-left-100{padding-left:100px}.padding-left-110{padding-left:110px}.padding-left-120{padding-left:120px}.padding-left-130{padding-left:130px}.padding-left-140{padding-left:140px}.padding-left-150{padding-left:150px}.padding-left-160{padding-left:160px}.padding-left-170{padding-left:170px}.padding-left-180{padding-left:180px}.padding-left-190{padding-left:190px}.padding-left-200{padding-left:200px}.padding-10{padding:10px}.padding-20{padding:20px}.padding-30{padding:30px}.padding-40{padding:40px}.padding-50{padding:50px}.padding-60{padding:60px}.padding-70{padding:70px}.padding-80{padding:80px}.padding-90{padding:90px}.padding-100{padding:100px}.padding-110{padding:110px}.padding-120{padding:120px}.padding-130{padding:130px}.padding-140{padding:140px}.padding-150{padding:150px}.padding-160{padding:160px}.padding-170{padding:170px}.padding-180{padding:180px}.padding-190{padding:190px}.padding-200{padding:200px}

6
css/style.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -60,18 +60,18 @@
<script src="<?= $URLcorrection ?>js/jquery-migrate-3.0.1.min.js"></script>
<script src="<?= $URLcorrection ?>js/popper.min.js"></script>
<script src="<?= $URLcorrection ?>js/bootstrap.min.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.easing.1.3.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.easing.1.3.min.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.waypoints.min.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.stellar.min.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.animateNumber.min.js"></script>
<script src="<?= $URLcorrection ?>js/bootstrap-datepicker.js"></script>
<script src="<?= $URLcorrection ?>js/bootstrap-datepicker.min.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.timepicker.min.js"></script>
<script src="<?= $URLcorrection ?>js/owl.carousel.min.js"></script>
<script src="<?= $URLcorrection ?>js/jquery.magnific-popup.min.js"></script>
<script src="<?= $URLcorrection ?>js/scrollax.min.js"></script>
<script src="<?= $URLcorrection ?>js/main.js"></script>
<script src="<?= $URLcorrection ?>js/main.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="<?= $URLcorrection ?>js/script.js"></script>
<script src="<?= $URLcorrection ?>js/script.min.js"></script>
</body>

View File

@ -10,15 +10,15 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://fonts.googleapis.com/css?family=Poppins:200,300,400,500,600,700,800,900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/animate.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/animate.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/owl.carousel.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/owl.theme.default.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/magnific-popup.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/bootstrap-datepicker.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/jquery.timepicker.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/flaticon.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/style.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/padding.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/magnific-popup.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/bootstrap-datepicker.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/jquery.timepicker.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/flaticon.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/style.min.css">
<link rel="stylesheet" href="<?= $URLcorrection ?>css/padding.min.css">
<link rel="stylesheet" type="text/css" href="<?= $URLcorrection ?>fontawesome/css/all.min.css">
</head>

View File

@ -30,7 +30,7 @@
<img src="<?= $URLcorection ?>images/logo/Warmseal-White-Transparent.webp" class="logo" alt="Warmseal Logo">
</a>
<div class="text w-100">
<h1 class="mb-4 hero-text">Quality roofing at a affordable price</h1>
<h2 class="mb-4 hero-text">Quality roofing at an affordable price</h2>
<p><a href="<?= $URLcorection ?>contact" class="btn btn-primary">Book a Free Quote</a></p>
</div>
</div>

1
js/bootstrap-datepicker.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
js/google-map.min.js vendored Normal file
View File

@ -0,0 +1 @@
var google;function init(){for(var e={zoom:7,center:new google.maps.LatLng(40.69847032728747,-73.9514422416687),scrollwheel:!1,styles:[{featureType:"administrative.country",elementType:"geometry",stylers:[{visibility:"simplified"},{hue:"#ff0000"}]}]},o=document.getElementById("map"),n=new google.maps.Map(o,e),t=["New York"],a=0;a<t.length;a++)$.getJSON("http://maps.googleapis.com/maps/api/geocode/json?address="+t[a]+"&sensor=false",null,function(e){e=e.results[0].geometry.location,e=new google.maps.LatLng(e.lat,e.lng);new google.maps.Marker({position:e,map:n,icon:"images/loc.png"})})}google.maps.event.addDomListener(window,"load",init);

1
js/jquery.easing.1.3.min.js vendored Normal file
View File

@ -0,0 +1 @@
jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(n,t,e,u,a){return jQuery.easing[jQuery.easing.def](n,t,e,u,a)},easeInQuad:function(n,t,e,u,a){return u*(t/=a)*t+e},easeOutQuad:function(n,t,e,u,a){return-u*(t/=a)*(t-2)+e},easeInOutQuad:function(n,t,e,u,a){return(t/=a/2)<1?u/2*t*t+e:-u/2*(--t*(t-2)-1)+e},easeInCubic:function(n,t,e,u,a){return u*(t/=a)*t*t+e},easeOutCubic:function(n,t,e,u,a){return u*((t=t/a-1)*t*t+1)+e},easeInOutCubic:function(n,t,e,u,a){return(t/=a/2)<1?u/2*t*t*t+e:u/2*((t-=2)*t*t+2)+e},easeInQuart:function(n,t,e,u,a){return u*(t/=a)*t*t*t+e},easeOutQuart:function(n,t,e,u,a){return-u*((t=t/a-1)*t*t*t-1)+e},easeInOutQuart:function(n,t,e,u,a){return(t/=a/2)<1?u/2*t*t*t*t+e:-u/2*((t-=2)*t*t*t-2)+e},easeInQuint:function(n,t,e,u,a){return u*(t/=a)*t*t*t*t+e},easeOutQuint:function(n,t,e,u,a){return u*((t=t/a-1)*t*t*t*t+1)+e},easeInOutQuint:function(n,t,e,u,a){return(t/=a/2)<1?u/2*t*t*t*t*t+e:u/2*((t-=2)*t*t*t*t+2)+e},easeInSine:function(n,t,e,u,a){return-u*Math.cos(t/a*(Math.PI/2))+u+e},easeOutSine:function(n,t,e,u,a){return u*Math.sin(t/a*(Math.PI/2))+e},easeInOutSine:function(n,t,e,u,a){return-u/2*(Math.cos(Math.PI*t/a)-1)+e},easeInExpo:function(n,t,e,u,a){return 0==t?e:u*Math.pow(2,10*(t/a-1))+e},easeOutExpo:function(n,t,e,u,a){return t==a?e+u:u*(1-Math.pow(2,-10*t/a))+e},easeInOutExpo:function(n,t,e,u,a){return 0==t?e:t==a?e+u:(t/=a/2)<1?u/2*Math.pow(2,10*(t-1))+e:u/2*(2-Math.pow(2,-10*--t))+e},easeInCirc:function(n,t,e,u,a){return-u*(Math.sqrt(1-(t/=a)*t)-1)+e},easeOutCirc:function(n,t,e,u,a){return u*Math.sqrt(1-(t=t/a-1)*t)+e},easeInOutCirc:function(n,t,e,u,a){return(t/=a/2)<1?-u/2*(Math.sqrt(1-t*t)-1)+e:u/2*(Math.sqrt(1-(t-=2)*t)+1)+e},easeInElastic:function(n,t,e,u,a){var r=1.70158,i=0,s=u;return 0==t?e:1==(t/=a)?e+u:(i=i||.3*a,r=s<Math.abs(u)?(s=u,i/4):i/(2*Math.PI)*Math.asin(u/s),-(s*Math.pow(2,10*--t)*Math.sin(2*Math.PI*(t*a-r)/i))+e)},easeOutElastic:function(n,t,e,u,a){var r=1.70158,i=0,s=u;return 0==t?e:1==(t/=a)?e+u:(i=i||.3*a,r=s<Math.abs(u)?(s=u,i/4):i/(2*Math.PI)*Math.asin(u/s),s*Math.pow(2,-10*t)*Math.sin(2*Math.PI*(t*a-r)/i)+u+e)},easeInOutElastic:function(n,t,e,u,a){var r=1.70158,i=0,s=u;return 0==t?e:2==(t/=a/2)?e+u:(i=i||a*(.3*1.5),r=s<Math.abs(u)?(s=u,i/4):i/(2*Math.PI)*Math.asin(u/s),t<1?s*Math.pow(2,10*--t)*Math.sin(2*Math.PI*(t*a-r)/i)*-.5+e:s*Math.pow(2,-10*--t)*Math.sin(2*Math.PI*(t*a-r)/i)*.5+u+e)},easeInBack:function(n,t,e,u,a,r){return u*(t/=a)*t*(((r=null==r?1.70158:r)+1)*t-r)+e},easeOutBack:function(n,t,e,u,a,r){return u*((t=t/a-1)*t*(((r=null==r?1.70158:r)+1)*t+r)+1)+e},easeInOutBack:function(n,t,e,u,a,r){return null==r&&(r=1.70158),(t/=a/2)<1?u/2*(t*t*((1+(r*=1.525))*t-r))+e:u/2*((t-=2)*t*((1+(r*=1.525))*t+r)+2)+e},easeInBounce:function(n,t,e,u,a){return u-jQuery.easing.easeOutBounce(n,a-t,0,u,a)+e},easeOutBounce:function(n,t,e,u,a){return(t/=a)<1/2.75?u*(7.5625*t*t)+e:t<2/2.75?u*(7.5625*(t-=1.5/2.75)*t+.75)+e:t<2.5/2.75?u*(7.5625*(t-=2.25/2.75)*t+.9375)+e:u*(7.5625*(t-=2.625/2.75)*t+.984375)+e},easeInOutBounce:function(n,t,e,u,a){return t<a/2?.5*jQuery.easing.easeInBounce(n,2*t,0,u,a)+e:.5*jQuery.easing.easeOutBounce(n,2*t-a,0,u,a)+.5*u+e}});

1
js/main.min.js vendored Normal file
View File

@ -0,0 +1 @@
(n=>{n(window).stellar({responsive:!0,parallaxBackgrounds:!0,parallaxElements:!0,horizontalScrolling:!1,hideDistantElements:!1,scrollProperty:"scroll"}),n(".js-fullheight").css("height",n(window).height()),n(window).resize(function(){n(".js-fullheight").css("height",n(window).height())}),setTimeout(function(){0<n("#ftco-loader").length&&n("#ftco-loader").removeClass("show")},1),n(".home-slider").owlCarousel({loop:!0,autoplay:!0,margin:0,animateOut:"fadeOut",animateIn:"fadeIn",nav:!0,dots:!0,autoplayHoverPause:!1,items:1,navText:["<span class='ion-ios-arrow-back'></span>","<span class='ion-ios-arrow-forward'></span>"],responsive:{0:{items:1},600:{items:1},1e3:{items:1}}}),n(".carousel-testimony").owlCarousel({center:!0,loop:!0,items:1,margin:30,stagePadding:0,nav:!1,navText:['<span class="ion-ios-arrow-back">','<span class="ion-ios-arrow-forward">'],responsive:{0:{items:1},600:{items:2},1e3:{items:3}}}),n("nav .dropdown").hover(function(){var e=n(this);e.addClass("show"),e.find("> a").attr("aria-expanded",!0),e.find(".dropdown-menu").addClass("show")},function(){var e=n(this);e.removeClass("show"),e.find("> a").attr("aria-expanded",!1),e.find(".dropdown-menu").removeClass("show")}),n("#dropdown04").on("show.bs.dropdown",function(){console.log("show")}),n(".image-popup").magnificPopup({type:"image",closeOnContentClick:!0,closeBtnInside:!1,fixedContentPos:!0,mainClass:"mfp-no-margins mfp-with-zoom",gallery:{enabled:!0,navigateByImgClick:!0,preload:[0,1]},image:{verticalFit:!0},zoom:{enabled:!0,duration:300}}),n(".popup-youtube, .popup-vimeo, .popup-gmaps").magnificPopup({disableOn:700,type:"iframe",mainClass:"mfp-fade",removalDelay:160,preloader:!1,fixedContentPos:!1}),n("#section-counter").waypoint(function(e){var o;"down"!==e||n(this.element).hasClass("ftco-animated")||(o=n.animateNumber.numberStepFactories.separator(","),n(".number").each(function(){var e=n(this),a=e.data("number");console.log(a),e.animateNumber({number:a,numberStep:o},7e3)}))},{offset:"95%"}),n(".ftco-animate").waypoint(function(e){"down"!==e||n(this.element).hasClass("ftco-animated")||(n(this.element).addClass("item-animate"),setTimeout(function(){n("body .ftco-animate.item-animate").each(function(e){var a=n(this);setTimeout(function(){var e=a.data("animate-effect");"fadeIn"===e?a.addClass("fadeIn ftco-animated"):"fadeInLeft"===e?a.addClass("fadeInLeft ftco-animated"):"fadeInRight"===e?a.addClass("fadeInRight ftco-animated"):a.addClass("fadeInUp ftco-animated"),a.removeClass("item-animate")},50*e,"easeInOutExpo")})},100))},{offset:"95%"}),n(".appointment_date").datepicker({format:"m/d/yyyy",autoclose:!0}),n(".appointment_time").timepicker()})(jQuery);

1
js/script.min.js vendored Normal file
View File

@ -0,0 +1 @@
let carouselContainer=document.querySelector(".carousel-container"),imageRow=document.querySelector(".image-row"),imageItems=imageRow.querySelectorAll(".col-md-3"),numberOfVisible=4,scrollPosition=0,imageWidth,slideDuration=1e3,slideInterval=5e3,isAnimating=!1;function updateCarousel(){0<imageItems.length&&(imageWidth=imageItems[0].offsetWidth)}function slideCarousel(){!isAnimating&&imageWidth&&(isAnimating=!0,scrollPosition+=imageWidth,imageRow.style.transform=`translateX(-${scrollPosition}px)`,setTimeout(()=>{var e=imageRow.firstElementChild;imageRow.appendChild(e),imageRow.style.transition="none",imageRow.style.transform="translateX(0px)",scrollPosition=0,imageRow.offsetHeight,imageRow.style.transition="",imageItems=imageRow.querySelectorAll(".col-md-3"),isAnimating=!1},slideDuration))}function startSlidingCarousel(){setInterval(slideCarousel,slideInterval)}function initializeCarousel(){updateCarousel(),startSlidingCarousel(),window.addEventListener("resize",updateCarousel)}initializeCarousel();

View File

@ -47,5 +47,3 @@ $metatwitterimage = "$URLcorrection/media/favicons/android-chrome-512x512.png";
// $ometa['twittertitle'] = "Acorn Media - $PageTitle";
// $ometa['twitterdescription'] = "Acorn Media: Your hub for business web hosting, website design, and digital media services, including advertising and social media management.";
// $ometa['twitterimage'] = "$URLcorrection/media/favicons/android-chrome-512x512.png";

View File

@ -1,12 +1,13 @@
<?php
// Advanced Local Business Schema for Warmseal Roofing
function getLocalBusinessSchema() {
function getLocalBusinessSchema()
{
return [
"@context" => "https://schema.org",
"@type" => "RoofingContractor",
"name" => "Warmseal Roofing",
"alternateName" => ["Warmseal", "Warmseal Roofing Services"],
"description" => "Professional roofer in Accrington, Lancashire providing expert roof repairs, installations, maintenance, guttering, and roofline services across Accrington, Blackburn, Preston and surrounding areas.",
"description" => "Leading roofer in Accrington, Lancashire. Expert roof repairs, installations & maintenance across Accrington, Blackburn, Preston. Free quotes available.",
"url" => "https://warmseal-roofing.co.uk",
"logo" => "https://warmseal-roofing.co.uk/images/logo/Warmseal-Blue.svg",
"image" => [
@ -272,4 +273,3 @@ function getLocalBusinessSchema() {
]
];
}
?>

View File

@ -7,292 +7,292 @@ include_once $URLcorrection . "meta/config.php";
include_once $URLcorrection . "meta/schema.php";
if (isset($ometa['title'])) {
$meta['title'] = $ometa['title'];
} else {
$meta['title'] = $metatitle;
}
$meta['title'] = $ometa['title'];
} else {
$meta['title'] = $metatitle;
}
if (isset($ometa['description'])) {
$meta['description'] = $ometa['description'];
} else {
$meta['description'] = $metadescription;
}
$meta['description'] = $ometa['description'];
} else {
$meta['description'] = $metadescription;
}
if (isset($ometa['keywords'])) {
$meta['keywords'] = $ometa['keywords'];
} else {
$meta['keywords'] = $metakeywords;
}
$meta['keywords'] = $ometa['keywords'];
} else {
$meta['keywords'] = $metakeywords;
}
if (isset($ometa['robots'])) {
$meta['robots'] = $ometa['robots'];
} else {
$meta['robots'] = $metarobots;
}
$meta['robots'] = $ometa['robots'];
} else {
$meta['robots'] = $metarobots;
}
if (isset($ometa['language'])) {
$meta['language'] = $ometa['language'];
} else {
$meta['language'] = $metalanguage;
}
$meta['language'] = $ometa['language'];
} else {
$meta['language'] = $metalanguage;
}
if (isset($ometa['revisit-after'])) {
$meta['revisit-after'] = $ometa['revisit-after'];
} else {
$meta['revisit-after'] = $metarevisit;
}
$meta['revisit-after'] = $ometa['revisit-after'];
} else {
$meta['revisit-after'] = $metarevisit;
}
if (isset($ometa['author'])) {
$meta['author'] = $ometa['author'];
} else {
$meta['author'] = $metaauthor;
}
$meta['author'] = $ometa['author'];
} else {
$meta['author'] = $metaauthor;
}
if (isset($ometa['apple-touch-icon'])) {
$meta['apple-touch-icon'] = $ometa['apple-touch-icon'];
} else {
$meta['apple-touch-icon'] = $metaappleicon;
}
$meta['apple-touch-icon'] = $ometa['apple-touch-icon'];
} else {
$meta['apple-touch-icon'] = $metaappleicon;
}
if (isset($ometa['icon32'])) {
$meta['icon32'] = $ometa['icon32'];
} else {
$meta['icon32'] = $metaicon32;
}
$meta['icon32'] = $ometa['icon32'];
} else {
$meta['icon32'] = $metaicon32;
}
if (isset($ometa['icon16'])) {
$meta['icon16'] = $ometa['icon16'];
} else {
$meta['icon16'] = $metaicon16;
}
$meta['icon16'] = $ometa['icon16'];
} else {
$meta['icon16'] = $metaicon16;
}
if (isset($ometa['site.webmanifest'])) {
$meta['site.webmanifest'] = $ometa['site.webmanifest'];
} else {
$meta['site.webmanifest'] = $metamanifest;
}
$meta['site.webmanifest'] = $ometa['site.webmanifest'];
} else {
$meta['site.webmanifest'] = $metamanifest;
}
if (isset($ometa['ogtype'])) {
$meta['ogtype'] = $ometa['ogtype'];
} else {
$meta['ogtype'] = $metaogtype;
}
$meta['ogtype'] = $ometa['ogtype'];
} else {
$meta['ogtype'] = $metaogtype;
}
if (isset($ometa['ogurl'])) {
$meta['ogurl'] = $ometa['ogurl'];
} else {
$meta['ogurl'] = $metaogurl;
}
$meta['ogurl'] = $ometa['ogurl'];
} else {
$meta['ogurl'] = $metaogurl;
}
if (isset($ometa['ogtitle'])) {
$meta['ogtitle'] = $ometa['ogtitle'];
} else {
$meta['ogtitle'] = $metaogtitle;
}
$meta['ogtitle'] = $ometa['ogtitle'];
} else {
$meta['ogtitle'] = $metaogtitle;
}
if (isset($ometa['ogdescription'])) {
$meta['ogdescription'] = $ometa['ogdescription'];
} else {
$meta['ogdescription'] = $metaogdescription;
}
$meta['ogdescription'] = $ometa['ogdescription'];
} else {
$meta['ogdescription'] = $metaogdescription;
}
if (isset($ometa['ogimage'])) {
$meta['ogimage'] = $ometa['ogimage'];
} else {
$meta['ogimage'] = $metaogimage;
}
$meta['ogimage'] = $ometa['ogimage'];
} else {
$meta['ogimage'] = $metaogimage;
}
if (isset($ometa['twittercard'])) {
$meta['twittercard'] = $ometa['twittercard'];
} else {
$meta['twittercard'] = $metatwittercard;
}
$meta['twittercard'] = $ometa['twittercard'];
} else {
$meta['twittercard'] = $metatwittercard;
}
if (isset($ometa['twitterurl'])) {
$meta['twitterurl'] = $ometa['twitterurl'];
} else {
$meta['twitterurl'] = $metatwitterurl;
}
$meta['twitterurl'] = $ometa['twitterurl'];
} else {
$meta['twitterurl'] = $metatwitterurl;
}
if (isset($ometa['twittertitle'])) {
$meta['twittertitle'] = $ometa['twittertitle'];
} else {
$meta['twittertitle'] = $metatwittertitle;
}
$meta['twittertitle'] = $ometa['twittertitle'];
} else {
$meta['twittertitle'] = $metatwittertitle;
}
if (isset($ometa['twitterdescription'])) {
$meta['twitterdescription'] = $ometa['twitterdescription'];
} else {
$meta['twitterdescription'] = $metatwitterdescription;
}
$meta['twitterdescription'] = $ometa['twitterdescription'];
} else {
$meta['twitterdescription'] = $metatwitterdescription;
}
if (isset($ometa['twitterimage'])) {
$meta['twitterimage'] = $ometa['twitterimage'];
} else {
$meta['twitterimage'] = $metatwitterimage;
}
$meta['twitterimage'] = $ometa['twitterimage'];
} else {
$meta['twitterimage'] = $metatwitterimage;
}
?>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?=$meta['title']?></title>
<title><?= $meta['title'] ?></title>
<meta name="title" content="<?=$meta['title']?>">
<meta name="description" content="<?=$meta['description']?>">
<meta name="keywords" content="<?=$meta['keywords']?>">
<meta name="robots" content="<?=$meta['robots']?>">
<meta name="title" content="<?= $meta['title'] ?>">
<meta name="description" content="<?= $meta['description'] ?>">
<meta name="keywords" content="<?= $meta['keywords'] ?>">
<meta name="robots" content="<?= $meta['robots'] ?>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="language" content="<?=$meta['language']?>">
<meta name="revisit-after" content="<?=$meta['revisit-after']?>">
<meta name="author" content="<?=$meta['author']?>">
<link rel="apple-touch-icon" sizes="180x180" href="<?=$meta['apple-touch-icon']?>">
<link rel="icon" type="image/png" sizes="32x32" href="<?=$meta['icon32']?>">
<link rel="icon" type="image/png" sizes="16x16" href="<?=$meta['icon16']?>">
<!--<link rel="manifest" href="--><?php //=$meta['manifest']?><!--">-->
<meta name="language" content="<?= $meta['language'] ?>">
<meta name="revisit-after" content="<?= $meta['revisit-after'] ?>">
<meta name="author" content="<?= $meta['author'] ?>">
<link rel="apple-touch-icon" sizes="180x180" href="<?= $meta['apple-touch-icon'] ?>">
<link rel="icon" type="image/png" sizes="32x32" href="<?= $meta['icon32'] ?>">
<link rel="icon" type="image/png" sizes="16x16" href="<?= $meta['icon16'] ?>">
<!--<link rel="manifest" href="--><?php //=$meta['manifest']
?><!--">-->
<link rel="mask-icon" href="/meta/favicons/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/meta/favicons/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/meta/favicons/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<!-- Canonical URL -->
<link rel="canonical" href="https://warmseal-roofing.co.uk<?php echo $_SERVER['REQUEST_URI']; ?>" />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="<?=$meta['ogtype']?>" />
<meta property="og:url" content="<?=$meta['ogurl']?>" />
<meta property="og:title" content="<?=$meta['ogtitle']?>" />
<meta property="og:description" content="<?=$meta['ogdescription']?>"/>
<meta property="og:image" content="<?=$meta['ogimage']?>" />
<meta property="og:type" content="<?= $meta['ogtype'] ?>" />
<meta property="og:url" content="<?= $meta['ogurl'] ?>" />
<meta property="og:title" content="<?= $meta['ogtitle'] ?>" />
<meta property="og:description" content="<?= $meta['ogdescription'] ?>" />
<meta property="og:image" content="<?= $meta['ogimage'] ?>" />
<!-- Twitter -->
<meta property="twitter:card" content="<?=$meta['twittercard'] ?>" />
<meta property="twitter:url" content="<?=$meta['twitterurl'] ?>" />
<meta property="twitter:title" content="<?=$meta['twittertitle'] ?>" />
<meta property="twitter:description" content="<?=$meta['twitterdescription'] ?>" />
<meta property="twitter:image" content="<?=$meta['twitterimage'] ?>" />
<meta property="twitter:card" content="<?= $meta['twittercard'] ?>" />
<meta property="twitter:url" content="<?= $meta['twitterurl'] ?>" />
<meta property="twitter:title" content="<?= $meta['twittertitle'] ?>" />
<meta property="twitter:description" content="<?= $meta['twitterdescription'] ?>" />
<meta property="twitter:image" content="<?= $meta['twitterimage'] ?>" />
<!-- Schema.org Structured Data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"name": "Warmseal Roofing",
"alternateName": "Warmseal",
"description": "Professional roofer in Accrington, Lancashire providing expert roof repairs, installations, maintenance, guttering, and roofline services.",
"url": "https://warmseal-roofing.co.uk",
"logo": "https://warmseal-roofing.co.uk/images/logo/Warmseal-Blue.svg",
"image": "https://warmseal-roofing.co.uk/images/logo/Warmseal-Blue.svg",
"telephone": "+44-1254-123456",
"email": "info@warmseal-roofing.co.uk",
"address": {
"@type": "PostalAddress",
"addressLocality": "Accrington",
"addressRegion": "Lancashire",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.7532,
"longitude": -2.3610
},
"areaServed": [
{
"@type": "City",
"name": "Accrington"
},
{
"@type": "City",
"name": "Blackburn"
},
{
"@type": "City",
"name": "Preston"
},
{
"@type": "AdministrativeArea",
"name": "Lancashire"
}
],
"serviceType": [
"Roof Repairs",
"Roof Installation",
"Roof Maintenance",
"Emergency Roof Repairs",
"Gutter Installation",
"Gutter Cleaning",
"Roof Cleaning",
"Moss Removal",
"UPVC Roofline",
"Fascias and Soffits",
"Chimney Repairs",
"Leadwork",
"Storm Damage Repair"
],
"priceRange": "££",
"paymentAccepted": ["Cash", "Check", "Credit Card", "Bank Transfer"],
"currenciesAccepted": "GBP",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
{
"@context": "https://schema.org",
"@type": "RoofingContractor",
"name": "Warmseal Roofing",
"alternateName": "Warmseal",
"description": "Professional roofer in Accrington, Lancashire providing expert roof repairs, installations, maintenance, guttering, and roofline services.",
"url": "https://warmseal-roofing.co.uk",
"logo": "https://warmseal-roofing.co.uk/images/logo/Warmseal-Blue.svg",
"image": "https://warmseal-roofing.co.uk/images/logo/Warmseal-Blue.svg",
"telephone": "+44-1254-123456",
"email": "info@warmseal-roofing.co.uk",
"address": {
"@type": "PostalAddress",
"addressLocality": "Accrington",
"addressRegion": "Lancashire",
"addressCountry": "GB"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 53.7532,
"longitude": -2.3610
},
"areaServed": [{
"@type": "City",
"name": "Accrington"
},
{
"@type": "City",
"name": "Blackburn"
},
{
"@type": "City",
"name": "Preston"
},
{
"@type": "AdministrativeArea",
"name": "Lancashire"
}
],
"opens": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "16:00"
}
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Roofing Services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Roof Repairs",
"description": "Expert roof repair services including leak repairs, tile replacement, and storm damage restoration."
}
"serviceType": [
"Roof Repairs",
"Roof Installation",
"Roof Maintenance",
"Emergency Roof Repairs",
"Gutter Installation",
"Gutter Cleaning",
"Roof Cleaning",
"Moss Removal",
"UPVC Roofline",
"Fascias and Soffits",
"Chimney Repairs",
"Leadwork",
"Storm Damage Repair"
],
"priceRange": "££",
"paymentAccepted": ["Cash", "Check", "Credit Card", "Bank Transfer"],
"currenciesAccepted": "GBP",
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "08:00",
"closes": "18:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "08:00",
"closes": "16:00"
}
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Roofing Services",
"itemListElement": [{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Roof Repairs",
"description": "Expert roof repair services including leak repairs, tile replacement, and storm damage restoration."
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "New Roof Installation",
"description": "Complete new roof installations using quality materials with professional workmanship."
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Gutter Services",
"description": "Gutter installation, cleaning, and maintenance services."
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "UPVC Roofline",
"description": "Fascias, soffits, and roofline installation and replacement services."
}
}
]
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "New Roof Installation",
"description": "Complete new roof installations using quality materials with professional workmanship."
}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "47"
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Gutter Services",
"description": "Gutter installation, cleaning, and maintenance services."
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "UPVC Roofline",
"description": "Fascias, soffits, and roofline installation and replacement services."
}
}
]
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.9",
"reviewCount": "47"
},
"sameAs": [
"https://www.facebook.com/profile.php?id=61576598612133",
"https://www.instagram.com/warmsealroofing"
]
}
"sameAs": [
"https://www.facebook.com/profile.php?id=61576598612133",
"https://www.instagram.com/warmsealroofing"
]
}
</script>
<!-- Page-Specific Schema -->
<script type="application/ld+json">
<?php
$currentPage = isset($Page) ? $Page : 'index';
echo generatePageSchema($currentPage, $URLcorrection);
?>
<?php
$currentPage = isset($Page) ? $Page : 'index';
echo generatePageSchema($currentPage, $URLcorrection);
?>
</script>
<!-- Breadcrumb Schema -->
<script type="application/ld+json">
<?php
$currentPageTitle = isset($PageTitle) ? $PageTitle : 'Home';
echo generateBreadcrumbSchema($currentPage, $currentPageTitle);
?>
<?php
$currentPageTitle = isset($PageTitle) ? $PageTitle : 'Home';
echo generateBreadcrumbSchema($currentPage, $currentPageTitle);
?>
</script>

View File

@ -1,7 +1,8 @@
<?php
// Page-specific Schema.org structured data
function generatePageSchema($page, $URLcorrection = "") {
function generatePageSchema($page, $URLcorrection = "")
{
$baseSchema = [
"@context" => "https://schema.org",
"@type" => "WebPage",
@ -14,7 +15,7 @@ function generatePageSchema($page, $URLcorrection = "") {
];
// Add page-specific schema based on current page
switch($page) {
switch ($page) {
case 'roof-repairs':
$serviceSchema = [
"@context" => "https://schema.org",
@ -26,7 +27,10 @@ function generatePageSchema($page, $URLcorrection = "") {
"name" => "Warmseal Roofing"
],
"areaServed" => [
"Accrington", "Blackburn", "Preston", "Lancashire"
"Accrington",
"Blackburn",
"Preston",
"Lancashire"
],
"availableChannel" => [
"@type" => "ServiceChannel",
@ -48,7 +52,10 @@ function generatePageSchema($page, $URLcorrection = "") {
"name" => "Warmseal Roofing"
],
"areaServed" => [
"Accrington", "Blackburn", "Preston", "Lancashire"
"Accrington",
"Blackburn",
"Preston",
"Lancashire"
],
"availableChannel" => [
"@type" => "ServiceChannel",
@ -70,7 +77,10 @@ function generatePageSchema($page, $URLcorrection = "") {
"name" => "Warmseal Roofing"
],
"areaServed" => [
"Accrington", "Blackburn", "Preston", "Lancashire"
"Accrington",
"Blackburn",
"Preston",
"Lancashire"
],
"availableChannel" => [
"@type" => "ServiceChannel",
@ -92,7 +102,10 @@ function generatePageSchema($page, $URLcorrection = "") {
"name" => "Warmseal Roofing"
],
"areaServed" => [
"Accrington", "Blackburn", "Preston", "Lancashire"
"Accrington",
"Blackburn",
"Preston",
"Lancashire"
],
"availableChannel" => [
"@type" => "ServiceChannel",
@ -115,7 +128,10 @@ function generatePageSchema($page, $URLcorrection = "") {
],
"about" => "Roofing Projects and Portfolio",
"locationCreated" => [
"Accrington", "Blackburn", "Preston", "Lancashire"
"Accrington",
"Blackburn",
"Preston",
"Lancashire"
]
];
return json_encode([$baseSchema, $portfolioSchema], JSON_UNESCAPED_SLASHES);
@ -164,7 +180,8 @@ function generatePageSchema($page, $URLcorrection = "") {
}
// Generate breadcrumb schema
function generateBreadcrumbSchema($page, $pageTitle) {
function generateBreadcrumbSchema($page, $pageTitle)
{
$breadcrumbs = [
"@context" => "https://schema.org",
"@type" => "BreadcrumbList",
@ -189,4 +206,3 @@ function generateBreadcrumbSchema($page, $pageTitle) {
return json_encode($breadcrumbs, JSON_UNESCAPED_SLASHES);
}
?>

24
package.json Normal file
View File

@ -0,0 +1,24 @@
{
"name": "warmseal",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"minify-css": "cleancss -o css/style.min.css css/style.css && cleancss -o css/animate.min.css css/animate.css && cleancss -o css/padding.min.css css/padding.css && cleancss -o css/flaticon.min.css css/flaticon.css && cleancss -o css/bootstrap-datepicker.min.css css/bootstrap-datepicker.css && cleancss -o css/jquery.timepicker.min.css css/jquery.timepicker.css && cleancss -o css/magnific-popup.min.css css/magnific-popup.css",
"minify-js": "uglifyjs js/main.js -o js/main.min.js -c -m && uglifyjs js/script.js -o js/script.min.js -c -m && uglifyjs js/google-map.js -o js/google-map.min.js -c -m && uglifyjs js/bootstrap-datepicker.js -o js/bootstrap-datepicker.min.js -c -m && uglifyjs js/jquery.easing.1.3.js -o js/jquery.easing.1.3.min.js -c -m",
"minify": "npm run minify-css && npm run minify-js"
},
"repository": {
"type": "git",
"url": "https://git.hexaspark.com/Acorn_Media/warmseal-roofing.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"type": "commonjs",
"devDependencies": {
"clean-css-cli": "^5.6.3",
"uglify-js": "^3.19.3"
}
}