array(
'title' => __( 'Metadata', 'ai-o-optimiser' ),
'eyebrow' => __( 'See what needs fixing', 'ai-o-optimiser' ),
'headline' => __( 'Find and fix metadata issues across your whole site.', 'ai-o-optimiser' ),
'cta' => __( 'Get Metadata with Pro', 'ai-o-optimiser' ),
'caption' => __( 'Representative AI-O Optimiser Pro Metadata workspace — figures illustrative.', 'ai-o-optimiser' ),
'card' => __( 'Every page has a headline in Google. Most sites have dozens that are missing, cut off, or identical to each other.', 'ai-o-optimiser' ),
'hook' => __( 'Every page has a headline in Google. Most sites have dozens that are missing, cut off, or identical to each other.', 'ai-o-optimiser' ),
'cost' => __( 'Scan the site, turn findings into a reviewable queue, and use real search evidence to decide what deserves attention first.', 'ai-o-optimiser' ),
'workflow' => array(
__( 'Scan', 'ai-o-optimiser' ),
__( 'Generate', 'ai-o-optimiser' ),
__( 'Review', 'ai-o-optimiser' ),
__( 'Apply', 'ai-o-optimiser' ),
),
'benefits' => array(
array(
'icon' => 'search',
'title' => __( 'Metadata scan', 'ai-o-optimiser' ),
'text' => __( 'Find weak or missing titles, descriptions and focus keywords across the site.', 'ai-o-optimiser' ),
),
array(
'icon' => 'list-view',
'title' => __( 'Review queue', 'ai-o-optimiser' ),
'text' => __( 'Generate, review, approve or retry suggestions through an operational workflow.', 'ai-o-optimiser' ),
),
array(
'icon' => 'chart-line',
'title' => __( 'Search opportunities', 'ai-o-optimiser' ),
'text' => __( 'Use Search Console and Bing evidence to identify pages and queries already close to earning more visibility.', 'ai-o-optimiser' ),
),
array(
'icon' => 'category',
'title' => __( 'Category and content opportunities', 'ai-o-optimiser' ),
'text' => __( 'Keep archives purposeful and surface content opportunities from real search demand.', 'ai-o-optimiser' ),
),
),
),
'schema' => array(
'title' => __( 'Schema', 'ai-o-optimiser' ),
'eyebrow' => __( 'See what Google actually receives', 'ai-o-optimiser' ),
'headline' => __( 'Find schema conflicts on the finished page, then fix the real gaps.', 'ai-o-optimiser' ),
'cta' => __( 'Get Schema with Pro', 'ai-o-optimiser' ),
'caption' => __( 'Representative AI-O Optimiser Pro Schema workspace — figures illustrative.', 'ai-o-optimiser' ),
'card' => __( 'A hidden description of your business sits behind every page. Your SEO plugin, your theme and your store plugin each write their own, and they disagree.', 'ai-o-optimiser' ),
'hook' => __( 'Behind every page is a hidden description of your business that Google and AI assistants read.', 'ai-o-optimiser' ),
'cost' => __( 'Audit the rendered page, identify which provider owns each schema type, fix genuine gaps and verify the public JSON-LD after the change.', 'ai-o-optimiser' ),
'workflow' => array(
__( 'Audit', 'ai-o-optimiser' ),
__( 'Issues', 'ai-o-optimiser' ),
__( 'Fix', 'ai-o-optimiser' ),
__( 'Verify', 'ai-o-optimiser' ),
),
'benefits' => array(
array(
'icon' => 'visibility',
'title' => __( 'Audit finished pages', 'ai-o-optimiser' ),
'text' => __( 'Read the schema Google and AI systems can actually see, not just what a plugin says it generated.', 'ai-o-optimiser' ),
),
array(
'icon' => 'warning',
'title' => __( 'Find conflicts', 'ai-o-optimiser' ),
'text' => __( 'Show where themes, SEO plugins and commerce plugins describe the same page differently.', 'ai-o-optimiser' ),
),
array(
'icon' => 'admin-plugins',
'title' => __( 'Respect native schema', 'ai-o-optimiser' ),
'text' => __( 'Leave correct Rank Math, Yoast, WooCommerce and theme output alone instead of duplicating it.', 'ai-o-optimiser' ),
),
array(
'icon' => 'yes-alt',
'title' => __( 'Verify the fix', 'ai-o-optimiser' ),
'text' => __( 'Recheck the live page after remediation before calling an issue resolved.', 'ai-o-optimiser' ),
),
),
),
'local' => array(
'title' => __( 'Business details (NAP)', 'ai-o-optimiser' ),
'eyebrow' => __( 'Keep business identity consistent', 'ai-o-optimiser' ),
'headline' => __( 'Keep your name, address and phone aligned across the places that matter.', 'ai-o-optimiser' ),
'cta' => __( 'Get NAP management with Pro', 'ai-o-optimiser' ),
'caption' => __( 'The same three details, as three different sources hold them', 'ai-o-optimiser' ),
'card' => __( 'Your name, address and phone drift apart across your site, Google and every directory that lists you. This finds the mismatches and keeps track of them.', 'ai-o-optimiser' ),
'hook' => __( 'Your name, address and phone number - your NAP - appear in your footer, on your contact page, inside your structured data, and on every directory that has ever listed you.', 'ai-o-optimiser' ),
'cost' => __( 'Confirm the business baseline once, compare it with your own site and external listings, then keep a review trail for the differences that need attention.', 'ai-o-optimiser' ),
'workflow' => array(
__( 'Confirm', 'ai-o-optimiser' ),
__( 'Compare', 'ai-o-optimiser' ),
__( 'Review', 'ai-o-optimiser' ),
__( 'Recheck', 'ai-o-optimiser' ),
),
'benefits' => array(
array(
'icon' => 'businessperson',
'title' => __( 'Confirm your baseline', 'ai-o-optimiser' ),
'text' => __( 'Set the business name, address and phone that other sources should match.', 'ai-o-optimiser' ),
),
array(
'icon' => 'location',
'title' => __( 'Compare important sources', 'ai-o-optimiser' ),
'text' => __( 'Review your site, Google Business Profile and the directories that matter to the business.', 'ai-o-optimiser' ),
),
array(
'icon' => 'search',
'title' => __( 'Review mismatches', 'ai-o-optimiser' ),
'text' => __( 'Separate genuine inconsistencies from items that need manual confirmation or call-tracking context.', 'ai-o-optimiser' ),
),
array(
'icon' => 'update',
'title' => __( 'Keep a follow-up trail', 'ai-o-optimiser' ),
'text' => __( 'Record what was confirmed, rejected or could not be verified so drift can be checked again later.', 'ai-o-optimiser' ),
),
),
),
);
}
/** Menu callback for the Metadata workspace. */
public static function render_workspace_metadata() {
self::render_workspace( 'metadata' );
}
/** Menu callback for the Schema workspace. */
public static function render_workspace_schema() {
self::render_workspace( 'schema' );
}
/** Menu callback for the NAP workspace. */
public static function render_workspace_local() {
self::render_workspace( 'local' );
}
/**
* Render a workspace as a preview of what the paid version does.
*
* @param string $key Feature key.
* @return void
*/
public static function render_workspace( $key ) {
$features = self::features();
if ( ! isset( $features[ $key ] ) ) {
return;
}
$feature = $features[ $key ];
?>