Changeset 3694415
- Timestamp:
- 09/14/2026 04:06:06 AM (7 weeks ago)
- Location:
- miniorange-ai-visibility
- Files:
-
- 218 added
- 7 edited
-
tags/1.8.0 (added)
-
tags/1.8.0/assets (added)
-
tags/1.8.0/assets/css (added)
-
tags/1.8.0/assets/css/admin.css (added)
-
tags/1.8.0/assets/css/contact-us.css (added)
-
tags/1.8.0/assets/css/dashboard-widget.css (added)
-
tags/1.8.0/assets/css/deactivation-feedback.css (added)
-
tags/1.8.0/assets/css/index.php (added)
-
tags/1.8.0/assets/images (added)
-
tags/1.8.0/assets/images/companies (added)
-
tags/1.8.0/assets/images/companies/allen-institute.svg (added)
-
tags/1.8.0/assets/images/companies/amazon.svg (added)
-
tags/1.8.0/assets/images/companies/anthropic.svg (added)
-
tags/1.8.0/assets/images/companies/apple.svg (added)
-
tags/1.8.0/assets/images/companies/bytedance.svg (added)
-
tags/1.8.0/assets/images/companies/cloudflare.svg (added)
-
tags/1.8.0/assets/images/companies/cognition-ai.svg (added)
-
tags/1.8.0/assets/images/companies/cohere.svg (added)
-
tags/1.8.0/assets/images/companies/common-crawl.svg (added)
-
tags/1.8.0/assets/images/companies/deepseek.svg (added)
-
tags/1.8.0/assets/images/companies/diffbot.svg (added)
-
tags/1.8.0/assets/images/companies/duckduckgo.svg (added)
-
tags/1.8.0/assets/images/companies/firecrawl.svg (added)
-
tags/1.8.0/assets/images/companies/google.svg (added)
-
tags/1.8.0/assets/images/companies/huawei.svg (added)
-
tags/1.8.0/assets/images/companies/iask-ai.svg (added)
-
tags/1.8.0/assets/images/companies/imagesift.svg (added)
-
tags/1.8.0/assets/images/companies/index.php (added)
-
tags/1.8.0/assets/images/companies/kagi.svg (added)
-
tags/1.8.0/assets/images/companies/laion.svg (added)
-
tags/1.8.0/assets/images/companies/linkedin.svg (added)
-
tags/1.8.0/assets/images/companies/meta.svg (added)
-
tags/1.8.0/assets/images/companies/microsoft.svg (added)
-
tags/1.8.0/assets/images/companies/mistral-ai.svg (added)
-
tags/1.8.0/assets/images/companies/moonshot-ai.svg (added)
-
tags/1.8.0/assets/images/companies/nict.svg (added)
-
tags/1.8.0/assets/images/companies/openai.svg (added)
-
tags/1.8.0/assets/images/companies/perplexity.svg (added)
-
tags/1.8.0/assets/images/companies/phind.svg (added)
-
tags/1.8.0/assets/images/companies/sb-intuitions.svg (added)
-
tags/1.8.0/assets/images/companies/timpi.svg (added)
-
tags/1.8.0/assets/images/companies/webz-io.svg (added)
-
tags/1.8.0/assets/images/companies/xai.svg (added)
-
tags/1.8.0/assets/images/companies/yandex.svg (added)
-
tags/1.8.0/assets/images/companies/you-com.svg (added)
-
tags/1.8.0/assets/images/data-management.svg (added)
-
tags/1.8.0/assets/images/index.php (added)
-
tags/1.8.0/assets/images/logo.svg (added)
-
tags/1.8.0/assets/images/miniorange-logo.png (added)
-
tags/1.8.0/assets/images/miniorange-menu.png (added)
-
tags/1.8.0/assets/js (added)
-
tags/1.8.0/assets/js/admin.js (added)
-
tags/1.8.0/assets/js/ai-inventory.js (added)
-
tags/1.8.0/assets/js/analytics.js (added)
-
tags/1.8.0/assets/js/app-shell.js (added)
-
tags/1.8.0/assets/js/chart.min.js (added)
-
tags/1.8.0/assets/js/contact-us.js (added)
-
tags/1.8.0/assets/js/crawler-tracker.js (added)
-
tags/1.8.0/assets/js/deactivation-feedback.js (added)
-
tags/1.8.0/assets/js/discoverability.js (added)
-
tags/1.8.0/assets/js/index.php (added)
-
tags/1.8.0/assets/js/mcp-control.js (added)
-
tags/1.8.0/assets/js/mcp-tracker.js (added)
-
tags/1.8.0/assets/js/reports.js (added)
-
tags/1.8.0/assets/js/settings.js (added)
-
tags/1.8.0/assets/js/side-nav.js (added)
-
tags/1.8.0/assets/js/visibility.js (added)
-
tags/1.8.0/class-enqueue-scripts.php (added)
-
tags/1.8.0/includes (added)
-
tags/1.8.0/includes/autoloader.php (added)
-
tags/1.8.0/includes/common (added)
-
tags/1.8.0/includes/common/class-installer.php (added)
-
tags/1.8.0/includes/common/class-loader.php (added)
-
tags/1.8.0/includes/common/constants (added)
-
tags/1.8.0/includes/common/constants/class-plugin-constants.php (added)
-
tags/1.8.0/includes/common/constants/index.php (added)
-
tags/1.8.0/includes/common/controllers (added)
-
tags/1.8.0/includes/common/controllers/class-ai-inventory-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-analytics-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-contact-us-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-crawler-control-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-deactivation-feedback-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-discoverability-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-indexnow-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-mcp-control-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-mcp-tracker-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-reports-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-rest-api-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-settings-controller.php (added)
-
tags/1.8.0/includes/common/controllers/class-visibility-controller.php (added)
-
tags/1.8.0/includes/common/controllers/index.php (added)
-
tags/1.8.0/includes/common/data (added)
-
tags/1.8.0/includes/common/data/ai-referral-sources.php (added)
-
tags/1.8.0/includes/common/data/builtin-crawlers.php (added)
-
tags/1.8.0/includes/common/handlers (added)
-
tags/1.8.0/includes/common/handlers/class-ai-inventory-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-analytics-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-contact-us-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-crawler-control-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-deactivation-feedback-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-discoverability-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-mcp-control-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-mcp-tracker-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-reports-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-settings-handler.php (added)
-
tags/1.8.0/includes/common/handlers/class-visibility-handler.php (added)
-
tags/1.8.0/includes/common/handlers/index.php (added)
-
tags/1.8.0/includes/common/hooks (added)
-
tags/1.8.0/includes/common/hooks/class-abilities-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-admin-assets-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-admin-menu-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-ai-inventory-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-ai-meta-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-analytics-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-contact-us-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-crawler-control-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-crawler-tracking-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-dashboard-widget-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-deactivation-feedback-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-discoverability-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-indexnow-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-mcp-control-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-mcp-tracker-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-referral-tracking-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-reports-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-rest-api-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-settings-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-visibility-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/class-woocommerce-hooks.php (added)
-
tags/1.8.0/includes/common/hooks/index.php (added)
-
tags/1.8.0/includes/common/models (added)
-
tags/1.8.0/includes/common/models/class-ai-meta-model.php (added)
-
tags/1.8.0/includes/common/models/class-blocked-crawler-model.php (added)
-
tags/1.8.0/includes/common/models/class-crawler-log-model.php (added)
-
tags/1.8.0/includes/common/models/class-indexnow-log-model.php (added)
-
tags/1.8.0/includes/common/models/class-mcp-request-model.php (added)
-
tags/1.8.0/includes/common/models/class-referral-log-model.php (added)
-
tags/1.8.0/includes/common/models/class-visibility-scan-model.php (added)
-
tags/1.8.0/includes/common/models/index.php (added)
-
tags/1.8.0/includes/common/services (added)
-
tags/1.8.0/includes/common/services/class-abilities-service.php (added)
-
tags/1.8.0/includes/common/services/class-ai-inventory-service.php (added)
-
tags/1.8.0/includes/common/services/class-ai-meta-service.php (added)
-
tags/1.8.0/includes/common/services/class-analytics-service.php (added)
-
tags/1.8.0/includes/common/services/class-content-sanitizer.php (added)
-
tags/1.8.0/includes/common/services/class-content-type-service.php (added)
-
tags/1.8.0/includes/common/services/class-crawler-blocker-service.php (added)
-
tags/1.8.0/includes/common/services/class-crawler-detector-service.php (added)
-
tags/1.8.0/includes/common/services/class-dashboard-widget.php (added)
-
tags/1.8.0/includes/common/services/class-email-alerts-service.php (added)
-
tags/1.8.0/includes/common/services/class-indexnow-service.php (added)
-
tags/1.8.0/includes/common/services/class-json-ld-service.php (added)
-
tags/1.8.0/includes/common/services/class-llms-txt-service.php (added)
-
tags/1.8.0/includes/common/services/class-markdown-service.php (added)
-
tags/1.8.0/includes/common/services/class-mcp-control-service.php (added)
-
tags/1.8.0/includes/common/services/class-mcp-server-service.php (added)
-
tags/1.8.0/includes/common/services/class-mcp-tracker-service.php (added)
-
tags/1.8.0/includes/common/services/class-referral-detector-service.php (added)
-
tags/1.8.0/includes/common/services/class-reports-service.php (added)
-
tags/1.8.0/includes/common/services/class-robots-txt-service.php (added)
-
tags/1.8.0/includes/common/services/class-settings-service.php (added)
-
tags/1.8.0/includes/common/services/class-visibility-checks-service.php (added)
-
tags/1.8.0/includes/common/services/class-visibility-quick-fix-service.php (added)
-
tags/1.8.0/includes/common/services/class-visibility-score-service.php (added)
-
tags/1.8.0/includes/common/services/class-woocommerce-geo-service.php (added)
-
tags/1.8.0/includes/common/services/index.php (added)
-
tags/1.8.0/includes/common/utils (added)
-
tags/1.8.0/includes/common/utils/class-utils.php (added)
-
tags/1.8.0/includes/common/utils/index.php (added)
-
tags/1.8.0/includes/index.php (added)
-
tags/1.8.0/index.php (added)
-
tags/1.8.0/miniorange-ai-visibility.php (added)
-
tags/1.8.0/readme.txt (added)
-
tags/1.8.0/tools (added)
-
tags/1.8.0/tools/generate-company-logos.php (added)
-
tags/1.8.0/uninstall.php (added)
-
tags/1.8.0/views (added)
-
tags/1.8.0/views/src (added)
-
tags/1.8.0/views/src/common (added)
-
tags/1.8.0/views/src/common/components (added)
-
tags/1.8.0/views/src/common/components/class-app-header-view.php (added)
-
tags/1.8.0/views/src/common/components/class-app-shell-view.php (added)
-
tags/1.8.0/views/src/common/components/class-contact-us-view.php (added)
-
tags/1.8.0/views/src/common/components/class-deactivation-feedback-view.php (added)
-
tags/1.8.0/views/src/common/components/class-icons-sprite-view.php (added)
-
tags/1.8.0/views/src/common/components/class-navbar-view.php (added)
-
tags/1.8.0/views/src/common/components/class-side-nav-view.php (added)
-
tags/1.8.0/views/src/common/components/index.php (added)
-
tags/1.8.0/views/src/common/pages (added)
-
tags/1.8.0/views/src/common/pages/ai-inventory (added)
-
tags/1.8.0/views/src/common/pages/ai-inventory/class-ai-inventory-view.php (added)
-
tags/1.8.0/views/src/common/pages/ai-inventory/index.php (added)
-
tags/1.8.0/views/src/common/pages/analytics (added)
-
tags/1.8.0/views/src/common/pages/analytics/class-analytics-view.php (added)
-
tags/1.8.0/views/src/common/pages/analytics/index.php (added)
-
tags/1.8.0/views/src/common/pages/dashboard (added)
-
tags/1.8.0/views/src/common/pages/dashboard/index.php (added)
-
tags/1.8.0/views/src/common/pages/discoverability (added)
-
tags/1.8.0/views/src/common/pages/discoverability/class-discoverability-view.php (added)
-
tags/1.8.0/views/src/common/pages/discoverability/index.php (added)
-
tags/1.8.0/views/src/common/pages/mcp-control (added)
-
tags/1.8.0/views/src/common/pages/mcp-control/class-mcp-control-view.php (added)
-
tags/1.8.0/views/src/common/pages/mcp-tracker (added)
-
tags/1.8.0/views/src/common/pages/mcp-tracker/class-mcp-tracker-view.php (added)
-
tags/1.8.0/views/src/common/pages/mcp-tracker/index.php (added)
-
tags/1.8.0/views/src/common/pages/reports (added)
-
tags/1.8.0/views/src/common/pages/reports/class-reports-view.php (added)
-
tags/1.8.0/views/src/common/pages/reports/index.php (added)
-
tags/1.8.0/views/src/common/pages/settings (added)
-
tags/1.8.0/views/src/common/pages/settings/class-settings-view.php (added)
-
tags/1.8.0/views/src/common/pages/settings/index.php (added)
-
tags/1.8.0/views/src/common/pages/visibility (added)
-
tags/1.8.0/views/src/common/pages/visibility/class-visibility-view.php (added)
-
tags/1.8.0/views/src/common/pages/visibility/index.php (added)
-
trunk/assets/css/admin.css (modified) (3 diffs)
-
trunk/assets/js/analytics.js (modified) (1 diff)
-
trunk/includes/common/controllers/class-analytics-controller.php (modified) (2 diffs)
-
trunk/includes/common/hooks/class-hooks.php (modified) (4 diffs)
-
trunk/libraries (added)
-
trunk/libraries/index.php (added)
-
trunk/miniorange-ai-visibility.php (modified) (1 diff)
-
trunk/readme.txt (modified) (4 diffs)
-
trunk/scripts (added)
-
trunk/views/src/common/pages/analytics/class-analytics-view.php (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
miniorange-ai-visibility/trunk/assets/css/admin.css
r3670315 r3694415 6090 6090 ========================================================================== */ 6091 6091 6092 .moai-av-getting-started { 6093 display: flex; 6094 align-items: center; 6095 justify-content: space-between; 6096 gap: 24px; 6097 margin-bottom: 18px; 6098 border-color: var(--moai-indigo); 6099 background: var(--moai-indigo-tint); 6100 } 6101 6102 .moai-av-getting-started__content { 6103 max-width: 720px; 6104 } 6105 6106 .moai-av-getting-started__content h2 { 6107 margin: 10px 0 6px; 6108 } 6109 6110 .moai-av-getting-started__content p { 6111 margin: 0; 6112 color: var(--moai-muted); 6113 } 6114 6115 .moai-av-getting-started__mcp { 6116 margin-top: 8px !important; 6117 font-size: 12px; 6118 } 6119 6120 .moai-av-getting-started__status { 6121 display: inline-flex; 6122 align-items: center; 6123 gap: 7px; 6124 font-size: 12px; 6125 font-weight: 700; 6126 } 6127 6128 .moai-av-getting-started__status.is-active { 6129 color: var(--moai-good); 6130 } 6131 6132 .moai-av-getting-started__status.is-inactive { 6133 color: var(--moai-bad); 6134 } 6135 6136 .moai-av-getting-started__status-dot { 6137 width: 8px; 6138 height: 8px; 6139 border-radius: 50%; 6140 background: currentColor; 6141 } 6142 6143 .moai-av-getting-started__actions { 6144 display: flex; 6145 gap: 10px; 6146 flex-shrink: 0; 6147 flex-wrap: wrap; 6148 } 6149 6092 6150 .moai-av-dash-groups { 6093 6151 display: grid; … … 6096 6154 margin-bottom: 20px; 6097 6155 align-items: stretch; 6156 } 6157 6158 .moai-av-dash-groups--two { 6159 grid-template-columns: repeat(2, minmax(0, 1fr)); 6098 6160 } 6099 6161 … … 6663 6725 } 6664 6726 6727 .moai-av-getting-started { 6728 align-items: flex-start; 6729 flex-direction: column; 6730 } 6731 6665 6732 .moai-av-dash-metrics { 6666 6733 grid-template-columns: repeat(2, minmax(0, 1fr)); -
miniorange-ai-visibility/trunk/assets/js/analytics.js
r3670315 r3694415 1110 1110 // and real data just arrived (charts/tables were never rendered). 1111 1111 if ( 1112 res.data.stats 1113 && ( res.data.stats.total_visits > 0 || res.data.stats.total_blocked > 0 ) 1112 ( 1113 ( res.data.stats && ( res.data.stats.total_visits > 0 || res.data.stats.total_blocked > 0 ) ) 1114 || ( res.data.mcp_stats && res.data.mcp_stats.total_requests > 0 ) 1115 || ( res.data.referral_stats && res.data.referral_stats.total_visits > 0 ) 1116 ) 1114 1117 && $( '#moai-av-dashboard-empty' ).length 1115 1118 ) { -
miniorange-ai-visibility/trunk/includes/common/controllers/class-analytics-controller.php
r3670315 r3694415 13 13 use MOAI_Visibility\Includes\Common\Handlers\Analytics_Handler; 14 14 use MOAI_Visibility\Includes\Common\Handlers\Ai_Inventory_Handler; 15 use MOAI_Visibility\Includes\Common\Services\Settings_Service; 15 16 use MOAI_Visibility\Views\Src\Common\Pages\Analytics\Analytics_View; 16 17 … … 90 91 } 91 92 92 ( new Analytics_View( $this->handler->get_initial_data() ) )->render(); 93 $data = $this->handler->get_initial_data(); 94 $data['tracking_enabled'] = ( new Settings_Service() )->is_tracking_enabled(); 95 ( new Analytics_View( $data ) )->render(); 93 96 } 94 97 -
miniorange-ai-visibility/trunk/includes/common/hooks/class-hooks.php
r3602565 r3694415 11 11 12 12 use MOAI_Visibility\Includes\Common\Constants\Plugin_Constants; 13 use MOAI_Visibility\Includes\Common\Services\Settings_Service; 13 14 14 15 if ( ! defined( 'ABSPATH' ) ) { … … 57 58 $dashboard_link = sprintf( 58 59 '<a href="%s">%s</a>', 59 esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_ ANALYTICS) ),60 esc_html__( ' Analytics', 'miniorange-ai-visibility' )60 esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_VISIBILITY ) ), 61 esc_html__( 'Get started', 'miniorange-ai-visibility' ) 61 62 ); 62 63 … … 84 85 } 85 86 87 $tracking_enabled = ( new Settings_Service() )->is_tracking_enabled(); 88 86 89 delete_option( Plugin_Constants::OPTION_ACTIVATION_NOTICE ); 87 90 ?> … … 97 100 ?> 98 101 </strong> 99 <?php esc_html_e( ' Open the dashboard to review your site\'s AI discovery signals.', 'miniorange-ai-visibility' ); ?>102 <?php esc_html_e( 'See which AI bots visit your site, control their access, and make your content easier for AI assistants to find.', 'miniorange-ai-visibility' ); ?> 100 103 </p> 101 104 <p> 102 <a href="<?php echo esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_ANALYTICS ) ); ?>" class="button button-primary"> 105 <?php if ( $tracking_enabled ) : ?> 106 <?php esc_html_e( 'Crawler tracking is already on—no API key or additional setup is required. Activity will appear after AI bots or visitors from AI assistants reach your site.', 'miniorange-ai-visibility' ); ?> 107 <?php else : ?> 108 <?php esc_html_e( 'Crawler tracking is currently off. You can turn it on from the AI Crawlers page.', 'miniorange-ai-visibility' ); ?> 109 <?php endif; ?> 110 </p> 111 <p> 112 <a href="<?php echo esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_VISIBILITY ) ); ?>" class="button button-primary"> 113 <?php esc_html_e( 'Check Your Homepage', 'miniorange-ai-visibility' ); ?> 114 </a> 115 <a href="<?php echo esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_ANALYTICS ) ); ?>" class="button"> 103 116 <?php esc_html_e( 'View Analytics', 'miniorange-ai-visibility' ); ?> 104 117 </a> -
miniorange-ai-visibility/trunk/miniorange-ai-visibility.php
r3670315 r3694415 4 4 * Plugin URI: https://plugins.miniorange.com/ 5 5 * Description: Monitor AI crawlers and MCP traffic, inventory agents and tools, control access, and improve AI visibility with llms.txt and readiness checks. 6 * Version: 1.8. 06 * Version: 1.8.1 7 7 * Requires at least: 5.0 8 8 * Requires PHP: 7.4 -
miniorange-ai-visibility/trunk/readme.txt
r3670315 r3694415 5 5 Tested up to: 7.0.1 6 6 Requires PHP: 7.4 7 Stable tag: 1.8. 07 Stable tag: 1.8.1 8 8 License: Expat 9 9 License URI: https://plugins.miniorange.com/mit-license … … 53 53 **Analytics** 54 54 55 * Dual crawler + MCP summary cards on one dashboard. 55 * After activation, a getting-started panel explains that crawler tracking is already on and points you to a homepage Visibility Score check. 56 * Dual crawler + MCP summary cards on one dashboard (MCP cards appear after AI tool traffic is recorded). 56 57 * Charts for crawler requests over time and traffic by category; MCP timeline and server charts. 57 58 * Top AI crawlers, top MCP tools, and most-crawled pages. … … 379 380 == Changelog == 380 381 382 = 1.8.1 = 383 * First-run Analytics guidance: status that crawler tracking is on, why metrics show 0, and a primary **Check Your Homepage** action. 384 * Activation notice now explains the plugin purpose and links to a homepage Visibility Score check (plus Analytics). 385 * Empty dashboard states include next steps (check a page, set up llms.txt) instead of only waiting for crawler traffic. 386 * MCP summary cards stay hidden until AI tool (MCP) traffic is recorded, with a short note that MCP is optional. 387 * Empty **Visits from AI** no longer links to a missing details section. 388 381 389 = 1.8.0 = 382 390 * Added **Visits from AI** — detect human traffic referred by ChatGPT, Perplexity, Gemini, Claude, Copilot, and similar assistants via HTTP referrer and UTM parameters. … … 527 535 == Upgrade Notice == 528 536 537 = 1.8.1 = 538 Improves first-run Analytics: tracking status, empty-state next steps, homepage Visibility Score CTA, and optional MCP cards until tool traffic appears. 539 529 540 = 1.8.0 = 530 541 Adds Visits from AI (referral detection + Analytics) and IndexNow pings under Discoverability. Enable IndexNow from Discoverability → IndexNow after upgrading. -
miniorange-ai-visibility/trunk/views/src/common/pages/analytics/class-analytics-view.php
r3670315 r3694415 114 114 ( new App_Header_View( 115 115 __( 'Analytics', 'miniorange-ai-visibility' ), 116 __( ' Crawlers, MCP, and Visits from AI on your site', 'miniorange-ai-visibility' ),116 __( 'See which AI bots visit your site, what they access, and which AI assistants send visitors.', 'miniorange-ai-visibility' ), 117 117 $header_actions 118 118 ) )->render(); 119 119 120 $stats = $this->data['stats'] ?? array(); 121 $has_data = ! empty( $stats['total_visits'] ) || ! empty( $stats['total_blocked'] ) || ! empty( $this->data['mcp_stats']['total_requests'] ) || ! empty( $this->data['referral_stats']['total_visits'] ); 120 $stats = $this->data['stats'] ?? array(); 121 $tracking_enabled = ! array_key_exists( 'tracking_enabled', $this->data ) || ! empty( $this->data['tracking_enabled'] ); 122 $has_data = ! empty( $stats['total_visits'] ) || ! empty( $stats['total_blocked'] ) || ! empty( $this->data['mcp_stats']['total_requests'] ) || ! empty( $this->data['referral_stats']['total_visits'] ); 122 123 ?> 123 124 <div class="moai-av-view-container" id="moai-av-section-analytics"> 124 125 <div class="moai-av-section"> 126 <?php if ( ! $has_data ) : ?> 127 <?php $this->render_getting_started( $tracking_enabled ); ?> 128 <?php endif; ?> 129 125 130 <?php $this->render_range_filterbar(); ?> 126 131 … … 140 145 <svg><use href="#moai-i-bot"/></svg> 141 146 </div> 142 <h4><?php esc_html_e( 'Waiting for your first AI activity', 'miniorange-ai-visibility' ); ?></h4> 143 <p><?php esc_html_e( 'Once AI crawlers, MCP clients, or AI-referred visitors reach your site, activity will appear here automatically.', 'miniorange-ai-visibility' ); ?></p> 147 <h4><?php esc_html_e( 'No AI activity has been recorded yet', 'miniorange-ai-visibility' ); ?></h4> 148 <p><?php esc_html_e( 'This is normal for a new installation. These numbers will update automatically after AI bots or visitors from AI assistants reach your site.', 'miniorange-ai-visibility' ); ?></p> 149 <div class="moai-av-empty-state__actions"> 150 <a class="moai-av-btn moai-av-btn-primary" href="<?php echo esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_VISIBILITY ) ); ?>"> 151 <?php esc_html_e( 'Check a Page Now', 'miniorange-ai-visibility' ); ?> 152 </a> 153 <a class="moai-av-btn moai-av-btn-ghost" href="<?php echo esc_url( admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_DISCOVERABILITY ) ); ?>"> 154 <?php esc_html_e( 'Set Up llms.txt', 'miniorange-ai-visibility' ); ?> 155 </a> 156 </div> 144 157 </div> 145 158 <?php else : ?> … … 255 268 256 269 /** 270 * Render first-run guidance above an empty dashboard. 271 * 272 * @param bool $tracking_enabled Whether crawler tracking is enabled. 273 * @return void 274 */ 275 private function render_getting_started( bool $tracking_enabled ): void { 276 $visibility_url = admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_VISIBILITY ); 277 $settings_url = admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_SETTINGS ); 278 ?> 279 <div class="moai-av-card moai-av-getting-started"> 280 <div class="moai-av-getting-started__content"> 281 <div class="moai-av-getting-started__status<?php echo esc_attr( $tracking_enabled ? ' is-active' : ' is-inactive' ); ?>"> 282 <span class="moai-av-getting-started__status-dot" aria-hidden="true"></span> 283 <?php echo $tracking_enabled ? esc_html__( 'Crawler tracking is on', 'miniorange-ai-visibility' ) : esc_html__( 'Crawler tracking is off', 'miniorange-ai-visibility' ); ?> 284 </div> 285 <h2><?php esc_html_e( 'Start with an AI visibility check', 'miniorange-ai-visibility' ); ?></h2> 286 <p> 287 <?php 288 if ( $tracking_enabled ) { 289 esc_html_e( 'No setup or API key is required for tracking. Your analytics are 0 because no AI activity has been recorded yet—not because the plugin failed.', 'miniorange-ai-visibility' ); 290 } else { 291 esc_html_e( 'Tracking is currently paused, so new AI crawler visits will not appear in Analytics.', 'miniorange-ai-visibility' ); 292 } 293 ?> 294 </p> 295 <p class="moai-av-getting-started__mcp"> 296 <?php esc_html_e( 'AI tool traffic (MCP) is optional and will remain empty unless an AI tool is connected to your site.', 'miniorange-ai-visibility' ); ?> 297 </p> 298 </div> 299 <div class="moai-av-getting-started__actions"> 300 <a class="moai-av-btn moai-av-btn-primary" href="<?php echo esc_url( $visibility_url ); ?>"> 301 <?php esc_html_e( 'Check Your Homepage', 'miniorange-ai-visibility' ); ?> 302 </a> 303 <?php if ( ! $tracking_enabled ) : ?> 304 <a class="moai-av-btn moai-av-btn-ghost" href="<?php echo esc_url( $settings_url ); ?>"> 305 <?php esc_html_e( 'Turn On Tracking', 'miniorange-ai-visibility' ); ?> 306 </a> 307 <?php endif; ?> 308 </div> 309 </div> 310 <?php 311 } 312 313 /** 257 314 * Shared date-range filter bar. 258 315 * … … 732 789 */ 733 790 private function render_dual_summary( array $stats, array $mcp_stats, array $referral_stats = array() ): void { 734 $comparison = (array) ( $this->data['comparison'] ?? array() );791 $comparison = (array) ( $this->data['comparison'] ?? array() ); 735 792 $urls = (array) ( $this->data['urls'] ?? array() ); 736 793 $tracker = (string) ( $urls['mcp_tracker'] ?? admin_url( 'admin.php?page=' . Plugin_Constants::MENU_SLUG_MCP_TRACKER ) ); … … 738 795 $referral_anchor = '#moai-av-section-referrals'; 739 796 $top_page = (string) ( $referral_stats['top_page'] ?? '' ); 740 ?> 741 <div class="moai-av-dash-groups" id="moai-av-stats"> 797 $has_mcp_activity = ! empty( $mcp_stats['total_requests'] ); 798 $has_ai_referrals = ! empty( $referral_stats['total_visits'] ); 799 $summary_class = $has_mcp_activity ? '' : ' moai-av-dash-groups--two'; 800 ?> 801 <div class="moai-av-dash-groups<?php echo esc_attr( $summary_class ); ?>" id="moai-av-stats"> 742 802 <div class="moai-av-dash-group"> 743 803 <div class="moai-av-dash-group__head"> … … 783 843 </div> 784 844 </div> 845 <?php if ( $has_mcp_activity ) : ?> 785 846 <div class="moai-av-dash-group"> 786 847 <div class="moai-av-dash-group__head"> … … 826 887 </div> 827 888 </div> 889 <?php endif; ?> 828 890 <div class="moai-av-dash-group"> 829 891 <div class="moai-av-dash-group__head"> … … 834 896 <?php esc_html_e( 'Visits from AI', 'miniorange-ai-visibility' ); ?> 835 897 </div> 836 <a class="moai-av-panel-link" href="<?php echo esc_url( $referral_anchor ); ?>"><?php esc_html_e( 'View details →', 'miniorange-ai-visibility' ); ?></a> 898 <?php if ( $has_ai_referrals ) : ?> 899 <a class="moai-av-panel-link" href="<?php echo esc_url( $referral_anchor ); ?>"><?php esc_html_e( 'View details →', 'miniorange-ai-visibility' ); ?></a> 900 <?php else : ?> 901 <span class="moai-av-dash-metric__hint"><?php esc_html_e( 'Waiting for visits', 'miniorange-ai-visibility' ); ?></span> 902 <?php endif; ?> 837 903 </div> 838 904 <div class="moai-av-dash-metrics">
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)