199 lines
6.6 KiB
PHP
199 lines
6.6 KiB
PHP
<?php
|
|
/**
|
|
* Article Schema Component
|
|
* Generates Article structured data for blog posts
|
|
*
|
|
* Usage:
|
|
* $articleData = [
|
|
* 'title' => 'Article Title',
|
|
* 'description' => 'Article description...',
|
|
* 'datePublished' => '2024-01-15',
|
|
* 'dateModified' => '2024-01-20',
|
|
* 'authorName' => 'John Smith',
|
|
* 'imageUrl' => 'https://example.com/image.jpg',
|
|
* 'articleUrl' => 'https://example.com/article'
|
|
* ];
|
|
* include($_SERVER['DOCUMENT_ROOT'] . '/includes/schema/article-schema.php');
|
|
*/
|
|
|
|
/**
|
|
* Generate Article Schema JSON-LD
|
|
*
|
|
* @param string $title Article title
|
|
* @param string $description Article description/excerpt
|
|
* @param string $datePublished Publication date (Y-m-d format)
|
|
* @param string $dateModified Last modified date (Y-m-d format)
|
|
* @param string $authorName Author's name
|
|
* @param string $imageUrl Featured image URL
|
|
* @param string $articleUrl Canonical article URL
|
|
* @param string $category Optional article category
|
|
* @param array $keywords Optional array of keywords
|
|
* @return string JSON-LD script tag
|
|
*/
|
|
function generateArticleSchema($title, $description, $datePublished, $dateModified, $authorName, $imageUrl, $articleUrl, $category = null, $keywords = []) {
|
|
$baseUrl = 'https://ukaiautomation.co.uk';
|
|
|
|
$schema = [
|
|
'@context' => 'https://schema.org',
|
|
'@type' => 'Article',
|
|
'@id' => $articleUrl . '#article',
|
|
'headline' => $title,
|
|
'description' => $description,
|
|
'url' => $articleUrl,
|
|
'datePublished' => $datePublished . 'T09:00:00+00:00',
|
|
'dateModified' => $dateModified . 'T09:00:00+00:00',
|
|
'author' => [
|
|
'@type' => 'Person',
|
|
'name' => $authorName,
|
|
'url' => $baseUrl . '/about'
|
|
],
|
|
'publisher' => [
|
|
'@type' => 'Organization',
|
|
'@id' => $baseUrl . '/#organization',
|
|
'name' => 'UK AI Automation',
|
|
'logo' => [
|
|
'@type' => 'ImageObject',
|
|
'url' => $baseUrl . '/assets/images/ukds-main-logo.png'
|
|
]
|
|
],
|
|
'image' => [
|
|
'@type' => 'ImageObject',
|
|
'url' => $imageUrl,
|
|
'width' => 1200,
|
|
'height' => 630
|
|
],
|
|
'mainEntityOfPage' => [
|
|
'@type' => 'WebPage',
|
|
'@id' => $articleUrl
|
|
],
|
|
'isPartOf' => [
|
|
'@type' => 'Blog',
|
|
'@id' => $baseUrl . '/blog/#blog',
|
|
'name' => 'UK AI Automation Blog',
|
|
'publisher' => [
|
|
'@id' => $baseUrl . '/#organization'
|
|
]
|
|
],
|
|
'inLanguage' => 'en-GB'
|
|
];
|
|
|
|
// Add category if provided
|
|
if ($category) {
|
|
$schema['articleSection'] = $category;
|
|
}
|
|
|
|
// Add keywords if provided
|
|
if (!empty($keywords)) {
|
|
$schema['keywords'] = implode(', ', $keywords);
|
|
}
|
|
|
|
// Add word count estimate based on description length (rough estimate)
|
|
$schema['wordCount'] = max(500, strlen($description) * 5);
|
|
|
|
return '<script type="application/ld+json">' . "\n" .
|
|
json_encode($schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n" .
|
|
'</script>';
|
|
}
|
|
|
|
/**
|
|
* Generate BlogPosting Schema (more specific than Article)
|
|
*/
|
|
function generateBlogPostingSchema($title, $description, $datePublished, $dateModified, $authorName, $imageUrl, $articleUrl, $category = null, $keywords = []) {
|
|
$baseUrl = 'https://ukaiautomation.co.uk';
|
|
|
|
$schema = [
|
|
'@context' => 'https://schema.org',
|
|
'@type' => 'BlogPosting',
|
|
'@id' => $articleUrl . '#blogposting',
|
|
'headline' => $title,
|
|
'description' => $description,
|
|
'url' => $articleUrl,
|
|
'datePublished' => $datePublished . 'T09:00:00+00:00',
|
|
'dateModified' => $dateModified . 'T09:00:00+00:00',
|
|
'author' => [
|
|
'@type' => 'Person',
|
|
'name' => $authorName,
|
|
'url' => $baseUrl . '/about',
|
|
'worksFor' => [
|
|
'@type' => 'Organization',
|
|
'@id' => $baseUrl . '/#organization'
|
|
]
|
|
],
|
|
'publisher' => [
|
|
'@type' => 'Organization',
|
|
'@id' => $baseUrl . '/#organization',
|
|
'name' => 'UK AI Automation',
|
|
'logo' => [
|
|
'@type' => 'ImageObject',
|
|
'url' => $baseUrl . '/assets/images/ukds-main-logo.png',
|
|
'width' => 300,
|
|
'height' => 100
|
|
]
|
|
],
|
|
'image' => [
|
|
'@type' => 'ImageObject',
|
|
'url' => $imageUrl,
|
|
'width' => 1200,
|
|
'height' => 630
|
|
],
|
|
'mainEntityOfPage' => [
|
|
'@type' => 'WebPage',
|
|
'@id' => $articleUrl
|
|
],
|
|
'isPartOf' => [
|
|
'@type' => 'Blog',
|
|
'@id' => $baseUrl . '/blog/#blog',
|
|
'name' => 'UK AI Automation Blog'
|
|
],
|
|
'inLanguage' => 'en-GB'
|
|
];
|
|
|
|
if ($category) {
|
|
$schema['articleSection'] = $category;
|
|
}
|
|
|
|
if (!empty($keywords)) {
|
|
$schema['keywords'] = implode(', ', $keywords);
|
|
}
|
|
|
|
return '<script type="application/ld+json">' . "\n" .
|
|
json_encode($schema, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n" .
|
|
'</script>';
|
|
}
|
|
|
|
/**
|
|
* Author configurations for the site
|
|
*/
|
|
$authorProfiles = [
|
|
'ukaiautomation-team' => [
|
|
'name' => 'UK AI Automation Team',
|
|
'role' => 'Data Intelligence Experts',
|
|
'description' => 'Our team of certified data professionals and engineers providing expert guidance on AI automation, data pipelines, and business intelligence.'
|
|
],
|
|
'technical-team' => [
|
|
'name' => 'UK AI Automation Technical Team',
|
|
'role' => 'Senior Data Engineers',
|
|
'description' => 'Expert engineers specializing in web scraping technologies, data pipelines, and enterprise data solutions.'
|
|
],
|
|
'compliance-team' => [
|
|
'name' => 'UK AI Automation Compliance Team',
|
|
'role' => 'Data Protection Specialists',
|
|
'description' => 'Specialists in GDPR compliance, data protection, and regulatory requirements for data collection.'
|
|
]
|
|
];
|
|
|
|
// If $articleData is set, output the schema automatically
|
|
if (isset($articleData) && is_array($articleData)) {
|
|
echo generateArticleSchema(
|
|
$articleData['title'],
|
|
$articleData['description'],
|
|
$articleData['datePublished'],
|
|
$articleData['dateModified'] ?? $articleData['datePublished'],
|
|
$articleData['authorName'] ?? 'UK AI Automation Team',
|
|
$articleData['imageUrl'],
|
|
$articleData['articleUrl'],
|
|
$articleData['category'] ?? null,
|
|
$articleData['keywords'] ?? []
|
|
);
|
|
}
|