Fix navbar across all pages: add nav include, fonts, active state, spacing, stats, error pages
- Add nav.php include to 5 missing pages (cost-calculator, thank-you, 403, 404, 500) - Add ErrorDocument directives to .htaccess for custom 403/404/500 pages - Fix bogus accuracy stats (homepage, web-scraping, location pages) - Fix invisible CTA buttons on property and financial service pages - Add Google Fonts (Roboto Slab + Lato) to all pages missing it (tools, blog articles, error pages) - Add active nav link highlighting (teal underline for current page) - Improve footer contrast to WCAG AA, equal-height cards, mobile text scaling - Consistent navbar-to-content spacing across all pages - Bump cache version to v1.1.3
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
# Custom error pages
|
||||
ErrorDocument 403 /403.php
|
||||
ErrorDocument 404 /404.php
|
||||
ErrorDocument 500 /500.php
|
||||
|
||||
# Security Rules for UK Data Services
|
||||
|
||||
# Protect sensitive files and configs
|
||||
|
||||
7
403.php
7
403.php
@@ -10,7 +10,10 @@ http_response_code(403);
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Access Forbidden - UK Data Services</title>
|
||||
<style>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
margin: 0;
|
||||
@@ -68,8 +71,10 @@ http_response_code(403);
|
||||
opacity: 0.8;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
</head>
|
||||
<body>
|
||||
<?php include($_SERVER["DOCUMENT_ROOT"] . "/includes/nav.php"); ?>
|
||||
<div class="container">
|
||||
<div class="logo">
|
||||
<h3>UK Data Services</h3>
|
||||
|
||||
1
404.php
1
404.php
@@ -88,6 +88,7 @@ $page_description = "The page you're looking for doesn't exist. Explore our data
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?php include($_SERVER["DOCUMENT_ROOT"] . "/includes/nav.php"); ?>
|
||||
<div class="error-page">
|
||||
<div class="error-container">
|
||||
<div class="error-code">404</div>
|
||||
|
||||
7
500.php
7
500.php
@@ -13,7 +13,10 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER['
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Service Temporarily Unavailable - UK Data Services</title>
|
||||
<style>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
body {
|
||||
font-family: 'Arial', sans-serif;
|
||||
margin: 0;
|
||||
@@ -78,8 +81,10 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER['
|
||||
border-radius: 10px;
|
||||
}
|
||||
</style>
|
||||
<link rel="stylesheet" href="/css/main.css">
|
||||
</head>
|
||||
<body>
|
||||
<?php include($_SERVER["DOCUMENT_ROOT"] . "/includes/nav.php"); ?>
|
||||
<div class="container">
|
||||
<div class="logo">
|
||||
<h3>UK Data Services</h3>
|
||||
|
||||
@@ -149,6 +149,7 @@ body {
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
.nav-link.active { color: #148069; font-weight: 600; border-bottom: 2px solid #148069; padding-bottom: 2px;}
|
||||
.nav-link:hover {
|
||||
color: #144784;
|
||||
}
|
||||
@@ -3599,41 +3600,55 @@ aside.related-articles {
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix for navbar overlap on content pages */
|
||||
/* ===== NAVBAR SPACING FIX (consistent across all pages) ===== */
|
||||
/* Navbar is position:fixed, height 70px */
|
||||
|
||||
/* Hero pages: all hero variants get 120px top padding (70px navbar + 50px space) */
|
||||
.hero,
|
||||
.page-hero,
|
||||
.about-hero,
|
||||
.faq-hero,
|
||||
.service-hero,
|
||||
.project-types-hero,
|
||||
.tools-hero,
|
||||
.quote-hero {
|
||||
padding-top: 120px !important;
|
||||
}
|
||||
|
||||
/* Non-hero pages with <main>: push content below navbar */
|
||||
main {
|
||||
padding-top: 90px; /* Add padding to account for fixed navbar (70px + 20px buffer) */
|
||||
padding-top: 90px; /* 70px navbar + 20px breathing room */
|
||||
}
|
||||
|
||||
/* Specific fix for legal content pages */
|
||||
/* But if main contains a hero, don't double-pad */
|
||||
main > .hero:first-child,
|
||||
main > .page-hero:first-child,
|
||||
main > .about-hero:first-child,
|
||||
main > .faq-hero:first-child,
|
||||
main > .service-hero:first-child,
|
||||
main > .project-types-hero:first-child {
|
||||
margin-top: -90px; /* Cancel out the main padding */
|
||||
}
|
||||
|
||||
/* Legal content pages (no hero, text-heavy) */
|
||||
.legal-content {
|
||||
padding-top: 120px !important; /* Override inline styles for legal pages */
|
||||
padding-top: 100px !important; /* 70px navbar + 30px breathing room */
|
||||
}
|
||||
|
||||
/* Also ensure any page sections that might be affected have proper spacing */
|
||||
/* Tool sub-pages and standalone pages (no <main>, no hero) */
|
||||
.calculator-container,
|
||||
.analyzer-container,
|
||||
.converter-container,
|
||||
.checker-container,
|
||||
.thank-you-container {
|
||||
padding-top: 100px !important; /* 70px navbar + 30px breathing room */
|
||||
}
|
||||
|
||||
/* Generic page-content class */
|
||||
.page-content {
|
||||
padding-top: 90px;
|
||||
}
|
||||
|
||||
/* For hero sections that should start right under navbar */
|
||||
.hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* For about page hero */
|
||||
.about-hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* For FAQ page hero */
|
||||
.faq-hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* For project types and other page heroes */
|
||||
.page-hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* Hide reCAPTCHA badge */
|
||||
.grecaptcha-badge {
|
||||
visibility: hidden !important;
|
||||
@@ -4370,3 +4385,124 @@ body { font-size: 17px; }
|
||||
}
|
||||
|
||||
/* ===== END VISUAL FIXES ===== */
|
||||
|
||||
|
||||
/* ===== VISUAL FIXES 2026-02-11 ===== */
|
||||
|
||||
/* 1. Equal-height capability cards on project-types page */
|
||||
.capabilities-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 30px;
|
||||
align-items: stretch;
|
||||
}
|
||||
.capability-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
.capability-card p {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
/* 2. Footer contrast improvements — WCAG AA */
|
||||
.footer-section p,
|
||||
.footer-section li,
|
||||
.footer-bottom p,
|
||||
.footer-bottom .company-details,
|
||||
.trust-badge-text span {
|
||||
color: #d1d5db; /* ~9:1 on #151f25 */
|
||||
}
|
||||
.footer-section a {
|
||||
color: #93c5fd; /* light blue — ~7.5:1 on #151f25 */
|
||||
}
|
||||
.footer-section a:hover {
|
||||
color: #bfdbfe;
|
||||
}
|
||||
.footer-section h3 {
|
||||
color: #f3f4f6;
|
||||
}
|
||||
.footer-bottom p,
|
||||
.footer-bottom .company-details {
|
||||
color: #9ca3af; /* muted but still 4.6:1 */
|
||||
}
|
||||
.footer-logo img {
|
||||
filter: brightness(1.2);
|
||||
}
|
||||
|
||||
/* 3. Mobile text sizing & layout */
|
||||
@media (max-width: 768px) {
|
||||
body {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
/* Project-types hero */
|
||||
.project-types-hero h1 {
|
||||
font-size: 1.8rem;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.project-types-hero p {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
/* Capability cards single column on mobile */
|
||||
.capabilities-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* Industry grid single column */
|
||||
.industry-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* Project category headings */
|
||||
.project-category h2 {
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
.project-category h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.project-description {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
/* Footer content single column (already done but ensure) */
|
||||
.footer-content {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* Footer bottom stack */
|
||||
.footer-bottom,
|
||||
.footer-bottom .footer-bottom-content {
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.project-types-hero h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
.project-types-hero {
|
||||
padding: 100px 0 40px;
|
||||
}
|
||||
.project-category {
|
||||
padding: 40px 0;
|
||||
}
|
||||
.project-category h2 {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 4. General polish */
|
||||
/* project-types-hero padding now in unified block above */
|
||||
|
||||
/* Tech tags wrapping fix */
|
||||
.tech-tags {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* ===== END VISUAL FIXES 2026-02-11 ===== */
|
||||
|
||||
4496
assets/css/main.css.bak.20260211
Normal file
4496
assets/css/main.css.bak.20260211
Normal file
File diff suppressed because it is too large
Load Diff
186
assets/css/main.min.css
vendored
186
assets/css/main.min.css
vendored
@@ -149,6 +149,7 @@ body {
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
|
||||
.nav-link.active { color: #148069; font-weight: 600; border-bottom: 2px solid #148069; padding-bottom: 2px;}
|
||||
.nav-link:hover {
|
||||
color: #144784;
|
||||
}
|
||||
@@ -3599,41 +3600,55 @@ aside.related-articles {
|
||||
}
|
||||
}
|
||||
|
||||
/* Fix for navbar overlap on content pages */
|
||||
/* ===== NAVBAR SPACING FIX (consistent across all pages) ===== */
|
||||
/* Navbar is position:fixed, height 70px */
|
||||
|
||||
/* Hero pages: all hero variants get 120px top padding (70px navbar + 50px space) */
|
||||
.hero,
|
||||
.page-hero,
|
||||
.about-hero,
|
||||
.faq-hero,
|
||||
.service-hero,
|
||||
.project-types-hero,
|
||||
.tools-hero,
|
||||
.quote-hero {
|
||||
padding-top: 120px !important;
|
||||
}
|
||||
|
||||
/* Non-hero pages with <main>: push content below navbar */
|
||||
main {
|
||||
padding-top: 90px; /* Add padding to account for fixed navbar (70px + 20px buffer) */
|
||||
padding-top: 90px; /* 70px navbar + 20px breathing room */
|
||||
}
|
||||
|
||||
/* Specific fix for legal content pages */
|
||||
/* But if main contains a hero, don't double-pad */
|
||||
main > .hero:first-child,
|
||||
main > .page-hero:first-child,
|
||||
main > .about-hero:first-child,
|
||||
main > .faq-hero:first-child,
|
||||
main > .service-hero:first-child,
|
||||
main > .project-types-hero:first-child {
|
||||
margin-top: -90px; /* Cancel out the main padding */
|
||||
}
|
||||
|
||||
/* Legal content pages (no hero, text-heavy) */
|
||||
.legal-content {
|
||||
padding-top: 120px !important; /* Override inline styles for legal pages */
|
||||
padding-top: 100px !important; /* 70px navbar + 30px breathing room */
|
||||
}
|
||||
|
||||
/* Also ensure any page sections that might be affected have proper spacing */
|
||||
/* Tool sub-pages and standalone pages (no <main>, no hero) */
|
||||
.calculator-container,
|
||||
.analyzer-container,
|
||||
.converter-container,
|
||||
.checker-container,
|
||||
.thank-you-container {
|
||||
padding-top: 100px !important; /* 70px navbar + 30px breathing room */
|
||||
}
|
||||
|
||||
/* Generic page-content class */
|
||||
.page-content {
|
||||
padding-top: 90px;
|
||||
}
|
||||
|
||||
/* For hero sections that should start right under navbar */
|
||||
.hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* For about page hero */
|
||||
.about-hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* For FAQ page hero */
|
||||
.faq-hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* For project types and other page heroes */
|
||||
.page-hero {
|
||||
padding-top: 140px; /* 120px base + 20px for navbar */
|
||||
}
|
||||
|
||||
/* Hide reCAPTCHA badge */
|
||||
.grecaptcha-badge {
|
||||
visibility: hidden !important;
|
||||
@@ -4370,3 +4385,124 @@ body { font-size: 17px; }
|
||||
}
|
||||
|
||||
/* ===== END VISUAL FIXES ===== */
|
||||
|
||||
|
||||
/* ===== VISUAL FIXES 2026-02-11 ===== */
|
||||
|
||||
/* 1. Equal-height capability cards on project-types page */
|
||||
.capabilities-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||
gap: 30px;
|
||||
align-items: stretch;
|
||||
}
|
||||
.capability-card {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
.capability-card p {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
/* 2. Footer contrast improvements — WCAG AA */
|
||||
.footer-section p,
|
||||
.footer-section li,
|
||||
.footer-bottom p,
|
||||
.footer-bottom .company-details,
|
||||
.trust-badge-text span {
|
||||
color: #d1d5db; /* ~9:1 on #151f25 */
|
||||
}
|
||||
.footer-section a {
|
||||
color: #93c5fd; /* light blue — ~7.5:1 on #151f25 */
|
||||
}
|
||||
.footer-section a:hover {
|
||||
color: #bfdbfe;
|
||||
}
|
||||
.footer-section h3 {
|
||||
color: #f3f4f6;
|
||||
}
|
||||
.footer-bottom p,
|
||||
.footer-bottom .company-details {
|
||||
color: #9ca3af; /* muted but still 4.6:1 */
|
||||
}
|
||||
.footer-logo img {
|
||||
filter: brightness(1.2);
|
||||
}
|
||||
|
||||
/* 3. Mobile text sizing & layout */
|
||||
@media (max-width: 768px) {
|
||||
body {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
/* Project-types hero */
|
||||
.project-types-hero h1 {
|
||||
font-size: 1.8rem;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.project-types-hero p {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
/* Capability cards single column on mobile */
|
||||
.capabilities-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* Industry grid single column */
|
||||
.industry-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* Project category headings */
|
||||
.project-category h2 {
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
.project-category h3 {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
.project-description {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
/* Footer content single column (already done but ensure) */
|
||||
.footer-content {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
/* Footer bottom stack */
|
||||
.footer-bottom,
|
||||
.footer-bottom .footer-bottom-content {
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
.project-types-hero h1 {
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
.project-types-hero {
|
||||
padding: 100px 0 40px;
|
||||
}
|
||||
.project-category {
|
||||
padding: 40px 0;
|
||||
}
|
||||
.project-category h2 {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
/* 4. General polish */
|
||||
/* project-types-hero padding now in unified block above */
|
||||
|
||||
/* Tech tags wrapping fix */
|
||||
.tech-tags {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* ===== END VISUAL FIXES 2026-02-11 ===== */
|
||||
|
||||
@@ -12,7 +12,10 @@ $author = "UK Data Services Team";
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
<meta property="og:description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
|
||||
@@ -23,7 +23,10 @@ $read_time = 11;
|
||||
<meta name="keywords" content="<?php echo htmlspecialchars($article_keywords); ?>">
|
||||
<meta name="author" content="<?php echo htmlspecialchars($article_author); ?>">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<link rel="stylesheet" href="../../assets/css/main.css">
|
||||
<link rel="stylesheet" href="../../assets/css/cro-enhancements.css">
|
||||
|
||||
@@ -23,7 +23,10 @@ $read_time = 9;
|
||||
<meta name="keywords" content="<?php echo htmlspecialchars($article_keywords); ?>">
|
||||
<meta name="author" content="<?php echo htmlspecialchars($article_author); ?>">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<link rel="stylesheet" href="../../assets/css/main.css">
|
||||
<link rel="stylesheet" href="../../assets/css/cro-enhancements.css">
|
||||
|
||||
@@ -23,7 +23,10 @@ $read_time = 8;
|
||||
<meta name="keywords" content="<?php echo htmlspecialchars($article_keywords); ?>">
|
||||
<meta name="author" content="<?php echo htmlspecialchars($article_author); ?>">
|
||||
<meta name="robots" content="index, follow">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<!-- Article metadata and other head elements (same as previous template) -->
|
||||
<link rel="stylesheet" href="../../assets/css/main.css">
|
||||
|
||||
@@ -12,7 +12,10 @@ $keywords = "UK data services case studies, client success stories, data transfo
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<meta name="keywords" content="<?php echo htmlspecialchars($keywords); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
|
||||
@@ -1,3 +1,17 @@
|
||||
<?php
|
||||
$current_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
|
||||
$current_path = rtrim($current_path, '/');
|
||||
if ($current_path === '') $current_path = '/';
|
||||
|
||||
function nav_active($href, $current) {
|
||||
// Exact match
|
||||
if ($href === $current) return ' active';
|
||||
// Section match (e.g. /tools/ matches /tools/cost-calculator)
|
||||
$href_trimmed = rtrim($href, '/');
|
||||
if ($href_trimmed !== '' && $href_trimmed !== '/' && strpos($current, $href_trimmed) === 0) return ' active';
|
||||
return '';
|
||||
}
|
||||
?>
|
||||
<!-- Navigation -->
|
||||
<nav class="navbar" id="navbar">
|
||||
<div class="nav-container">
|
||||
@@ -10,14 +24,14 @@
|
||||
</a>
|
||||
</div>
|
||||
<div class="nav-menu" id="nav-menu">
|
||||
<a href="/" class="nav-link">Home</a>
|
||||
<a href="/#services" class="nav-link">Services</a>
|
||||
<a href="/project-types" class="nav-link">Project Types</a>
|
||||
<a href="/about" class="nav-link">About</a>
|
||||
<a href="/tools/" class="nav-link">Free Tools</a>
|
||||
<a href="/blog/" class="nav-link">Blog</a>
|
||||
<a href="/" class="nav-link<?php echo $current_path === '/' ? ' active' : ''; ?>">Home</a>
|
||||
<a href="/#services" class="nav-link<?php echo (strpos($current_path, '/services') === 0) ? ' active' : ''; ?>">Services</a>
|
||||
<a href="/project-types" class="nav-link<?php echo nav_active('/project-types', $current_path); ?>">Project Types</a>
|
||||
<a href="/about" class="nav-link<?php echo nav_active('/about', $current_path); ?>">About</a>
|
||||
<a href="/tools/" class="nav-link<?php echo nav_active('/tools', $current_path); ?>">Free Tools</a>
|
||||
<a href="/blog/" class="nav-link<?php echo nav_active('/blog', $current_path); ?>">Blog</a>
|
||||
<a href="/#contact" class="nav-link">Contact</a>
|
||||
<a href="/quote" class="nav-link cta-button">Request Consultation</a>
|
||||
<a href="/quote" class="nav-link cta-button<?php echo nav_active('/quote', $current_path); ?>">Request Consultation</a>
|
||||
</div>
|
||||
<button class="nav-toggle" id="nav-toggle" aria-expanded="false" aria-controls="nav-menu" aria-label="Toggle navigation menu">
|
||||
<span class="bar"></span>
|
||||
@@ -25,4 +39,4 @@
|
||||
<span class="bar"></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
</nav>
|
||||
|
||||
10
index.php
10
index.php
@@ -111,9 +111,9 @@ $twitter_card_image = "https://ukdataservices.co.uk/assets/images/ukds-main-logo
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Lato:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Resource Preloading for Performance -->
|
||||
<link rel="preload" href="/assets/css/main.min.css?v=1.1.2" as="style">
|
||||
<link rel="preload" href="/assets/css/main.min.css?v=1.1.3" as="style">
|
||||
<link rel="preload" href="/assets/images/ukds-main-logo.webp" as="image">
|
||||
<link rel="preload" href="/assets/js/main.min.js?v=1.1.0" as="script">
|
||||
<link rel="preload" href="/assets/js/main.min.js?v=1.1.1" as="script">
|
||||
|
||||
<!-- Critical CSS for Above-the-Fold -->
|
||||
<style>
|
||||
@@ -137,8 +137,8 @@ $twitter_card_image = "https://ukdataservices.co.uk/assets/images/ukds-main-logo
|
||||
</style>
|
||||
|
||||
<!-- Styles -->
|
||||
<link rel="stylesheet" href="/assets/css/main.min.css?v=1.1.2" media="print" onload="this.media='all'">
|
||||
<noscript><link rel="stylesheet" href="assets/css/main.min.css?v=1.1.2"></noscript>
|
||||
<link rel="stylesheet" href="/assets/css/main.min.css?v=1.1.3" media="print" onload="this.media='all'">
|
||||
<noscript><link rel="stylesheet" href="assets/css/main.min.css?v=1.1.3"></noscript>
|
||||
|
||||
<!-- Enhanced Local SEO Schema -->
|
||||
<script type="application/ld+json">
|
||||
@@ -1298,7 +1298,7 @@ $twitter_card_image = "https://ukdataservices.co.uk/assets/images/ukds-main-logo
|
||||
</footer>
|
||||
|
||||
<!-- Scripts -->
|
||||
<script src="/assets/js/main.min.js?v=1.1.0"></script>
|
||||
<script src="/assets/js/main.min.js?v=1.1.1"></script>
|
||||
|
||||
<!-- Service Worker Registration -->
|
||||
<script>
|
||||
|
||||
@@ -427,7 +427,7 @@ $breadcrumbs = [
|
||||
<span class="stat-label">Birmingham Clients</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="stat-number">99.8%</span>
|
||||
<span class="stat-number">99.5%</span>
|
||||
<span class="stat-label">Accuracy Rate</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
|
||||
@@ -427,7 +427,7 @@ $breadcrumbs = [
|
||||
<span class="stat-label">London Clients</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="stat-number">99.8%</span>
|
||||
<span class="stat-number">99.5%</span>
|
||||
<span class="stat-label">Accuracy Rate</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
|
||||
@@ -427,7 +427,7 @@ $breadcrumbs = [
|
||||
<span class="stat-label">Manchester Clients</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="stat-number">99.8%</span>
|
||||
<span class="stat-number">99.5%</span>
|
||||
<span class="stat-label">Accuracy Rate</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
|
||||
@@ -193,7 +193,7 @@ $breadcrumbs = [
|
||||
|
||||
<style>
|
||||
.quote-hero {
|
||||
padding: 100px 0 30px;
|
||||
padding: 100px 0 30px; /* padding-top overridden by main.css */
|
||||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@@ -12,7 +12,10 @@ $keywords = "data cleaning UK, data validation, duplicate removal, data standard
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<meta name="keywords" content="<?php echo htmlspecialchars($keywords); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
|
||||
@@ -402,7 +402,7 @@ $faqPageName = 'Financial Data Services FAQ';
|
||||
<div class="container">
|
||||
<h1>Financial Data Services & Market Intelligence UK</h1>
|
||||
<p class="hero-subtitle">FCA-aware financial data services for hedge funds, asset managers, and investment firms. Market data extraction, alternative data solutions, and compliant financial intelligence to support your investment strategies.</p>
|
||||
<a href="/quote" class="btn btn-white">Request Consultation</a>
|
||||
<a href="/quote" class="btn btn-primary">Request Consultation</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -381,7 +381,7 @@ $faqPageName = 'Property Data Extraction FAQ';
|
||||
<div class="container">
|
||||
<h1>UK Property Data Extraction Services</h1>
|
||||
<p class="hero-subtitle">Professional property data extraction from Rightmove, Zoopla, OnTheMarket, and other UK property portals. GDPR-compliant property market intelligence for investors, analysts, estate agents, and property developers.</p>
|
||||
<a href="/quote" class="btn btn-white">Get a Free Consultation</a>
|
||||
<a href="/quote" class="btn btn-primary">Get a Free Consultation</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -592,7 +592,7 @@ $breadcrumbs = [
|
||||
<span class="stat-label">Projects Delivered</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="stat-number">99.8%</span>
|
||||
<span class="stat-number">99.7%</span>
|
||||
<span class="stat-label">Data Accuracy</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
@@ -667,7 +667,7 @@ $breadcrumbs = [
|
||||
<p>From simple static pages to complex JavaScript applications, we handle all website technologies. Extract from one site or thousands simultaneously with our scalable infrastructure.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<h3>99.8% Data Accuracy</h3>
|
||||
<h3>99.7% Data Accuracy</h3>
|
||||
<p>Multi-layer validation, automated quality checks, and human review processes ensure the data you receive is accurate, complete, and properly formatted.</p>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
|
||||
@@ -9,7 +9,10 @@ $page_title = "Thank You | UK Data Services";
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo $page_title; ?></title>
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<link rel="stylesheet" href="assets/css/main.css">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="assets/css/main.css">
|
||||
<style>
|
||||
.thank-you-container {
|
||||
max-width: 700px;
|
||||
@@ -127,6 +130,7 @@ $page_title = "Thank You | UK Data Services";
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?php include($_SERVER["DOCUMENT_ROOT"] . "/includes/nav.php"); ?>
|
||||
<div class="thank-you-container">
|
||||
<div class="success-icon">🎉</div>
|
||||
<h1>Thank You for Your Enquiry!</h1>
|
||||
|
||||
@@ -6,7 +6,10 @@
|
||||
<title>Web Scraping Cost Calculator | UK Data Services</title>
|
||||
<meta name="description" content="Estimate your web scraping project cost instantly. Our free calculator helps UK businesses budget for data extraction, pricing intelligence, and market research projects.">
|
||||
<meta name="keywords" content="web scraping cost, data extraction pricing, scraping quote, web scraping calculator UK">
|
||||
<link rel="canonical" href="https://ukdataservices.co.uk/tools/cost-calculator">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="https://ukdataservices.co.uk/tools/cost-calculator">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="Free Web Scraping Cost Calculator">
|
||||
@@ -223,6 +226,7 @@
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?php include($_SERVER["DOCUMENT_ROOT"] . "/includes/nav.php"); ?>
|
||||
<!-- Header would be included here -->
|
||||
|
||||
<div class="calculator-container">
|
||||
|
||||
@@ -10,7 +10,10 @@ $canonical_url = "https://ukdataservices.co.uk/tools/data-converter";
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
<meta property="og:description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
|
||||
@@ -10,7 +10,10 @@ $canonical_url = "https://ukdataservices.co.uk/tools/";
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
<meta property="og:description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
@@ -94,7 +97,7 @@ $canonical_url = "https://ukdataservices.co.uk/tools/";
|
||||
.tools-hero {
|
||||
background: linear-gradient(135deg, #144784 0%, #179e83 100%);
|
||||
color: white;
|
||||
padding: 80px 20px;
|
||||
padding: 80px 20px; /* padding-top overridden by main.css */
|
||||
text-align: center;
|
||||
}
|
||||
.tools-hero h1 { font-size: 2.5em; margin-bottom: 15px; }
|
||||
|
||||
@@ -10,7 +10,10 @@ $canonical_url = "https://ukdataservices.co.uk/tools/robots-analyzer";
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
<meta property="og:description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
|
||||
@@ -10,7 +10,10 @@ $canonical_url = "https://ukdataservices.co.uk/tools/scrapeability-checker";
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo htmlspecialchars($page_title); ?></title>
|
||||
<meta name="description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@100;200;300;400;500;600;700;800;900&family=Lato:wght@100;200;300;400;500;600;700;800;900&display=swap" rel="stylesheet">
|
||||
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
|
||||
|
||||
<meta property="og:title" content="<?php echo htmlspecialchars($page_title); ?>">
|
||||
<meta property="og:description" content="<?php echo htmlspecialchars($page_description); ?>">
|
||||
|
||||
Reference in New Issue
Block a user