diff --git a/403.php b/403.php index 6709b75..a592c95 100644 --- a/403.php +++ b/403.php @@ -18,7 +18,7 @@ header('X-XSS-Protection: 1; mode=block'); font-family: 'Arial', sans-serif; margin: 0; padding: 0; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + background: linear-gradient(135deg, #144784 0%, #179e83 100%); color: white; min-height: 100vh; display: flex; diff --git a/404.php b/404.php index 8ea7e5c..8e2ecf8 100644 --- a/404.php +++ b/404.php @@ -44,7 +44,7 @@ $page_description = "The page you're looking for doesn't exist. Explore our data .error-code { font-size: 8rem; font-weight: 700; - color: #667eea; + color: #144784; margin-bottom: 20px; line-height: 1; } diff --git a/500.php b/500.php index 53cea1d..46a5f67 100644 --- a/500.php +++ b/500.php @@ -21,7 +21,7 @@ error_log('500 Error triggered: ' . date('Y-m-d H:i:s') . ' - IP: ' . $_SERVER[' font-family: 'Arial', sans-serif; margin: 0; padding: 0; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + background: linear-gradient(135deg, #144784 0%, #179e83 100%); color: white; min-height: 100vh; display: flex; diff --git a/META_TAGS_TEMPLATE.php b/META_TAGS_TEMPLATE.php new file mode 100644 index 0000000..fb032ec --- /dev/null +++ b/META_TAGS_TEMPLATE.php @@ -0,0 +1,422 @@ + tag + * Replace variables with page-specific content + * Ensure character limits are respected: + * - Title: 50-60 characters + * - Description: 150-160 characters + */ + +// =========================================================================== +// HOMEPAGE / MAIN PAGES TEMPLATE +// =========================================================================== +?> + + + + + + + + + + + <?php echo htmlspecialchars($page_title); ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<?php echo htmlspecialchars($article_title); ?> | UK Data Services Blog + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<?php echo htmlspecialchars($page_title); ?> + + + + + + + + + + + + + + + + + + + + + + + +<?php echo htmlspecialchars($page_title); ?> + + + + + + + + + + + + + + + + + + + + + + + + + +<?php echo htmlspecialchars($page_title); ?> + + + + + + + + + + + + + + + + + + + + + + + "https://schema.org", + "@type" => "Organization", + "@id" => "https://ukdataservices.co.uk#organization", + "name" => "UK Data Services", + "url" => "https://ukdataservices.co.uk", + "logo" => "https://ukdataservices.co.uk/assets/images/ukds-main-logo.png", + "description" => "Professional web scraping and data analytics services", + "sameAs" => [ + "https://twitter.com/ukdataservices", + "https://www.linkedin.com/company/uk-data-services", + "https://www.facebook.com/ukdataservices" + ] +]; +?> + + + + + + + + + + diff --git a/about.php b/about.php index 7fd4ab2..25a975f 100644 --- a/about.php +++ b/about.php @@ -9,6 +9,12 @@ header('Referrer-Policy: strict-origin-when-cross-origin'); $page_title = "About Us | UK Data Services - Expert Data Solutions Team"; $page_description = "Meet the expert team behind UK Data Services. Learn about our experience, values, and commitment to delivering professional data solutions."; $canonical_url = "https://ukdataservices.co.uk/about"; + +// Breadcrumb navigation +$breadcrumbs = [ + ['url' => '/', 'label' => 'Home'], + ['url' => '', 'label' => 'About Us'] +]; ?> @@ -21,7 +27,22 @@ $canonical_url = "https://ukdataservices.co.uk/about"; - + + + + + + + + + + + + + + + + @@ -110,7 +131,9 @@ $canonical_url = "https://ukdataservices.co.uk/about"; ] } - + + + diff --git a/admin/view-submissions.php b/admin/view-submissions.php index 3c9391c..10c2dd5 100644 --- a/admin/view-submissions.php +++ b/admin/view-submissions.php @@ -26,7 +26,7 @@ if (!isset($_SESSION['authenticated']) || $_SESSION['authenticated'] !== true) { body { font-family: Arial, sans-serif; background: #f5f5f5; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; } .login-form { background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); } input[type="password"] { padding: 10px; width: 200px; margin-bottom: 10px; } - button { padding: 10px 20px; background: #667eea; color: white; border: none; border-radius: 4px; cursor: pointer; } + button { padding: 10px 20px; background: #179e83; color: white; border: none; border-radius: 4px; cursor: pointer; } .error { color: red; margin-bottom: 10px; } @@ -133,7 +133,7 @@ if (isset($_GET['export']) && $_GET['export'] === 'csv') { .stat-value { font-size: 36px; font-weight: bold; - color: #667eea; + color: #179e83; } .stat-label { color: #666; @@ -162,7 +162,7 @@ if (isset($_GET['export']) && $_GET['export'] === 'csv') { font-size: 14px; } .submission-email { - color: #667eea; + color: #179e83; font-weight: 500; } .submission-details { @@ -184,7 +184,7 @@ if (isset($_GET['export']) && $_GET['export'] === 'csv') { } .btn { padding: 10px 20px; - background: #667eea; + background: #179e83; color: white; text-decoration: none; border-radius: 4px; diff --git a/article-fixes-v2.css b/article-fixes-v2.css deleted file mode 100644 index 4b95f58..0000000 --- a/article-fixes-v2.css +++ /dev/null @@ -1,150 +0,0 @@ -/* Fix for Related Articles section formatting */ - -/* Remove any conflicting styles and reset the section */ -.article-footer { - margin-top: 3rem; - padding-top: 2rem; - border-top: 1px solid #e5e7eb; - width: 100%; - clear: both; -} - -.article-footer h2 { - font-size: 1.75rem; - font-weight: 600; - margin-bottom: 1.5rem; - color: #1f2937; - width: 100%; - text-align: left; -} - -/* Force the articles grid to be below the heading */ -.article-footer .articles-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; - width: 100%; - clear: both; -} - -/* Ensure article cards take full width of their grid cell */ -.article-footer .article-card { - background: #ffffff; - border: 1px solid #e5e7eb; - border-radius: 8px; - padding: 1.5rem; - transition: all 0.3s ease; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - width: 100%; - box-sizing: border-box; - display: flex; - flex-direction: column; -} - -.article-footer .article-card:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - border-color: #179e83; -} - -.article-footer .article-card .article-meta { - display: flex; - align-items: center; - gap: 1rem; - margin-bottom: 1rem; - font-size: 0.875rem; - color: #6b7280; -} - -.article-footer .article-card .category { - background: #179e83; - color: white; - padding: 0.25rem 0.75rem; - border-radius: 4px; - font-size: 0.75rem; - font-weight: 500; -} - -.article-footer .article-card h3 { - margin-bottom: 0.75rem; - font-size: 1.125rem; - line-height: 1.4; -} - -.article-footer .article-card h3 a { - color: #1f2937; - text-decoration: none; - transition: color 0.3s ease; -} - -.article-footer .article-card h3 a:hover { - color: #179e83; -} - -.article-footer .article-card p { - color: #6b7280; - font-size: 0.875rem; - line-height: 1.5; - margin-bottom: 1rem; - flex-grow: 1; -} - -/* Fix the nested article-footer class conflict */ -.article-footer .article-card .article-footer { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: auto; - padding-top: 1rem; - border-top: 1px solid #f3f4f6; - font-size: 0.875rem; - margin: 0; - border-top: 1px solid #f3f4f6; -} - -.article-footer .article-card .read-time { - color: #9ca3af; -} - -.article-footer .article-card .read-more { - color: #179e83; - text-decoration: none; - font-weight: 500; - transition: color 0.3s ease; -} - -.article-footer .article-card .read-more:hover { - color: #11725e; -} - -.article-footer .category-links { - display: flex; - gap: 1rem; - justify-content: center; - flex-wrap: wrap; - margin-top: 2rem; - width: 100%; -} - -.article-footer .category-links .btn { - min-width: 200px; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - .article-footer .articles-grid { - grid-template-columns: 1fr; - gap: 1rem; - } - - .article-footer .category-links { - flex-direction: column; - align-items: center; - } - - .article-footer .category-links .btn { - width: 100%; - max-width: 300px; - } -} \ No newline at end of file diff --git a/article-fixes.css b/article-fixes.css deleted file mode 100644 index 9f556a3..0000000 --- a/article-fixes.css +++ /dev/null @@ -1,131 +0,0 @@ -/* Additional CSS for article related sections */ -.article-footer { - margin-top: 3rem; - padding-top: 2rem; - border-top: 1px solid #e5e7eb; -} - -.article-footer h2 { - font-size: 1.75rem; - font-weight: 600; - margin-bottom: 1.5rem; - color: #1f2937; -} - -.articles-grid { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1.5rem; - margin-bottom: 2rem; -} - -.article-card { - background: #ffffff; - border: 1px solid #e5e7eb; - border-radius: 8px; - padding: 1.5rem; - transition: all 0.3s ease; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.article-card:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); - border-color: #179e83; -} - -.article-card .article-meta { - display: flex; - align-items: center; - gap: 1rem; - margin-bottom: 1rem; - font-size: 0.875rem; - color: #6b7280; -} - -.article-card .category { - background: #179e83; - color: white; - padding: 0.25rem 0.75rem; - border-radius: 4px; - font-size: 0.75rem; - font-weight: 500; -} - -.article-card h3 { - margin-bottom: 0.75rem; - font-size: 1.125rem; - line-height: 1.4; -} - -.article-card h3 a { - color: #1f2937; - text-decoration: none; - transition: color 0.3s ease; -} - -.article-card h3 a:hover { - color: #179e83; -} - -.article-card p { - color: #6b7280; - font-size: 0.875rem; - line-height: 1.5; - margin-bottom: 1rem; -} - -.article-card .article-footer { - display: flex; - justify-content: space-between; - align-items: center; - margin-top: auto; - padding-top: 1rem; - border-top: 1px solid #f3f4f6; - font-size: 0.875rem; -} - -.article-card .read-time { - color: #9ca3af; -} - -.article-card .read-more { - color: #179e83; - text-decoration: none; - font-weight: 500; - transition: color 0.3s ease; -} - -.article-card .read-more:hover { - color: #11725e; -} - -.category-links { - display: flex; - gap: 1rem; - justify-content: center; - flex-wrap: wrap; - margin-top: 2rem; -} - -.category-links .btn { - min-width: 200px; -} - -/* Responsive adjustments */ -@media (max-width: 768px) { - .articles-grid { - grid-template-columns: 1fr; - gap: 1rem; - } - - .category-links { - flex-direction: column; - align-items: center; - } - - .category-links .btn { - width: 100%; - max-width: 300px; - } -} \ No newline at end of file diff --git a/assets/css/main.css b/assets/css/main.css index 09f651b..a635b56 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -2032,14 +2032,14 @@ a:focus-visible { } .breadcrumb a { - color: #179e83; + color: #144784; text-decoration: none; font-weight: 500; transition: color 0.3s ease; } .breadcrumb a:hover { - color: #144784; + color: #179e83; text-decoration: underline; } @@ -3619,4 +3619,346 @@ main { .hero-graphic .data-line-6 { animation-delay: 2.5s; +} + +/* ============================================ + UNIFIED COMPONENT STYLES + Added for UI consistency across all pages + ============================================ */ + +/* CSS Variables for Brand Consistency */ +:root { + --color-primary: #179e83; + --color-primary-dark: #11725e; + --color-secondary: #144784; + --color-secondary-light: #1a5a9e; + --color-accent: #1a5a9e; + --gradient-hero: linear-gradient(135deg, #144784 0%, #179e83 100%); + --gradient-hero-alt: linear-gradient(135deg, #144784 0%, #1a5a9e 100%); + --gradient-cta: linear-gradient(135deg, #144784 0%, #179e83 100%); + --color-text: #444444; + --color-text-dark: #1a1a1a; + --color-text-light: #666666; + --color-border: #e1e5e9; + --color-bg-light: #f8f9fa; + --star-color: #f0c14b; +} + +/* Dark Testimonials Section (Homepage) */ +.testimonials-section-dark { + padding: 80px 0; + background: var(--gradient-hero-alt); + color: white; +} + +.testimonials-section-dark .section-header { + text-align: center; + margin-bottom: 50px; +} + +.testimonials-section-dark .section-header h2 { + color: white; + font-size: 2.2rem; + margin-bottom: 16px; +} + +.testimonials-section-dark .section-header p { + color: rgba(255, 255, 255, 0.9); + max-width: 600px; + margin: 0 auto; +} + +.testimonials-dark-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); + gap: 30px; +} + +.testimonial-card-dark { + background: rgba(255, 255, 255, 0.1); + padding: 35px; + border-radius: 12px; + backdrop-filter: blur(10px); + transition: all 0.3s ease; +} + +.testimonial-card-dark:hover { + background: rgba(255, 255, 255, 0.15); + transform: translateY(-5px); +} + +.testimonial-stars { + display: flex; + gap: 5px; + margin-bottom: 20px; +} + +.testimonial-stars .star { + color: var(--star-color); + font-size: 1.3rem; +} + +.testimonial-card-dark .testimonial-text { + font-style: italic; + margin-bottom: 25px; + line-height: 1.7; + font-size: 1.05rem; + color: white; +} + +.testimonial-author-dark { + display: flex; + align-items: center; + gap: 15px; +} + +.testimonial-avatar { + width: 50px; + height: 50px; + background: var(--color-primary); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-weight: 700; + font-size: 1.2rem; + color: white; +} + +.testimonial-author-info .author-name { + font-weight: 600; + margin: 0; + color: white; +} + +.testimonial-author-info .author-role { + opacity: 0.8; + margin: 0; + font-size: 0.9rem; + color: white; +} + +.testimonials-cta { + text-align: center; + margin-top: 40px; +} + +.testimonials-cta .btn-white { + background: white; + color: var(--color-secondary); + padding: 14px 28px; + border-radius: 8px; + text-decoration: none; + font-weight: 600; + display: inline-block; + transition: all 0.3s ease; +} + +.testimonials-cta .btn-white:hover { + transform: translateY(-2px); + box-shadow: 0 4px 16px rgba(255, 255, 255, 0.3); +} + +/* Unified Location Hero (for location pages) */ +.location-hero { + background: var(--gradient-hero); + color: white; + padding: 120px 0 80px; + text-align: center; + position: relative; +} + +.location-hero .hero-content { + max-width: 900px; + margin: 0 auto; + position: relative; + z-index: 2; +} + +.location-hero h1 { + font-size: 3rem; + font-weight: 700; + margin-bottom: 20px; + line-height: 1.2; +} + +.location-hero .hero-subtitle { + font-size: 1.25rem; + margin-bottom: 40px; + opacity: 0.95; + line-height: 1.6; +} + +.location-hero .hero-stats { + display: flex; + justify-content: center; + gap: 40px; + margin: 40px 0; +} + +.location-hero .hero-cta { + display: flex; + justify-content: center; + gap: 20px; + flex-wrap: wrap; +} + +/* Unified Breadcrumb Styling */ +.breadcrumb-nav { + background: var(--color-bg-light); + padding: 15px 0; + border-bottom: 1px solid var(--color-border); +} + +.breadcrumb-nav .breadcrumb-list { + display: flex; + list-style: none; + margin: 0; + padding: 0; + align-items: center; + gap: 8px; + max-width: 1200px; + margin: 0 auto; + padding: 0 20px; +} + +.breadcrumb-nav .breadcrumb-item { + display: flex; + align-items: center; +} + +.breadcrumb-nav .breadcrumb-item:not(:last-child)::after { + content: '>'; + margin-left: 8px; + color: var(--color-text-light); + font-weight: 500; +} + +.breadcrumb-nav .breadcrumb-link { + color: var(--color-secondary); + text-decoration: none; + font-weight: 500; + transition: color 0.3s ease; +} + +.breadcrumb-nav .breadcrumb-link:hover { + color: var(--color-primary); + text-decoration: underline; +} + +.breadcrumb-nav .breadcrumb-current { + color: var(--color-text-light); + font-weight: 500; +} + +/* Unified Card Styles with Top Border Accent */ +.unified-card { + background: white; + padding: 40px; + border-radius: 16px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08); + border: 1px solid #f0f0f0; + border-top: 4px solid var(--color-primary); + transition: all 0.3s ease; +} + +.unified-card:hover { + transform: translateY(-8px); + box-shadow: 0 8px 40px rgba(0, 0, 0, 0.12); +} + +.unified-card h3 { + font-size: 1.5rem; + font-weight: 600; + margin-bottom: 16px; + color: var(--color-text-dark); +} + +.unified-card p { + color: var(--color-text-light); + margin-bottom: 20px; + line-height: 1.6; +} + +/* Unified CTA Section */ +.unified-cta { + padding: 80px 0; + background: var(--gradient-cta); + color: white; + text-align: center; +} + +.unified-cta h2 { + font-size: 2.5rem; + font-weight: 600; + margin-bottom: 20px; + color: white; +} + +.unified-cta p { + font-size: 1.2rem; + margin-bottom: 40px; + opacity: 0.95; + max-width: 600px; + margin-left: auto; + margin-right: auto; +} + +.unified-cta .cta-buttons { + display: flex; + justify-content: center; + gap: 20px; + flex-wrap: wrap; +} + +/* Responsive adjustments for unified components */ +@media (max-width: 768px) { + .testimonials-dark-grid { + grid-template-columns: 1fr; + } + + .testimonials-section-dark { + padding: 60px 0; + } + + .testimonials-section-dark .section-header h2 { + font-size: 1.8rem; + } + + .location-hero h1 { + font-size: 2.2rem; + } + + .location-hero .hero-stats { + flex-direction: column; + gap: 20px; + } + + .location-hero .hero-cta { + flex-direction: column; + align-items: center; + } + + .unified-cta h2 { + font-size: 2rem; + } + + .unified-cta .cta-buttons { + flex-direction: column; + align-items: center; + } +} + +@media (max-width: 480px) { + .testimonial-card-dark { + padding: 25px; + } + + .testimonial-card-dark .testimonial-text { + font-size: 1rem; + } + + .unified-card { + padding: 30px 20px; + } } \ No newline at end of file diff --git a/blog/articles/ai-powered-data-extraction.php b/blog/articles/ai-powered-data-extraction.php index 6a50f0d..5ecd37f 100644 --- a/blog/articles/ai-powered-data-extraction.php +++ b/blog/articles/ai-powered-data-extraction.php @@ -40,8 +40,8 @@ $breadcrumbs = [ - - + + @@ -49,9 +49,9 @@ $breadcrumbs = [ - + - + @@ -66,7 +66,7 @@ $breadcrumbs = [ "@type": "BlogPosting", "headline": "", "description": "", - "image": "https://www.ukdataservices.com", + "image": "https://ukdataservices.co.uk", "datePublished": "T09:00:00+00:00", "dateModified": "T09:00:00+00:00", "author": { @@ -78,12 +78,12 @@ $breadcrumbs = [ "name": "UK Data Services", "logo": { "@type": "ImageObject", - "url": "https://www.ukdataservices.com/assets/images/logo.svg" + "url": "https://ukdataservices.co.uk/assets/images/logo.svg" } }, "mainEntityOfPage": { "@type": "WebPage", - "@id": "https://www.ukdataservices.com/blog/articles/" + "@id": "https://ukdataservices.co.uk/blog/articles/" }, "keywords": "" } @@ -362,6 +362,8 @@ $breadcrumbs = [ + + diff --git a/blog/articles/business-intelligence-consultants-uk-selection-guide.php b/blog/articles/business-intelligence-consultants-uk-selection-guide.php index f3b1a9d..675466f 100644 --- a/blog/articles/business-intelligence-consultants-uk-selection-guide.php +++ b/blog/articles/business-intelligence-consultants-uk-selection-guide.php @@ -1105,6 +1105,8 @@ $modified_date = "2025-08-08"; + + diff --git a/blog/articles/business-intelligence-dashboard-design.php b/blog/articles/business-intelligence-dashboard-design.php index a6f9a2a..d1adb6a 100644 --- a/blog/articles/business-intelligence-dashboard-design.php +++ b/blog/articles/business-intelligence-dashboard-design.php @@ -1208,23 +1208,39 @@ $read_time = 12;

Predictive Analytics for Customer Churn Prevention

Learn how to build and implement predictive models that identify at-risk customers before they leave.

10 min read - + + + + + + + + + + + + + + + - + + + + +
diff --git a/blog/articles/cloud-native-scraping-architecture.php b/blog/articles/cloud-native-scraping-architecture.php index ae61510..7d332b1 100644 --- a/blog/articles/cloud-native-scraping-architecture.php +++ b/blog/articles/cloud-native-scraping-architecture.php @@ -459,21 +459,37 @@ class ProxyManager: Web Scraping

Scraping JavaScript-Heavy Sites: Advanced Techniques

6 min read - + + + + + + + + + + + + + + + - + + + + + diff --git a/blog/articles/competitive-intelligence-roi-metrics.php b/blog/articles/competitive-intelligence-roi-metrics.php index 0a3e6b0..a46bf11 100644 --- a/blog/articles/competitive-intelligence-roi-metrics.php +++ b/blog/articles/competitive-intelligence-roi-metrics.php @@ -711,7 +711,11 @@ $read_time = 8; 9 min read Read → - + + + + +

Designing Effective Business Intelligence Dashboards

@@ -720,7 +724,11 @@ $read_time = 8; 11 min read Read → -
+ + + + +

Financial Services Data Transformation Success Story

@@ -729,7 +737,11 @@ $read_time = 8; 7 min read Read → -
+ + + + + - + + + + +
diff --git a/blog/articles/competitor-price-monitoring-software-build-vs-buy-analysis.php b/blog/articles/competitor-price-monitoring-software-build-vs-buy-analysis.php index 99d6d73..7efcead 100644 --- a/blog/articles/competitor-price-monitoring-software-build-vs-buy-analysis.php +++ b/blog/articles/competitor-price-monitoring-software-build-vs-buy-analysis.php @@ -1318,6 +1318,8 @@ $modified_date = "2025-08-08"; + + diff --git a/blog/articles/data-analytics-companies-london-top-providers-compared.php b/blog/articles/data-analytics-companies-london-top-providers-compared.php index 7c52e9f..97f2393 100644 --- a/blog/articles/data-analytics-companies-london-top-providers-compared.php +++ b/blog/articles/data-analytics-companies-london-top-providers-compared.php @@ -892,6 +892,8 @@ $modified_date = "2025-08-08"; + + diff --git a/blog/articles/data-automation-strategies-uk-businesses.php b/blog/articles/data-automation-strategies-uk-businesses.php index e691ba4..d62810d 100644 --- a/blog/articles/data-automation-strategies-uk-businesses.php +++ b/blog/articles/data-automation-strategies-uk-businesses.php @@ -200,19 +200,31 @@ $og_image = "https://ukdataservices.co.uk/assets/images/icon-automation.svg";

Measuring ROI in Competitive Intelligence: A UK Business Guide

Learn how to quantify the value of competitive intelligence initiatives and demonstrate clear ROI to stakeholders.

Data Analytics - + + + + + + + + + + + + + + +
@@ -227,7 +239,11 @@ $og_image = "https://ukdataservices.co.uk/assets/images/icon-automation.svg";
- + + + + +