SEO: add BlogPosting schema, fix HTML heads, clean stale content

- Create includes/blog-article-head.php with full HTML head + BlogPosting
  JSON-LD schema (Organization author, OG/Twitter tags)
- Wire blog-article-head.php into all 6 blog articles (were missing DOCTYPE/head)
- Rewrite blog/search.php: only real articles, standard includes, noindex
- Simplify author-bio.php: remove invented fictional authors, org entry only
- Sitemap: add lastmod 2026-03-21, add case-studies and faq URLs
- Fix faq.php page title (redundant AI Automation duplicate removed)
This commit is contained in:
Peter Foster
2026-03-21 12:51:04 +00:00
parent f21e80793b
commit 63fb1fd099
11 changed files with 225 additions and 537 deletions

View File

@@ -1,150 +1,39 @@
<?php
/**
* Author Bio Component
* Include this in blog articles to display author information with E-E-A-T signals
*
* Required variables:
* - $article_author (string): Author name
*
* Optional variables:
* - $author_role (string): Author's job title
* - $author_bio (string): Short bio description
* - $author_linkedin (string): LinkedIn URL
* Displays organisation author credit for E-E-A-T purposes.
*/
// Author database with credentials and bios
$authors = [
'UK AI Automation Editorial Team' => [
'role' => 'Data Intelligence Experts',
'bio' => 'Our editorial team comprises data scientists, engineers, and industry analysts with over 50 combined years of experience in AI automation, data pipelines, and business intelligence across UK industries.',
'linkedin' => null,
'expertise' => ['AI Automation', 'Data Analytics', 'Business Intelligence', 'GDPR Compliance'],
'image' => '/assets/images/authors/team-avatar.svg'
],
'James Wilson' => [
'role' => 'Senior Data Architect',
'bio' => 'James is a Senior Data Architect with 12+ years of experience in enterprise AI Automation and business intelligence. He holds a Master\'s degree in Computer Science from Imperial College London and is an AWS Solutions Architect Professional.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['Enterprise Architecture', 'AI Automation', 'Cloud Solutions', 'Data Pipelines'],
'image' => '/assets/images/authors/james-wilson.svg'
],
'Dr. Rachel Singh' => [
'role' => 'Lead Data Scientist',
'bio' => 'Dr. Rachel Singh leads our data science team with expertise in machine learning and AI-powered data extraction. She holds a PhD in Computer Science from University of Cambridge and has published research on NLP and intelligent document processing.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['Machine Learning', 'NLP', 'AI', 'Computer Vision'],
'image' => '/assets/images/authors/rachel-singh.svg'
],
'Michael Thompson' => [
'role' => 'Technical Lead - AI Automation',
'bio' => 'Michael specialises in large-scale AI automation infrastructure and has designed data extraction systems for FTSE 100 companies.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['AI Automation', 'Distributed Systems', 'LLMs', 'Data Pipelines'],
'image' => '/assets/images/authors/michael-thompson.svg'
],
'Sarah Chen' => [
'role' => 'Compliance & Data Protection Officer',
'bio' => 'Sarah is a certified Data Protection Officer (GDPR-P) with extensive experience in UK and EU data regulations. She ensures all our data collection practices meet the highest compliance standards.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['GDPR', 'Data Protection', 'Compliance', 'Privacy'],
'image' => '/assets/images/authors/sarah-chen.svg'
],
'David Martinez' => [
'role' => 'Business Intelligence Consultant',
'bio' => 'David is a certified Tableau and Power BI consultant with 8+ years of experience helping UK businesses transform raw data into actionable insights. He specializes in dashboard design and data visualization.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['Tableau', 'Power BI', 'Data Visualization', 'BI Strategy'],
'image' => '/assets/images/authors/david-martinez.svg'
],
'Alex Kumar' => [
'role' => 'Senior AI Engineer',
'bio' => 'Alex specialises in data pipeline architecture and workflow orchestration, building production-grade pipelines for UK data teams.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['AI Automation', 'Airflow', 'Data Pipelines', 'LLMs'],
'image' => '/assets/images/authors/team-avatar.svg'
],
'David Thompson' => [
'role' => 'Data Protection & International Compliance Lead',
'bio' => 'David Thompson specialises in cross-border data transfer compliance, advising UK businesses on GDPR, UK GDPR, SCCs and adequacy decisions. He has over 10 years of experience in international data law.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['GDPR', 'Data Transfers', 'SCCs', 'UK GDPR'],
'image' => '/assets/images/authors/team-avatar.svg'
],
'Emily Roberts' => [
'role' => 'Data Subject Rights Specialist',
'bio' => 'Emily Roberts is a certified data protection practitioner with expertise in operationalising data subject rights under UK GDPR. She has helped over 40 UK organisations build compliant DSR workflows.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['GDPR', 'Data Subject Rights', 'Privacy', 'Compliance'],
'image' => '/assets/images/authors/team-avatar.svg'
],
'Michael Chen' => [
'role' => 'Data Engineer & Manufacturing Analytics Specialist',
'bio' => 'Michael Chen is a data engineer with deep expertise in manufacturing analytics and supply chain data transformation. He has designed data systems for UK manufacturers across automotive, FMCG and industrial sectors.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['Data Engineering', 'Manufacturing Analytics', 'ETL', 'Supply Chain'],
'image' => '/assets/images/authors/team-avatar.svg'
],
'Sarah Mitchell' => [
'role' => 'Fintech Data Analyst',
'bio' => 'Sarah Mitchell is a fintech data analyst with 7 years of experience in UK financial services market intelligence. She specialises in regulatory data analysis, open banking datasets and fintech competitive intelligence.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['Fintech', 'Market Analysis', 'Open Banking', 'Financial Data'],
'image' => '/assets/images/authors/team-avatar.svg'
],
'Emma Richardson' => [
'role' => 'Industry Analyst',
'bio' => 'Emma covers UK market trends and industry analysis with a focus on retail, property, and e-commerce sectors. She has over 6 years of experience in competitive intelligence and market research.',
'linkedin' => 'https://linkedin.com/company/ukaiautomation',
'expertise' => ['Market Research', 'Competitive Intelligence', 'E-commerce', 'Retail Analytics'],
'image' => '/assets/images/authors/emma-richardson.svg'
]
$author_info = [
'name' => 'UK AI Automation',
'role' => 'AI Automation Consultancy',
'bio' => 'UK AI Automation builds document extraction pipelines, research automation tools, and custom AI agents for UK law firms and management consultancies.',
'linkedin' => 'https://www.linkedin.com/company/ukaiautomation',
'expertise' => ['AI Automation', 'Document Extraction', 'Research Automation', 'LLMs', 'GDPR Compliance'],
'image' => '/assets/images/ukaiautomation-logo.svg'
];
// Get author info
$author_name = isset($article_author) ? $article_author : 'UK AI Automation Editorial Team';
$author_info = isset($authors[$author_name]) ? $authors[$author_name] : $authors['UK AI Automation Editorial Team'];
?>
<div class="author-bio" itemscope itemtype="https://schema.org/Person">
<div class="author-bio" itemscope itemtype="https://schema.org/Organization">
<div class="bio-avatar">
<img src="<?php echo htmlspecialchars($author_info['image']); ?>"
alt="<?php echo htmlspecialchars($author_name); ?>"
loading="lazy"
width="80"
height="80"
itemprop="image">
alt="UK AI Automation"
loading="lazy" width="80" height="80" itemprop="logo">
</div>
<div class="bio-info">
<h4 class="bio-header">About the Author</h4>
<p class="bio-name" itemprop="name"><?php echo htmlspecialchars($author_name); ?></p>
<p class="bio-role" itemprop="jobTitle"><?php echo htmlspecialchars($author_info['role']); ?></p>
<p class="bio-description" itemprop="description"><?php echo htmlspecialchars($author_info['bio']); ?></p>
<p class="bio-name" itemprop="name"><?php echo htmlspecialchars($author_info['name']); ?></p>
<p class="bio-role" itemprop="description"><?php echo htmlspecialchars($author_info['role']); ?></p>
<p class="bio-description"><?php echo htmlspecialchars($author_info['bio']); ?></p>
<div class="bio-expertise">
<span class="expertise-label">Expertise:</span>
<?php foreach ($author_info['expertise'] as $skill): ?>
<span class="expertise-tag"><?php echo htmlspecialchars($skill); ?></span>
<?php endforeach; ?>
</div>
<?php if ($author_info['linkedin']): ?>
<div class="bio-social">
<a href="<?php echo htmlspecialchars($author_info['linkedin']); ?>"
target="_blank"
rel="noopener noreferrer"
itemprop="sameAs"
class="linkedin-link">
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
<path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z"/>
</svg>
target="_blank" rel="noopener noreferrer" itemprop="sameAs" class="linkedin-link">
Connect on LinkedIn
</a>
</div>
<?php endif; ?>
</div>
</div>

View File

@@ -0,0 +1,104 @@
<?php
/**
* Blog Article Head
* Outputs full HTML head + BlogPosting schema for blog articles
* Requires: $page_title, $page_description, $canonical_url, $article array
*/
$og_image = 'https://ukaiautomation.co.uk/assets/images/ukaiautomation-og.png';
$base_url = 'https://ukaiautomation.co.uk';
$date_pub = $article['date'] ?? date('Y-m-d');
$category = $article['category'] ?? 'AI Automation';
$schema = [
'@context' => 'https://schema.org',
'@type' => 'BlogPosting',
'@id' => $canonical_url . '#blogposting',
'headline' => $article['title'] ?? $page_title,
'description' => $page_description,
'url' => $canonical_url,
'datePublished' => $date_pub . 'T09:00:00+00:00',
'dateModified' => $date_pub . 'T09:00:00+00:00',
'author' => [
'@type' => 'Organization',
'@id' => $base_url . '/#organization',
'name' => 'UK AI Automation',
'url' => $base_url
],
'publisher' => [
'@type' => 'Organization',
'@id' => $base_url . '/#organization',
'name' => 'UK AI Automation',
'logo' => [
'@type' => 'ImageObject',
'url' => $base_url . '/assets/images/ukaiautomation-logo.svg',
'width' => 300,
'height' => 100
]
],
'image' => [
'@type' => 'ImageObject',
'url' => $og_image,
'width' => 1200,
'height' => 630
],
'mainEntityOfPage'=> [
'@type' => 'WebPage',
'@id' => $canonical_url
],
'isPartOf' => [
'@type' => 'Blog',
'@id' => $base_url . '/blog/#blog',
'name' => 'UK AI Automation Blog'
],
'articleSection' => $category,
'inLanguage' => 'en-GB'
];
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<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); ?>">
<meta name="author" content="UK AI Automation">
<meta name="robots" content="index, follow">
<link rel="canonical" href="<?php echo htmlspecialchars($canonical_url); ?>">
<!-- Open Graph -->
<meta property="og:type" content="article">
<meta property="og:url" content="<?php echo htmlspecialchars($canonical_url); ?>">
<meta property="og:title" content="<?php echo htmlspecialchars($article['title'] ?? $page_title); ?>">
<meta property="og:description" content="<?php echo htmlspecialchars($page_description); ?>">
<meta property="og:image" content="<?php echo htmlspecialchars($og_image); ?>">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:site_name" content="UK AI Automation">
<meta property="og:locale" content="en_GB">
<meta property="article:published_time" content="<?php echo htmlspecialchars($date_pub); ?>T09:00:00+00:00">
<meta property="article:section" content="<?php echo htmlspecialchars($category); ?>">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@ukaiautomation">
<meta name="twitter:title" content="<?php echo htmlspecialchars($article['title'] ?? $page_title); ?>">
<meta name="twitter:description" content="<?php echo htmlspecialchars($page_description); ?>">
<meta name="twitter:image" content="<?php echo htmlspecialchars($og_image); ?>">
<!-- BlogPosting Schema -->
<script type="application/ld+json">
<?php echo json_encode($schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); ?>
</script>
<!-- Favicon -->
<link rel="icon" type="image/svg+xml" href="/assets/images/favicon.svg">
<!-- Fonts -->
<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@300;400;500;600;700&family=Lato:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<!-- Styles -->
<link rel="stylesheet" href="/assets/css/main.css?v=20260321">
</head>
<body>