'PostalAddress',\n 'streetAddress' => '11 Clarendon street, city center',\n 'addressLocality' => 'Nottingham',\n 'addressRegion' => 'Nottinghamshire',\n 'addressCountry' => 'GB',\n ];\n\n // Opening Hours Specification (3 entries)\n $piece['openingHoursSpecification'] = [\n [\n '@type' => 'OpeningHoursSpecification',\n 'dayOfWeek' => ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],\n 'opens' => '09:00',\n 'closes' => '20:00',\n ],\n [\n '@type' => 'OpeningHoursSpecification',\n 'dayOfWeek' => ['Saturday'],\n 'opens' => '10:00',\n 'closes' => '20:00',\n ],\n [\n '@type' => 'OpeningHoursSpecification',\n 'dayOfWeek' => ['Sunday'],\n 'opens' => '10:00',\n 'closes' => '16:00',\n ],\n ];\n\n // Area Served\n $piece['areaServed'] = [\n 'Nottingham',\n 'Derby',\n 'Leicester',\n 'Loughborough',\n ];\n\n // Maps & SameAs\n $piece['hasMap'] = 'https://maps.app.goo.gl/siTwUny1QT4io9e56';\n $piece['sameAs'] = [\n 'https://maps.app.goo.gl/siTwUny1QT4io9e56',\n ];\n\n // Geo: [OMIT] per rule\n if (isset($piece['geo'])) {\n unset($piece['geo']);\n }\n // Strict rule: aggregateRating / review must NOT exist\n if (isset($piece['aggregateRating'])) {\n unset($piece['aggregateRating']);\n }\n if (isset($piece['review'])) {\n unset($piece['review']);\n }\n }\n }\n unset($piece);\n\n // Step 2 — Service nodes on the service pages\n $current_path = '';\n if (isset($_SERVER['REQUEST_URI'])) {\n $current_path = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');\n }\n\n $service_config = [\n 'services/office-cleaning' => [\n 'name' => 'Office Cleaning',\n 'serviceType' => 'Office Cleaning',\n 'url' => 'https://ccsn.uk/services/office-cleaning/',\n ],\n 'services/after-build-cleans' => [\n 'name' => 'After Build Cleans',\n 'serviceType' => 'Post-Construction Cleaning',\n 'url' => 'https://ccsn.uk/services/after-build-cleans/',\n ],\n 'services/hospitality-sector-cleaning' => [\n 'name' => 'Hospitality Sector Cleaning',\n 'serviceType' => 'Hospitality Cleaning',\n 'url' => 'https://ccsn.uk/services/hospitality-sector-cleaning/',\n ],\n 'services/events-halls' => [\n 'name' => 'Event Hall Cleaning',\n 'serviceType' => 'Event Venue Cleaning',\n 'url' => 'https://ccsn.uk/services/events-halls/',\n ],\n 'services/healthcare-practices' => [\n 'name' => 'Healthcare Practice Cleaning',\n 'serviceType' => 'Healthcare Facility Cleaning',\n 'url' => 'https://ccsn.uk/services/healthcare-practices/',\n ],\n 'services/retail-storefronts' => [\n 'name' => 'Retail & Storefront Cleaning',\n 'serviceType' => 'Retail Cleaning',\n 'url' => 'https://ccsn.uk/services/retail-storefronts/',\n ],\n 'services/short-term-rentals' => [\n 'name' => 'Short Term Rental Cleaning',\n 'serviceType' => 'Short-Term Rental Cleaning',\n 'url' => 'https://ccsn.uk/services/short-term-rentals/',\n ],\n ];\n\n $matched_service = null;\n if (isset($service_config[$current_path])) {\n $matched_service = $service_config[$current_path];\n } elseif (function_exists('is_page')) {\n if (is_page('office-cleaning')) {\n $matched_service = $service_config['services/office-cleaning'];\n } elseif (is_page('after-build-cleans')) {\n $matched_service = $service_config['services/after-build-cleans'];\n } elseif (is_page('hospitality-sector-cleaning')) {\n $matched_service = $service_config['services/hospitality-sector-cleaning'];\n } elseif (is_page('events-halls')) {\n $matched_service = $service_config['services/events-halls'];\n } elseif (is_page('healthcare-practices')) {\n $matched_service = $service_config['services/healthcare-practices'];\n } elseif (is_page('retail-storefronts')) {\n $matched_service = $service_config['services/retail-storefronts'];\n } elseif (is_page('short-term-rentals')) {\n $matched_service = $service_config['services/short-term-rentals'];\n }\n }\n\n if ($matched_service) {\n $service_node = [\n '@type' => 'Service',\n '@id' => $matched_service['url'] . '#service',\n 'name' => $matched_service['name'],\n 'serviceType' => $matched_service['serviceType'],\n 'url' => $matched_service['url'],\n 'provider' => [\n '@id' => $org_id,\n ],\n 'areaServed' => [\n 'Nottingham',\n 'Derby',\n 'Leicester',\n 'Loughborough',\n ],\n ];\n\n $already_present = false;\n foreach ($graph as $node) {\n if (isset($node['@type']) && $node['@type'] === 'Service' && isset($node['url']) && $node['url'] === $matched_service['url']) {\n $already_present = true;\n break;\n }\n }\n\n if (!$already_present) {\n $graph[] = $service_node;\n }\n }\n\n return $graph;\n}\n https://ccsn.uk/post-sitemap.xml 2026-10-31T11:18:44+00:00 https://ccsn.uk/page-sitemap.xml 2026-10-25T10:57:41+00:00 https://ccsn.uk/category-sitemap.xml 2026-10-31T11:18:44+00:00 https://ccsn.uk/post_tag-sitemap.xml 2026-08-31T10:25:07+00:00 https://ccsn.uk/author-sitemap.xml 2026-08-31T10:19:21+00:00