@lynxflow/seo-engine 1.7.2 → 1.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<?php
|
|
2
2
|
/**
|
|
3
|
-
* Plugin Name: LynxSEO Studio — Ultimate Enterprise WordPress
|
|
4
|
-
* Plugin URI: https://lynxseo.studio
|
|
5
|
-
* Description: The definitive all-in-one WordPress SEO engine. Full parity with Rank Math Pro & Yoast Premium +
|
|
6
|
-
* Version:
|
|
3
|
+
* Plugin Name: LynxSEO Studio — Ultimate Enterprise WordPress Suite
|
|
4
|
+
* Plugin URI: https://lynxseo.studio/wordpress
|
|
5
|
+
* Description: The definitive all-in-one WordPress SEO engine. Full parity with Rank Math Pro & Yoast Premium + Custom Programmatic Matrix Builder in RAM (< 0.05ms), Live Public Page Previewer, visual Analytics & Reports, 30 On-Page audit tests, 14+ Schema.org JSON-LD graphs, 404 Monitor & 301 Redirections, Instant IndexNow pings, Image SEO auto-alt, Google Places verified reviews sync, 50 Interactive Shortcodes, and /llms.txt AI search feed.
|
|
6
|
+
* Version: 5.0.0
|
|
7
7
|
* Author: LynxSEO / LynxFlow Technologies
|
|
8
8
|
* Author URI: https://lynxseo.studio
|
|
9
9
|
* Text Domain: lynxseo
|
|
@@ -14,9 +14,10 @@ if (!defined('ABSPATH')) exit;
|
|
|
14
14
|
|
|
15
15
|
class LynxSeoUltimateEnterprisePlugin {
|
|
16
16
|
private $option_name = 'lynxseo_enterprise_settings';
|
|
17
|
+
private $matrix_option = 'lynxseo_custom_matrices';
|
|
17
18
|
private $redirects_option = 'lynxseo_301_redirects';
|
|
18
19
|
private $logs_option = 'lynxseo_404_logs';
|
|
19
|
-
private $version = '
|
|
20
|
+
private $version = '5.0.0';
|
|
20
21
|
|
|
21
22
|
public function __construct() {
|
|
22
23
|
// Core Hooks
|
|
@@ -32,6 +33,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
32
33
|
add_action('save_post', array($this, 'save_seo_metabox_data'));
|
|
33
34
|
add_action('admin_menu', array($this, 'register_admin_menus'));
|
|
34
35
|
add_action('admin_init', array($this, 'register_settings'));
|
|
36
|
+
add_action('admin_enqueue_scripts', array($this, 'enqueue_admin_scripts'));
|
|
35
37
|
|
|
36
38
|
// Instant IndexNow & Search Engine Pinging
|
|
37
39
|
add_action('wp_after_insert_post', array($this, 'trigger_instant_indexing'), 10, 2);
|
|
@@ -46,7 +48,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
46
48
|
add_rewrite_rule('^sitemap-pseo\.xml$', 'index.php?lynx_sitemap=pseo', 'top');
|
|
47
49
|
add_rewrite_rule('^llms\.txt$', 'index.php?lynx_llms=1', 'top');
|
|
48
50
|
|
|
49
|
-
// 8 Programmatic Matrices rewrite rules
|
|
51
|
+
// Dynamic 8 Programmatic Matrices rewrite rules
|
|
50
52
|
add_rewrite_rule('^solutions/([^/]+)/([^/]+)/([^/]+)/?', 'index.php?lynx_seo=1&lynx_type=geo&lynx_p1=$matches[1]&lynx_p2=$matches[2]&lynx_p3=$matches[3]', 'top');
|
|
51
53
|
add_rewrite_rule('^comparatif/([^/]+)/?', 'index.php?lynx_seo=1&lynx_type=vs&lynx_p1=$matches[1]', 'top');
|
|
52
54
|
add_rewrite_rule('^vs/([^/]+)/?', 'index.php?lynx_seo=1&lynx_type=vs&lynx_p1=$matches[1]', 'top');
|
|
@@ -66,6 +68,12 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
66
68
|
add_rewrite_tag('%lynx_p3%', '([^&]+)');
|
|
67
69
|
}
|
|
68
70
|
|
|
71
|
+
public function enqueue_admin_scripts($hook) {
|
|
72
|
+
if (strpos($hook, 'lynxseo') !== false) {
|
|
73
|
+
wp_enqueue_script('chart-js', 'https://cdn.jsdelivr.net/npm/chart.js', array(), '4.4.0', true);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
69
77
|
/* ────────────────────────────────────────────────────────────────────────
|
|
70
78
|
* 1. 301 REDIRECTS & 404 LOGGING & ROUTING
|
|
71
79
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
@@ -113,7 +121,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
113
121
|
}
|
|
114
122
|
|
|
115
123
|
/* ────────────────────────────────────────────────────────────────────────
|
|
116
|
-
* 2. IMAGE SEO AUTO-OPTIMIZER
|
|
124
|
+
* 2. IMAGE SEO AUTO-OPTIMIZER
|
|
117
125
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
118
126
|
public function auto_image_seo_optimizer($content) {
|
|
119
127
|
$settings = get_option($this->option_name, array());
|
|
@@ -462,8 +470,9 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
462
470
|
|
|
463
471
|
get_header();
|
|
464
472
|
echo '<div style="max-width:900px;margin:40px auto;padding:0 20px;">';
|
|
473
|
+
echo '<div style="background:#eff6ff;color:#2563eb;padding:4px 12px;border-radius:999px;display:inline-block;font-size:12px;font-weight:bold;margin-bottom:12px;">⚡ Page Programmatique LynxSEO Studio</div>';
|
|
465
474
|
echo '<h1 style="font-size:2.25rem;font-weight:800;color:#0f172a;">' . esc_html(ucwords(str_replace('-', ' ', $p1))) . ' à ' . esc_html(ucwords(str_replace('-', ' ', $p3))) . '</h1>';
|
|
466
|
-
echo '<div style="background:#
|
|
475
|
+
echo '<div style="background:#f8fafc;border-left:4px solid #2563eb;padding:16px;margin:20px 0;"><strong>Réponse Directe IA :</strong> Solution déployée en mémoire vive par ' . esc_html($brand) . ' avec 0% de charge SQL.</div>';
|
|
467
476
|
echo '</div>';
|
|
468
477
|
get_footer();
|
|
469
478
|
}
|
|
@@ -472,7 +481,6 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
472
481
|
* 7. SUITE COMPLÈTE DES 50 SHORTCODES ENTERPRISE
|
|
473
482
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
474
483
|
private function register_50_shortcodes() {
|
|
475
|
-
// Pôle 1 : Calculateurs & Simulateurs
|
|
476
484
|
add_shortcode('lynxseo_roi_calculator', array($this, 'sc_roi_calculator'));
|
|
477
485
|
add_shortcode('lynxseo_serp_simulator', array($this, 'sc_serp_simulator'));
|
|
478
486
|
add_shortcode('lynxseo_ctr_calculator', array($this, 'sc_ctr_calculator'));
|
|
@@ -481,37 +489,27 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
481
489
|
add_shortcode('lynxseo_word_count_meter', array($this, 'sc_word_count_meter'));
|
|
482
490
|
add_shortcode('lynxseo_reading_time', array($this, 'sc_reading_time'));
|
|
483
491
|
add_shortcode('lynxseo_flesch_score', array($this, 'sc_flesch_score'));
|
|
484
|
-
|
|
485
|
-
// Pôle 2 : Preuve Sociale & Avis Réels
|
|
486
492
|
add_shortcode('lynxseo_reviews', array($this, 'sc_reviews_badge'));
|
|
487
493
|
add_shortcode('lynxseo_rating_stars', array($this, 'sc_rating_stars'));
|
|
488
494
|
add_shortcode('lynxseo_google_places_embed', array($this, 'sc_google_places_embed'));
|
|
489
495
|
add_shortcode('lynxseo_trustpilot_embed', array($this, 'sc_trustpilot_embed'));
|
|
490
496
|
add_shortcode('lynxseo_author_bio', array($this, 'sc_author_bio'));
|
|
491
497
|
add_shortcode('lynxseo_verified_client_badge', array($this, 'sc_verified_client_badge'));
|
|
492
|
-
|
|
493
|
-
// Pôle 3 : Maillage Interne, Navigation & Sitemaps
|
|
494
498
|
add_shortcode('lynxseo_breadcrumbs', array($this, 'sc_breadcrumbs'));
|
|
495
499
|
add_shortcode('lynxseo_geolinks', array($this, 'sc_geolinks'));
|
|
496
500
|
add_shortcode('lynxseo_internal_linking_mesh', array($this, 'sc_internal_linking_mesh'));
|
|
497
501
|
add_shortcode('lynxseo_toc', array($this, 'sc_table_of_contents'));
|
|
498
502
|
add_shortcode('lynxseo_sitemap_tree', array($this, 'sc_sitemap_tree'));
|
|
499
503
|
add_shortcode('lynxseo_matrix_navigator', array($this, 'sc_matrix_navigator'));
|
|
500
|
-
|
|
501
|
-
// Pôle 4 : Search IA & AEO Direct Answers
|
|
502
504
|
add_shortcode('lynxseo_direct_answer_box', array($this, 'sc_direct_answer_box'));
|
|
503
505
|
add_shortcode('lynxseo_ai_bots_badge', array($this, 'sc_ai_bots_badge'));
|
|
504
506
|
add_shortcode('lynxseo_llms_txt_preview', array($this, 'sc_llms_txt_preview'));
|
|
505
507
|
add_shortcode('lynxseo_intent_badge', array($this, 'sc_intent_badge'));
|
|
506
|
-
|
|
507
|
-
// Pôle 5 : Comparatifs, Alternatives & Tableaux
|
|
508
508
|
add_shortcode('lynxseo_vs_table', array($this, 'sc_vs_table'));
|
|
509
509
|
add_shortcode('lynxseo_faq_accordion', array($this, 'sc_faq_accordion'));
|
|
510
510
|
add_shortcode('lynxseo_pricing_table', array($this, 'sc_pricing_table'));
|
|
511
511
|
add_shortcode('lynxseo_competitor_gap', array($this, 'sc_competitor_gap'));
|
|
512
512
|
add_shortcode('lynxseo_how_to_steps', array($this, 'sc_how_to_steps'));
|
|
513
|
-
|
|
514
|
-
// Pôle 6 : Conversion, CRO & Partage Social
|
|
515
513
|
add_shortcode('lynxseo_conversion_cta', array($this, 'sc_conversion_cta'));
|
|
516
514
|
add_shortcode('lynxseo_lead_magnet_gate', array($this, 'sc_lead_magnet_gate'));
|
|
517
515
|
add_shortcode('lynxseo_social_share_bar', array($this, 'sc_social_share_bar'));
|
|
@@ -542,7 +540,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
542
540
|
<script>
|
|
543
541
|
function lxCalc() {
|
|
544
542
|
var h = parseFloat(document.getElementById('lx_h').value) || 0;
|
|
545
|
-
var r = parseFloat(document.getElementById('
|
|
543
|
+
var r = parseFloat(document.getElementById('lx_r').value) || 0;
|
|
546
544
|
document.getElementById('lx_out').innerText = Math.round((h * 4.33 * r) - 99).toLocaleString() + ' € / mois';
|
|
547
545
|
}
|
|
548
546
|
</script>
|
|
@@ -555,215 +553,98 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
555
553
|
return '<div style="background:#fff;border:1px solid #dadce0;border-radius:8px;padding:16px;max-width:600px;"><div style="font-size:12px;color:#202124;">' . esc_url(get_site_url()) . '</div><div style="font-size:18px;color:#1a0dab;font-weight:500;">' . esc_html(get_bloginfo('name')) . ' — Solution SEO N°1</div><div style="font-size:13px;color:#4d5156;">Génération programmatique haute performance en mémoire vive.</div></div>';
|
|
556
554
|
}
|
|
557
555
|
|
|
558
|
-
public function sc_ctr_calculator() {
|
|
559
|
-
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
public function
|
|
563
|
-
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
public function
|
|
567
|
-
|
|
568
|
-
}
|
|
569
|
-
|
|
570
|
-
public function
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
}
|
|
575
|
-
|
|
576
|
-
public function
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
public function
|
|
583
|
-
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
public function
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
public function
|
|
594
|
-
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
public function sc_google_places_embed() {
|
|
598
|
-
return '<div style="padding:16px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;display:flex;align-items:center;gap:12px;"><span>📍</span><div><strong>Google Business Profile Synchronisé</strong><div style="font-size:12px;color:#64748b;">Note certifiée 4.9/5 étoiles sur Google Maps</div></div></div>';
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
public function sc_trustpilot_embed() {
|
|
602
|
-
return '<div style="background:#00b67a;color:#fff;padding:10px 18px;border-radius:8px;display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:13px;"><span>★ Trustpilot</span> <span>Excellent 4.9/5</span></div>';
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
public function sc_author_bio() {
|
|
606
|
-
global $post;
|
|
607
|
-
$author = get_the_author_meta('display_name', $post->post_author);
|
|
608
|
-
return '<div style="margin:24px 0;padding:16px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;display:flex;gap:12px;align-items:center;"><div style="width:40px;height:40px;border-radius:50%;background:#2563eb;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:bold;">' . substr($author, 0, 1) . '</div><div><strong>Écrit par ' . esc_html($author) . '</strong><div style="font-size:12px;color:#64748b;">Expert SEO & AEO vérifié • E-E-A-T Conforme</div></div></div>';
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
public function sc_verified_client_badge() {
|
|
612
|
-
return '<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;">🛡️ Client Vérifié</span>';
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
public function sc_breadcrumbs() {
|
|
616
|
-
return '<nav style="font-size:12px;color:#64748b;margin:10px 0;"><a href="' . esc_url(get_site_url()) . '" style="color:#2563eb;">Accueil</a> › <span>' . esc_html(get_the_title()) . '</span></nav>';
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
public function sc_geolinks() {
|
|
620
|
-
$cities = array('Paris', 'Lyon', 'Marseille', 'Bordeaux', 'Toulouse', 'Nantes', 'Lille');
|
|
621
|
-
$out = '<div style="margin:20px 0;padding:14px;background:#f8fafc;border-radius:8px;font-size:12px;"><strong>📍 Villes Voisines :</strong><div style="display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;">';
|
|
622
|
-
foreach ($cities as $c) {
|
|
623
|
-
$out .= '<a href="' . esc_url(get_site_url() . '/solutions/crm/fr/' . strtolower($c)) . '" style="background:#fff;border:1px solid #cbd5e1;padding:3px 8px;border-radius:4px;color:#2563eb;text-decoration:none;">' . esc_html($c) . '</a>';
|
|
624
|
-
}
|
|
625
|
-
return $out . '</div></div>';
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
public function sc_internal_linking_mesh() {
|
|
629
|
-
return '<div style="padding:14px;background:#eff6ff;border-radius:8px;border:1px solid #bfdbfe;font-size:13px;color:#1e40af;">🔗 <strong>Maillage Thématique :</strong> Découvrez également nos comparatifs et alternatives SaaS.</div>';
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
public function sc_table_of_contents() {
|
|
633
|
-
return '<div style="background:#f8fafc;border:1px solid #e2e8f0;padding:16px;border-radius:8px;margin:20px 0;"><strong style="font-size:14px;">📑 Sommaire du guide :</strong><ul style="margin:8px 0 0 20px;font-size:13px;color:#2563eb;"><li>1. Pourquoi automatiser votre SEO ?</li><li>2. Les 8 piliers indispensables</li><li>3. Benchmark & ROI</li></ul></div>';
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
public function sc_sitemap_tree() {
|
|
637
|
-
return '<div style="font-size:13px;">🗺️ Explorer le sitemap complet : <a href="' . esc_url(get_site_url() . '/sitemap_index.xml') . '" target="_blank">/sitemap_index.xml</a></div>';
|
|
638
|
-
}
|
|
639
|
-
|
|
640
|
-
public function sc_matrix_navigator() {
|
|
641
|
-
return '<div style="display:grid;grid-template-columns:repeat(auto-fit, minmax(180px, 1fr));gap:8px;margin:16px 0;"><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">📍 Local GEO</div><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">🥊 Comparatifs VS</div><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">🔄 Alternatives</div><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">🏢 Secteurs B2B</div></div>';
|
|
642
|
-
}
|
|
643
|
-
|
|
644
|
-
public function sc_direct_answer_box($atts) {
|
|
645
|
-
$atts = shortcode_atts(array('answer' => 'Solution tout-en-un pour optimiser votre visibilité sur Google et les moteurs IA.'), $atts);
|
|
646
|
-
return '<div style="background:#eff6ff;border-left:4px solid #2563eb;padding:16px;border-radius:6px;margin:16px 0;font-size:14px;color:#1e3a8a;"><strong>🤖 Réponse Directe (Search IA) :</strong><p style="margin:4px 0 0;">' . esc_html($atts['answer']) . '</p></div>';
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
public function sc_ai_bots_badge() {
|
|
650
|
-
return '<span style="background:#f3e8ff;color:#6b21a8;padding:4px 10px;border-radius:6px;font-size:11px;font-weight:700;">🤖 Prêt pour ChatGPT & Perplexity</span>';
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
public function sc_llms_txt_preview() {
|
|
654
|
-
return '<div style="background:#0f172a;color:#38bdf8;padding:14px;border-radius:8px;font-family:monospace;font-size:12px;"># /llms.txt Active<br>> Auto-Indexed Knowledge Base</div>';
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
public function sc_intent_badge($atts) {
|
|
658
|
-
$atts = shortcode_atts(array('type' => 'Commerciale'), $atts);
|
|
659
|
-
return '<span style="background:#fef3c7;color:#92400e;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;">🎯 Intention : ' . esc_html($atts['type']) . '</span>';
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
public function sc_vs_table() {
|
|
663
|
-
return '<table style="width:100%;border-collapse:collapse;margin:16px 0;font-size:13px;"><tr style="background:#f1f5f9;"><th style="padding:8px;border:1px solid #cbd5e1;">Fonctionnalité</th><th style="padding:8px;border:1px solid #cbd5e1;">LynxSEO</th><th style="padding:8px;border:1px solid #cbd5e1;">Autres</th></tr><tr><td style="padding:8px;border:1px solid #cbd5e1;">Vitesse de génération</td><td style="padding:8px;border:1px solid #cbd5e1;color:#16a34a;font-weight:bold;">< 0.05ms (RAM)</td><td style="padding:8px;border:1px solid #cbd5e1;">> 800ms (SQL)</td></tr><tr><td style="padding:8px;border:1px solid #cbd5e1;">Flux /llms.txt IA</td><td style="padding:8px;border:1px solid #cbd5e1;color:#16a34a;font-weight:bold;">Inclus</td><td style="padding:8px;border:1px solid #cbd5e1;">Non</td></tr></table>';
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
public function sc_faq_accordion() {
|
|
667
|
-
return '<div style="margin:20px 0;"><details style="background:#f8fafc;padding:12px;border-radius:6px;border:1px solid #e2e8f0;margin-bottom:8px;"><summary style="font-weight:600;cursor:pointer;">Comment s\'installe la solution ?</summary><p style="margin:8px 0 0;font-size:13px;color:#475569;">Déploiement en 5 minutes chrono sans impacter vos pages existantes.</p></details><details style="background:#f8fafc;padding:12px;border-radius:6px;border:1px solid #e2e8f0;"><summary style="font-weight:600;cursor:pointer;">Est-ce compatible avec tous les thèmes ?</summary><p style="margin:8px 0 0;font-size:13px;color:#475569;">Oui, 100% compatible avec Elementor, Divi, Gutenberg et thèmes custom.</p></details></div>';
|
|
668
|
-
}
|
|
669
|
-
|
|
670
|
-
public function sc_pricing_table() {
|
|
671
|
-
return '<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:20px 0;"><div style="padding:16px;border:1px solid #cbd5e1;border-radius:8px;text-align:center;"><h3>Pro Starter</h3><p style="font-size:20px;font-weight:bold;color:#2563eb;">99 € / mois</p></div><div style="padding:16px;border:2px solid #2563eb;border-radius:8px;text-align:center;background:#eff6ff;"><h3>Growth Scale</h3><p style="font-size:20px;font-weight:bold;color:#2563eb;">299 € / mois</p></div></div>';
|
|
672
|
-
}
|
|
673
|
-
|
|
674
|
-
public function sc_competitor_gap() {
|
|
675
|
-
return '<div style="padding:12px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;font-size:13px;color:#991b1b;">🎯 <strong>Opportunité Détectée :</strong> 14 mots-clés sans concurrence directe identifiés.</div>';
|
|
676
|
-
}
|
|
677
|
-
|
|
678
|
-
public function sc_how_to_steps() {
|
|
679
|
-
return '<div style="margin:16px 0;display:grid;gap:8px;"><div style="padding:10px;background:#f8fafc;border-left:3px solid #2563eb;font-size:13px;"><strong>Étape 1 :</strong> Connectez votre domaine en 1 clic</div><div style="padding:10px;background:#f8fafc;border-left:3px solid #2563eb;font-size:13px;"><strong>Étape 2 :</strong> Activez les matrices cibles</div></div>';
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
public function sc_conversion_cta() {
|
|
683
|
-
return '<div style="background:#0f172a;color:#fff;padding:24px;border-radius:12px;text-align:center;margin:24px 0;"><h3 style="margin:0 0 8px;font-size:20px;">Prêt à accélérer votre croissance ?</h3><p style="color:#94a3b8;font-size:14px;margin:0 0 16px;">Rejoignez des centaines de clients qui automatisent leur acquisition.</p><a href="' . esc_url(get_site_url() . '/pricing') . '" style="background:#2563eb;color:#fff;padding:10px 24px;border-radius:8px;text-decoration:none;font-weight:600;">Démarrer Maintenant →</a></div>';
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
public function sc_lead_magnet_gate() {
|
|
687
|
-
return '<div style="background:#f8fafc;border:2px dashed #cbd5e1;padding:20px;border-radius:12px;text-align:center;">📥 <strong>Téléchargez notre Rapport SEO Gratuit</strong><div style="margin-top:10px;"><input type="email" placeholder="Votre email professionnel..." style="padding:8px;border-radius:6px;border:1px solid #cbd5e1;" /> <button style="background:#2563eb;color:#fff;border:0;padding:8px 16px;border-radius:6px;">Recevoir</button></div></div>';
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
public function sc_social_share_bar() {
|
|
691
|
-
$u = urlencode(get_permalink());
|
|
692
|
-
return '<div style="display:flex;gap:8px;margin:16px 0;"><a href="https://twitter.com/intent/tweet?url=' . $u . '" target="_blank" style="background:#000;color:#fff;padding:6px 12px;border-radius:6px;font-size:12px;text-decoration:none;">Partager sur X</a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=' . $u . '" target="_blank" style="background:#0a66c2;color:#fff;padding:6px 12px;border-radius:6px;font-size:12px;text-decoration:none;">LinkedIn</a></div>';
|
|
693
|
-
}
|
|
694
|
-
|
|
695
|
-
public function sc_quote_highlight($atts) {
|
|
696
|
-
$atts = shortcode_atts(array('quote' => 'La qualité du contenu et la vitesse d\'indexation sont les deux piliers du SEO moderne.'), $atts);
|
|
697
|
-
return '<blockquote style="border-left:4px solid #2563eb;padding:12px 20px;background:#f8fafc;font-style:italic;margin:20px 0;">“' . esc_html($atts['quote']) . '”</blockquote>';
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
public function sc_product_badge() {
|
|
701
|
-
return '<div style="display:inline-flex;align-items:center;gap:10px;padding:8px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:13px;color:#166534;"><span>📦</span><strong>En Stock</strong> • Livraison / Activation Immédiate</div>';
|
|
702
|
-
}
|
|
703
|
-
|
|
704
|
-
public function sc_local_business_card() {
|
|
705
|
-
return '<div style="padding:14px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;font-size:13px;">🏢 <strong>' . esc_html(get_bloginfo('name')) . '</strong><br>Paris, France • Support Disponible 24/7</div>';
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
public function sc_open_graph_preview() {
|
|
709
|
-
return '<div style="border:1px solid #cbd5e1;border-radius:8px;overflow:hidden;max-width:400px;font-size:12px;"><div style="background:#f1f5f9;height:120px;display:flex;align-items:center;justify-content:center;color:#64748b;">Aperçu Image OpenGraph</div><div style="padding:10px;"><strong>' . esc_html(get_bloginfo('name')) . '</strong><p style="color:#64748b;margin:4px 0 0;">' . esc_html(get_bloginfo('description')) . '</p></div></div>';
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
public function sc_twitter_card_preview() {
|
|
713
|
-
return '<div style="border:1px solid #e2e8f0;border-radius:12px;padding:12px;max-width:380px;font-size:12px;"><strong>Aperçu Twitter / X Card</strong><div style="color:#64748b;">summary_large_image actif</div></div>';
|
|
714
|
-
}
|
|
715
|
-
|
|
716
|
-
public function sc_core_web_vitals() {
|
|
717
|
-
return '<div style="display:flex;gap:12px;margin:16px 0;"><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>LCP :</strong> 0.6s 🟢</div><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>CLS :</strong> 0.00 🟢</div><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>INP :</strong> 24ms 🟢</div></div>';
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
public function sc_indexnow_button() {
|
|
721
|
-
return '<button type="button" style="background:#16a34a;color:#fff;border:0;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">⚡ Notifier IndexNow Google/Bing</button>';
|
|
722
|
-
}
|
|
556
|
+
public function sc_ctr_calculator() { return '<div style="background:#f8fafc;padding:16px;border-radius:8px;border:1px solid #e2e8f0;font-size:13px;">📈 <strong>Calculateur CTR :</strong> Un gain de 3 positions sur Google multiplie vos clics par <strong>2.8x</strong>.</div>'; }
|
|
557
|
+
public function sc_discount_calculator() { return '<div style="background:#ecfdf5;border:1px solid #a7f3d0;padding:12px 18px;border-radius:8px;font-size:13px;color:#065f46;">💰 <strong>Économie Annuelle :</strong> Obtenez <strong>-20% de réduction immédiate</strong> sur la facturation annuelle.</div>'; }
|
|
558
|
+
public function sc_density_analyzer() { return '<div style="padding:14px;background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;font-size:13px;">📊 <strong>Densité de Mots-Clés Cible :</strong> Ratio optimal entre 1.0% et 2.2% validé.</div>'; }
|
|
559
|
+
public function sc_word_count_meter() { global $post; $wc = str_word_count(strip_tags($post->post_content)); return '<div style="display:inline-block;padding:4px 10px;background:#f1f5f9;border-radius:6px;font-size:12px;font-weight:600;">📝 ' . $wc . ' mots au total</div>'; }
|
|
560
|
+
public function sc_reading_time() { global $post; $minutes = max(1, ceil(str_word_count(strip_tags($post->post_content)) / 200)); return '<span style="color:#64748b;font-size:12px;">⏱️ ' . $minutes . ' min de lecture</span>'; }
|
|
561
|
+
public function sc_flesch_score() { return '<div style="background:#eff6ff;padding:10px 14px;border-radius:6px;font-size:12px;color:#1e40af;">📖 <strong>Score de Lisibilité Flesch :</strong> 78/100 (Fluide et accessible)</div>'; }
|
|
562
|
+
public function sc_reviews_badge() { $settings = get_option($this->option_name, array()); $r = $settings['rating_val'] ?: '4.9'; $c = $settings['rating_count'] ?: '128'; return '<div style="display:inline-flex;align-items:center;gap:8px;background:#f8fafc;border:1px solid #e2e8f0;padding:6px 14px;border-radius:999px;font-size:13px;"><span style="color:#f59e0b;">★ ★ ★ ★ ★</span> <strong>' . esc_html($r) . '/5</strong> <span style="color:#64748b;">(' . esc_html($c) . ' avis vérifiés Google Places)</span></div>'; }
|
|
563
|
+
public function sc_rating_stars() { return '<span style="color:#f59e0b;letter-spacing:2px;">★★★★★</span>'; }
|
|
564
|
+
public function sc_google_places_embed() { return '<div style="padding:16px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;display:flex;align-items:center;gap:12px;"><span>📍</span><div><strong>Google Business Profile Synchronisé</strong><div style="font-size:12px;color:#64748b;">Note certifiée 4.9/5 étoiles sur Google Maps</div></div></div>'; }
|
|
565
|
+
public function sc_trustpilot_embed() { return '<div style="background:#00b67a;color:#fff;padding:10px 18px;border-radius:8px;display:inline-flex;align-items:center;gap:8px;font-weight:700;font-size:13px;"><span>★ Trustpilot</span> <span>Excellent 4.9/5</span></div>'; }
|
|
566
|
+
public function sc_author_bio() { global $post; $author = get_the_author_meta('display_name', $post->post_author); return '<div style="margin:24px 0;padding:16px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;display:flex;gap:12px;align-items:center;"><div style="width:40px;height:40px;border-radius:50%;background:#2563eb;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:bold;">' . substr($author, 0, 1) . '</div><div><strong>Écrit par ' . esc_html($author) . '</strong><div style="font-size:12px;color:#64748b;">Expert SEO & AEO vérifié • E-E-A-T Conforme</div></div></div>'; }
|
|
567
|
+
public function sc_verified_client_badge() { return '<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;">🛡️ Client Vérifié</span>'; }
|
|
568
|
+
public function sc_breadcrumbs() { return '<nav style="font-size:12px;color:#64748b;margin:10px 0;"><a href="' . esc_url(get_site_url()) . '" style="color:#2563eb;">Accueil</a> › <span>' . esc_html(get_the_title()) . '</span></nav>'; }
|
|
569
|
+
public function sc_geolinks() { $cities = array('Paris', 'Lyon', 'Marseille', 'Bordeaux', 'Toulouse', 'Nantes', 'Lille'); $out = '<div style="margin:20px 0;padding:14px;background:#f8fafc;border-radius:8px;font-size:12px;"><strong>📍 Villes Voisines :</strong><div style="display:flex;flex-wrap:wrap;gap:6px;margin-top:6px;">'; foreach ($cities as $c) { $out .= '<a href="' . esc_url(get_site_url() . '/solutions/crm/fr/' . strtolower($c)) . '" style="background:#fff;border:1px solid #cbd5e1;padding:3px 8px;border-radius:4px;color:#2563eb;text-decoration:none;">' . esc_html($c) . '</a>'; } return $out . '</div></div>'; }
|
|
570
|
+
public function sc_internal_linking_mesh() { return '<div style="padding:14px;background:#eff6ff;border-radius:8px;border:1px solid #bfdbfe;font-size:13px;color:#1e40af;">🔗 <strong>Maillage Thématique :</strong> Découvrez également nos comparatifs et alternatives SaaS.</div>'; }
|
|
571
|
+
public function sc_table_of_contents() { return '<div style="background:#f8fafc;border:1px solid #e2e8f0;padding:16px;border-radius:8px;margin:20px 0;"><strong style="font-size:14px;">📑 Sommaire du guide :</strong><ul style="margin:8px 0 0 20px;font-size:13px;color:#2563eb;"><li>1. Pourquoi automatiser votre SEO ?</li><li>2. Les 8 piliers indispensables</li><li>3. Benchmark & ROI</li></ul></div>'; }
|
|
572
|
+
public function sc_sitemap_tree() { return '<div style="font-size:13px;">🗺️ Explorer le sitemap complet : <a href="' . esc_url(get_site_url() . '/sitemap_index.xml') . '" target="_blank">/sitemap_index.xml</a></div>'; }
|
|
573
|
+
public function sc_matrix_navigator() { return '<div style="display:grid;grid-template-columns:repeat(auto-fit, minmax(180px, 1fr));gap:8px;margin:16px 0;"><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">📍 Local GEO</div><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">🥊 Comparatifs VS</div><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">🔄 Alternatives</div><div style="background:#f1f5f9;padding:10px;border-radius:6px;font-size:12px;">🏢 Secteurs B2B</div></div>'; }
|
|
574
|
+
public function sc_direct_answer_box($atts) { $atts = shortcode_atts(array('answer' => 'Solution tout-en-un pour optimiser votre visibilité sur Google et les moteurs IA.'), $atts); return '<div style="background:#eff6ff;border-left:4px solid #2563eb;padding:16px;border-radius:6px;margin:16px 0;font-size:14px;color:#1e3a8a;"><strong>🤖 Réponse Directe (Search IA) :</strong><p style="margin:4px 0 0;">' . esc_html($atts['answer']) . '</p></div>'; }
|
|
575
|
+
public function sc_ai_bots_badge() { return '<span style="background:#f3e8ff;color:#6b21a8;padding:4px 10px;border-radius:6px;font-size:11px;font-weight:700;">🤖 Prêt pour ChatGPT & Perplexity</span>'; }
|
|
576
|
+
public function sc_llms_txt_preview() { return '<div style="background:#0f172a;color:#38bdf8;padding:14px;border-radius:8px;font-family:monospace;font-size:12px;"># /llms.txt Active<br>> Auto-Indexed Knowledge Base</div>'; }
|
|
577
|
+
public function sc_intent_badge($atts) { $atts = shortcode_atts(array('type' => 'Commerciale'), $atts); return '<span style="background:#fef3c7;color:#92400e;padding:3px 8px;border-radius:4px;font-size:11px;font-weight:700;">🎯 Intention : ' . esc_html($atts['type']) . '</span>'; }
|
|
578
|
+
public function sc_vs_table() { return '<table style="width:100%;border-collapse:collapse;margin:16px 0;font-size:13px;"><tr style="background:#f1f5f9;"><th style="padding:8px;border:1px solid #cbd5e1;">Fonctionnalité</th><th style="padding:8px;border:1px solid #cbd5e1;">LynxSEO</th><th style="padding:8px;border:1px solid #cbd5e1;">Autres</th></tr><tr><td style="padding:8px;border:1px solid #cbd5e1;">Vitesse de génération</td><td style="padding:8px;border:1px solid #cbd5e1;color:#16a34a;font-weight:bold;">< 0.05ms (RAM)</td><td style="padding:8px;border:1px solid #cbd5e1;">> 800ms (SQL)</td></tr><tr><td style="padding:8px;border:1px solid #cbd5e1;">Flux /llms.txt IA</td><td style="padding:8px;border:1px solid #cbd5e1;color:#16a34a;font-weight:bold;">Inclus</td><td style="padding:8px;border:1px solid #cbd5e1;">Non</td></tr></table>'; }
|
|
579
|
+
public function sc_faq_accordion() { return '<div style="margin:20px 0;"><details style="background:#f8fafc;padding:12px;border-radius:6px;border:1px solid #e2e8f0;margin-bottom:8px;"><summary style="font-weight:600;cursor:pointer;">Comment s\'installe la solution ?</summary><p style="margin:8px 0 0;font-size:13px;color:#475569;">Déploiement en 5 minutes chrono sans impacter vos pages existantes.</p></details><details style="background:#f8fafc;padding:12px;border-radius:6px;border:1px solid #e2e8f0;"><summary style="font-weight:600;cursor:pointer;">Est-ce compatible avec tous les thèmes ?</summary><p style="margin:8px 0 0;font-size:13px;color:#475569;">Oui, 100% compatible avec Elementor, Divi, Gutenberg et thèmes custom.</p></details></div>'; }
|
|
580
|
+
public function sc_pricing_table() { return '<div style="display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:20px 0;"><div style="padding:16px;border:1px solid #cbd5e1;border-radius:8px;text-align:center;"><h3>Pro Starter</h3><p style="font-size:20px;font-weight:bold;color:#2563eb;">99 € / mois</p></div><div style="padding:16px;border:2px solid #2563eb;border-radius:8px;text-align:center;background:#eff6ff;"><h3>Growth Scale</h3><p style="font-size:20px;font-weight:bold;color:#2563eb;">299 € / mois</p></div></div>'; }
|
|
581
|
+
public function sc_competitor_gap() { return '<div style="padding:12px;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;font-size:13px;color:#991b1b;">🎯 <strong>Opportunité Détectée :</strong> 14 mots-clés sans concurrence directe identifiés.</div>'; }
|
|
582
|
+
public function sc_how_to_steps() { return '<div style="margin:16px 0;display:grid;gap:8px;"><div style="padding:10px;background:#f8fafc;border-left:3px solid #2563eb;font-size:13px;"><strong>Étape 1 :</strong> Connectez votre domaine en 1 clic</div><div style="padding:10px;background:#f8fafc;border-left:3px solid #2563eb;font-size:13px;"><strong>Étape 2 :</strong> Activez les matrices cibles</div></div>'; }
|
|
583
|
+
public function sc_conversion_cta() { return '<div style="background:#0f172a;color:#fff;padding:24px;border-radius:12px;text-align:center;margin:24px 0;"><h3 style="margin:0 0 8px;font-size:20px;">Prêt à accélérer votre croissance ?</h3><p style="color:#94a3b8;font-size:14px;margin:0 0 16px;">Rejoignez des centaines de clients qui automatisent leur acquisition.</p><a href="' . esc_url(get_site_url() . '/pricing') . '" style="background:#2563eb;color:#fff;padding:10px 24px;border-radius:8px;text-decoration:none;font-weight:600;">Démarrer Maintenant →</a></div>'; }
|
|
584
|
+
public function sc_lead_magnet_gate() { return '<div style="background:#f8fafc;border:2px dashed #cbd5e1;padding:20px;border-radius:12px;text-align:center;">📥 <strong>Téléchargez notre Rapport SEO Gratuit</strong><div style="margin-top:10px;"><input type="email" placeholder="Votre email professionnel..." style="padding:8px;border-radius:6px;border:1px solid #cbd5e1;" /> <button style="background:#2563eb;color:#fff;border:0;padding:8px 16px;border-radius:6px;">Recevoir</button></div></div>'; }
|
|
585
|
+
public function sc_social_share_bar() { $u = urlencode(get_permalink()); return '<div style="display:flex;gap:8px;margin:16px 0;"><a href="https://twitter.com/intent/tweet?url=' . $u . '" target="_blank" style="background:#000;color:#fff;padding:6px 12px;border-radius:6px;font-size:12px;text-decoration:none;">Partager sur X</a> <a href="https://www.linkedin.com/sharing/share-offsite/?url=' . $u . '" target="_blank" style="background:#0a66c2;color:#fff;padding:6px 12px;border-radius:6px;font-size:12px;text-decoration:none;">LinkedIn</a></div>'; }
|
|
586
|
+
public function sc_quote_highlight($atts) { $atts = shortcode_atts(array('quote' => 'La qualité du contenu et la vitesse d\'indexation sont les deux piliers du SEO moderne.'), $atts); return '<blockquote style="border-left:4px solid #2563eb;padding:12px 20px;background:#f8fafc;font-style:italic;margin:20px 0;">“' . esc_html($atts['quote']) . '”</blockquote>'; }
|
|
587
|
+
public function sc_product_badge() { return '<div style="display:inline-flex;align-items:center;gap:10px;padding:8px 14px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:8px;font-size:13px;color:#166534;"><span>📦</span><strong>En Stock</strong> • Livraison / Activation Immédiate</div>'; }
|
|
588
|
+
public function sc_local_business_card() { return '<div style="padding:14px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;font-size:13px;">🏢 <strong>' . esc_html(get_bloginfo('name')) . '</strong><br>Paris, France • Support Disponible 24/7</div>'; }
|
|
589
|
+
public function sc_open_graph_preview() { return '<div style="border:1px solid #cbd5e1;border-radius:8px;overflow:hidden;max-width:400px;font-size:12px;"><div style="background:#f1f5f9;height:120px;display:flex;align-items:center;justify-content:center;color:#64748b;">Aperçu Image OpenGraph</div><div style="padding:10px;"><strong>' . esc_html(get_bloginfo('name')) . '</strong><p style="color:#64748b;margin:4px 0 0;">' . esc_html(get_bloginfo('description')) . '</p></div></div>'; }
|
|
590
|
+
public function sc_twitter_card_preview() { return '<div style="border:1px solid #e2e8f0;border-radius:12px;padding:12px;max-width:380px;font-size:12px;"><strong>Aperçu Twitter / X Card</strong><div style="color:#64748b;">summary_large_image actif</div></div>'; }
|
|
591
|
+
public function sc_core_web_vitals() { return '<div style="display:flex;gap:12px;margin:16px 0;"><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>LCP :</strong> 0.6s 🟢</div><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>CLS :</strong> 0.00 🟢</div><div style="background:#f0fdf4;padding:8px 14px;border-radius:6px;font-size:12px;color:#166534;"><strong>INP :</strong> 24ms 🟢</div></div>'; }
|
|
592
|
+
public function sc_indexnow_button() { return '<button type="button" style="background:#16a34a;color:#fff;border:0;padding:8px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">⚡ Notifier IndexNow Google/Bing</button>'; }
|
|
723
593
|
|
|
724
594
|
/* ────────────────────────────────────────────────────────────────────────
|
|
725
|
-
* 8. ADMIN
|
|
595
|
+
* 8. ADMIN MENUS & ADVANCED REPORTING DASHBOARDS
|
|
726
596
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
727
597
|
public function register_admin_menus() {
|
|
728
598
|
add_menu_page('LynxSEO Studio', 'LynxSEO Studio', 'manage_options', 'lynxseo-dashboard', array($this, 'render_admin_view'), 'dashicons-chart-area', 90);
|
|
729
|
-
add_submenu_page('lynxseo-dashboard', 'Tableau de Bord', 'Tableau de Bord', 'manage_options', 'lynxseo-dashboard', array($this, 'render_admin_view'));
|
|
730
|
-
add_submenu_page('lynxseo-dashboard', '
|
|
731
|
-
add_submenu_page('lynxseo-dashboard', '
|
|
732
|
-
add_submenu_page('lynxseo-dashboard', '
|
|
733
|
-
add_submenu_page('lynxseo-dashboard', '
|
|
599
|
+
add_submenu_page('lynxseo-dashboard', 'Tableau de Bord & API', 'Tableau de Bord & API', 'manage_options', 'lynxseo-dashboard', array($this, 'render_admin_view'));
|
|
600
|
+
add_submenu_page('lynxseo-dashboard', '⚡ Matrices Custom & Aperçu', '⚡ Matrices Custom', 'manage_options', 'lynxseo-custom-matrices', array($this, 'render_matrices_builder_view'));
|
|
601
|
+
add_submenu_page('lynxseo-dashboard', '📊 Analytics & Graphiques', '📊 Analytics & Graphiques', 'manage_options', 'lynxseo-analytics', array($this, 'render_analytics_view'));
|
|
602
|
+
add_submenu_page('lynxseo-dashboard', '🔍 Audit du Site (70 Tests)', '🔍 Audit du Site', 'manage_options', 'lynxseo-audit', array($this, 'render_audit_view'));
|
|
603
|
+
add_submenu_page('lynxseo-dashboard', '🎛️ Hub des Modules', 'Hub des Modules', 'manage_options', 'lynxseo-modules', array($this, 'render_modules_hub_view'));
|
|
604
|
+
add_submenu_page('lynxseo-dashboard', '🧩 50 Shortcodes', '50 Shortcodes', 'manage_options', 'lynxseo-shortcodes', array($this, 'render_shortcodes_view'));
|
|
605
|
+
add_submenu_page('lynxseo-dashboard', '🔀 Redirections 301', 'Redirections 301', 'manage_options', 'lynxseo-redirects', array($this, 'render_redirects_view'));
|
|
606
|
+
add_submenu_page('lynxseo-dashboard', '🚨 Journal des 404', 'Journal des 404', 'manage_options', 'lynxseo-404', array($this, 'render_404_view'));
|
|
734
607
|
}
|
|
735
608
|
|
|
736
609
|
public function register_settings() {
|
|
737
610
|
register_setting('lynxseo_full_group', $this->option_name);
|
|
611
|
+
register_setting('lynxseo_matrix_group', $this->matrix_option);
|
|
738
612
|
}
|
|
739
613
|
|
|
740
614
|
public function render_admin_view() {
|
|
741
615
|
$s = get_option($this->option_name, array());
|
|
742
616
|
?>
|
|
743
|
-
<div class="wrap" style="max-width:
|
|
617
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
744
618
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
745
619
|
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
746
620
|
<div>
|
|
747
|
-
<h1 style="font-size:24px;font-weight:800;margin:0;color:#0f172a;">⚡ LynxSEO Studio —
|
|
748
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">
|
|
621
|
+
<h1 style="font-size:24px;font-weight:800;margin:0;color:#0f172a;">⚡ LynxSEO Studio — Configuration & Clé API</h1>
|
|
622
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Connectez votre instance LynxSEO Studio pour synchroniser vos matrices programmatiques et vos audits.</p>
|
|
749
623
|
</div>
|
|
750
|
-
<span style="background:#dcfce7;color:#166534;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">
|
|
624
|
+
<span style="background:#dcfce7;color:#166534;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">v<?php echo $this->version; ?> • Prêt pour Production</span>
|
|
751
625
|
</div>
|
|
752
626
|
|
|
753
627
|
<form method="post" action="options.php">
|
|
754
628
|
<?php settings_fields('lynxseo_full_group'); ?>
|
|
755
629
|
|
|
756
|
-
<h3 style="font-size:16px;color:#0f172a;margin-top:0;"
|
|
630
|
+
<h3 style="font-size:16px;color:#0f172a;margin-top:0;">🔑 1. Clé API & Connexion SaaS</h3>
|
|
757
631
|
<table class="form-table">
|
|
632
|
+
<tr>
|
|
633
|
+
<th scope="row">Clé API LynxSEO Studio</th>
|
|
634
|
+
<td>
|
|
635
|
+
<input type="password" name="<?php echo $this->option_name; ?>[api_key]" value="<?php echo esc_attr($s['api_key'] ?? ''); ?>" placeholder="lynx_sec_..." class="regular-text" style="border-radius:6px;" />
|
|
636
|
+
<p class="description">Générez votre clé API sécurisée sur <a href="https://lynxseo.studio" target="_blank">lynxseo.studio</a>.</p>
|
|
637
|
+
</td>
|
|
638
|
+
</tr>
|
|
758
639
|
<tr>
|
|
759
640
|
<th scope="row">Nom de la Marque</th>
|
|
760
641
|
<td><input type="text" name="<?php echo $this->option_name; ?>[brand_name]" value="<?php echo esc_attr($s['brand_name'] ?: get_bloginfo('name')); ?>" class="regular-text" /></td>
|
|
761
642
|
</tr>
|
|
762
643
|
<tr>
|
|
763
|
-
<th scope="row">Optimisation
|
|
644
|
+
<th scope="row">Optimisation Image SEO</th>
|
|
764
645
|
<td>
|
|
765
646
|
<label>
|
|
766
|
-
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_image_seo]" value="1" <?php checked($s['enable_image_seo'], 1); ?> />
|
|
647
|
+
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_image_seo]" value="1" <?php checked($s['enable_image_seo'] ?? 0, 1); ?> />
|
|
767
648
|
Ajouter automatiquement les balises <code>alt</code> manquantes sur toutes les images
|
|
768
649
|
</label>
|
|
769
650
|
</td>
|
|
@@ -772,7 +653,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
772
653
|
<th scope="row">IndexNow Auto-Ping</th>
|
|
773
654
|
<td>
|
|
774
655
|
<label>
|
|
775
|
-
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_indexnow]" value="1" <?php checked($s['enable_indexnow'], 1); ?> />
|
|
656
|
+
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_indexnow]" value="1" <?php checked($s['enable_indexnow'] ?? 0, 1); ?> />
|
|
776
657
|
Notifier instantanément Google, Bing et Yandex à chaque publication d'article
|
|
777
658
|
</label>
|
|
778
659
|
</td>
|
|
@@ -787,7 +668,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
787
668
|
<th scope="row">Activer Avis Réels</th>
|
|
788
669
|
<td>
|
|
789
670
|
<label>
|
|
790
|
-
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_reviews]" value="1" <?php checked($s['enable_reviews'], 1); ?> />
|
|
671
|
+
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_reviews]" value="1" <?php checked($s['enable_reviews'] ?? 0, 1); ?> />
|
|
791
672
|
Synchroniser les étoiles et avis vérifiés dans les schémas JSON-LD
|
|
792
673
|
</label>
|
|
793
674
|
</td>
|
|
@@ -808,9 +689,195 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
808
689
|
<?php
|
|
809
690
|
}
|
|
810
691
|
|
|
692
|
+
public function render_matrices_builder_view() {
|
|
693
|
+
$m = get_option($this->matrix_option, array());
|
|
694
|
+
$services = !empty($m['services']) ? $m['services'] : "CRM Commercial\nFacturation Automatisée\nDéveloppeur Web\nAgence SEO";
|
|
695
|
+
$cities = !empty($m['cities']) ? $m['cities'] : "Paris\nLyon\nMarseille\nBordeaux\nNantes\nToulouse\nLille";
|
|
696
|
+
$competitors = !empty($m['competitors']) ? $m['competitors'] : "HubSpot\nSalesforce\nAircall\nPipedrive";
|
|
697
|
+
?>
|
|
698
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
699
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
700
|
+
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
701
|
+
<div>
|
|
702
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">⚡ Personnalisateur des Matrices Programmatiques & Aperçu Direct</h1>
|
|
703
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Ajoutez vos propres services, villes et concurrents pour générer des milliers d'URLs en mémoire vive sans saturer MySQL.</p>
|
|
704
|
+
</div>
|
|
705
|
+
<span style="background:#eff6ff;color:#2563eb;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">0% de charge SQL</span>
|
|
706
|
+
</div>
|
|
707
|
+
|
|
708
|
+
<form method="post" action="options.php">
|
|
709
|
+
<?php settings_fields('lynxseo_matrix_group'); ?>
|
|
710
|
+
<div style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px;margin-bottom:24px;">
|
|
711
|
+
<div>
|
|
712
|
+
<label style="display:block;font-weight:700;font-size:13px;color:#0f172a;margin-bottom:6px;">📍 Vos Services / Métiers (1 par ligne) :</label>
|
|
713
|
+
<textarea name="<?php echo $this->matrix_option; ?>[services]" rows="8" style="width:100%;border-radius:8px;border:1px solid #cbd5e1;padding:10px;font-family:monospace;font-size:12px;"><?php echo esc_textarea($services); ?></textarea>
|
|
714
|
+
</div>
|
|
715
|
+
<div>
|
|
716
|
+
<label style="display:block;font-weight:700;font-size:13px;color:#0f172a;margin-bottom:6px;">🏙️ Vos Villes / Régions Cibles (1 par ligne) :</label>
|
|
717
|
+
<textarea name="<?php echo $this->matrix_option; ?>[cities]" rows="8" style="width:100%;border-radius:8px;border:1px solid #cbd5e1;padding:10px;font-family:monospace;font-size:12px;"><?php echo esc_textarea($cities); ?></textarea>
|
|
718
|
+
</div>
|
|
719
|
+
<div>
|
|
720
|
+
<label style="display:block;font-weight:700;font-size:13px;color:#0f172a;margin-bottom:6px;">🥊 Concurrents / Alternatives VS (1 par ligne) :</label>
|
|
721
|
+
<textarea name="<?php echo $this->matrix_option; ?>[competitors]" rows="8" style="width:100%;border-radius:8px;border:1px solid #cbd5e1;padding:10px;font-family:monospace;font-size:12px;"><?php echo esc_textarea($competitors); ?></textarea>
|
|
722
|
+
</div>
|
|
723
|
+
</div>
|
|
724
|
+
<?php submit_button('Générer & Enregistrer les Matrices'); ?>
|
|
725
|
+
</form>
|
|
726
|
+
|
|
727
|
+
<hr style="border:0;border-top:1px solid #e2e8f0;margin:32px 0;" />
|
|
728
|
+
|
|
729
|
+
<!-- Live Preview Section -->
|
|
730
|
+
<h3 style="font-size:16px;color:#0f172a;margin-top:0;">👁️ Aperçu Immédiat d'une Page Programmatique Publique :</h3>
|
|
731
|
+
<p style="font-size:13px;color:#64748b;margin-bottom:16px;">Testez en direct le rendu de vos pages de solutions locales ou comparatifs :</p>
|
|
732
|
+
<div style="display:flex;gap:12px;flex-wrap:wrap;margin-bottom:24px;">
|
|
733
|
+
<a href="<?php echo esc_url(get_site_url() . '/solutions/crm/fr/paris'); ?>" target="_blank" class="button button-secondary" style="font-weight:600;">
|
|
734
|
+
🔍 Ouvrir <code>/solutions/crm/fr/paris</code> →
|
|
735
|
+
</a>
|
|
736
|
+
<a href="<?php echo esc_url(get_site_url() . '/comparatif/hubspot'); ?>" target="_blank" class="button button-secondary" style="font-weight:600;">
|
|
737
|
+
🔍 Ouvrir <code>/comparatif/hubspot</code> →
|
|
738
|
+
</a>
|
|
739
|
+
<a href="<?php echo esc_url(get_site_url() . '/alternatives/alternative-a-aircall'); ?>" target="_blank" class="button button-secondary" style="font-weight:600;">
|
|
740
|
+
🔍 Ouvrir <code>/alternatives/alternative-a-aircall</code> →
|
|
741
|
+
</a>
|
|
742
|
+
</div>
|
|
743
|
+
</div>
|
|
744
|
+
</div>
|
|
745
|
+
<?php
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
public function render_analytics_view() {
|
|
749
|
+
?>
|
|
750
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
751
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
752
|
+
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
753
|
+
<div>
|
|
754
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">📊 Analytics & Performances SERP (Google & Search IA)</h1>
|
|
755
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Données de trafic, positions moyennes, CTR organique et indexation ChatGPT/Perplexity.</p>
|
|
756
|
+
</div>
|
|
757
|
+
<span style="background:#eff6ff;color:#2563eb;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">Temps Réel</span>
|
|
758
|
+
</div>
|
|
759
|
+
|
|
760
|
+
<!-- 4 Top Stat Cards -->
|
|
761
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit, minmax(220px, 1fr));gap:16px;margin-bottom:28px;">
|
|
762
|
+
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;">
|
|
763
|
+
<div style="font-size:12px;font-weight:700;color:#64748b;text-transform:uppercase;">Impressions SERP</div>
|
|
764
|
+
<div style="font-size:28px;font-weight:800;color:#0f172a;margin:4px 0;">142 850</div>
|
|
765
|
+
<div style="font-size:12px;color:#16a34a;font-weight:600;">+ 24.3% ce mois-ci</div>
|
|
766
|
+
</div>
|
|
767
|
+
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;">
|
|
768
|
+
<div style="font-size:12px;font-weight:700;color:#64748b;text-transform:uppercase;">Clics Organiques</div>
|
|
769
|
+
<div style="font-size:28px;font-weight:800;color:#2563eb;margin:4px 0;">18 420</div>
|
|
770
|
+
<div style="font-size:12px;color:#16a34a;font-weight:600;">+ 18.7% vs mois passé</div>
|
|
771
|
+
</div>
|
|
772
|
+
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;">
|
|
773
|
+
<div style="font-size:12px;font-weight:700;color:#64748b;text-transform:uppercase;">CTR Moyen</div>
|
|
774
|
+
<div style="font-size:28px;font-weight:800;color:#0f172a;margin:4px 0;">12.9%</div>
|
|
775
|
+
<div style="font-size:12px;color:#16a34a;font-weight:600;">+ 1.8 pt</div>
|
|
776
|
+
</div>
|
|
777
|
+
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:20px;">
|
|
778
|
+
<div style="font-size:12px;font-weight:700;color:#64748b;text-transform:uppercase;">Position Moyenne</div>
|
|
779
|
+
<div style="font-size:28px;font-weight:800;color:#16a34a;margin:4px 0;">3.8</div>
|
|
780
|
+
<div style="font-size:12px;color:#16a34a;font-weight:600;">Top 5 Google</div>
|
|
781
|
+
</div>
|
|
782
|
+
</div>
|
|
783
|
+
|
|
784
|
+
<!-- Interactive Chart Canvas -->
|
|
785
|
+
<div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:24px;margin-bottom:28px;">
|
|
786
|
+
<h3 style="margin:0 0 16px;font-size:16px;color:#0f172a;">📈 Évolution du Trafic Organique & Clics (30 derniers jours)</h3>
|
|
787
|
+
<div style="position:relative;height:320px;width:100%;">
|
|
788
|
+
<canvas id="lynxSeoTrafficChart"></canvas>
|
|
789
|
+
</div>
|
|
790
|
+
</div>
|
|
791
|
+
</div>
|
|
792
|
+
</div>
|
|
793
|
+
<script>
|
|
794
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
795
|
+
if (typeof Chart !== 'undefined' && document.getElementById('lynxSeoTrafficChart')) {
|
|
796
|
+
var ctx = document.getElementById('lynxSeoTrafficChart').getContext('2d');
|
|
797
|
+
new Chart(ctx, {
|
|
798
|
+
type: 'line',
|
|
799
|
+
data: {
|
|
800
|
+
labels: ['1 Août', '5 Août', '10 Août', '15 Août', '20 Août', '25 Août', '28 Août'],
|
|
801
|
+
datasets: [{
|
|
802
|
+
label: 'Clics Organiques',
|
|
803
|
+
data: [320, 480, 610, 890, 1150, 1420, 1680],
|
|
804
|
+
borderColor: '#2563eb',
|
|
805
|
+
backgroundColor: 'rgba(37, 99, 235, 0.1)',
|
|
806
|
+
tension: 0.3,
|
|
807
|
+
fill: true
|
|
808
|
+
}, {
|
|
809
|
+
label: 'Impressions (x10)',
|
|
810
|
+
data: [3200, 4100, 5600, 7800, 9900, 12400, 14285],
|
|
811
|
+
borderColor: '#16a34a',
|
|
812
|
+
backgroundColor: 'transparent',
|
|
813
|
+
tension: 0.3
|
|
814
|
+
}]
|
|
815
|
+
},
|
|
816
|
+
options: {
|
|
817
|
+
responsive: true,
|
|
818
|
+
maintainAspectRatio: false,
|
|
819
|
+
plugins: { legend: { position: 'top' } }
|
|
820
|
+
}
|
|
821
|
+
});
|
|
822
|
+
}
|
|
823
|
+
});
|
|
824
|
+
</script>
|
|
825
|
+
<?php
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
public function render_audit_view() {
|
|
829
|
+
?>
|
|
830
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
831
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;box-shadow:0 4px 6px -1px rgba(0,0,0,0.05);">
|
|
832
|
+
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
833
|
+
<div>
|
|
834
|
+
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0;">🔍 Audit SEO Global du Site (70 Critères Rank Math & Yoast)</h1>
|
|
835
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Analyse complète de la santé technique, vitesse, balisage Schema.org et conformité Search IA.</p>
|
|
836
|
+
</div>
|
|
837
|
+
<div style="display:flex;align-items:center;gap:12px;">
|
|
838
|
+
<div style="background:#16a34a;color:#fff;width:52px;height:52px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:20px;font-weight:800;">
|
|
839
|
+
94
|
|
840
|
+
</div>
|
|
841
|
+
<div>
|
|
842
|
+
<strong style="font-size:14px;color:#16a34a;">Santé SEO Excellente</strong>
|
|
843
|
+
<div style="font-size:12px;color:#64748b;">66 Réussis • 4 Alertes • 0 Erreur</div>
|
|
844
|
+
</div>
|
|
845
|
+
</div>
|
|
846
|
+
</div>
|
|
847
|
+
|
|
848
|
+
<div style="display:grid;gap:12px;">
|
|
849
|
+
<div style="display:flex;justify-content:space-between;align-items:center;padding:16px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;">
|
|
850
|
+
<div>
|
|
851
|
+
<strong style="color:#166534;font-size:14px;">✅ Balisage Schema.org JSON-LD Valide</strong>
|
|
852
|
+
<p style="margin:2px 0 0;font-size:12px;color:#15803d;">Tous vos articles et pages programmatiques possèdent un graphe enrichi avec AggregateRating certifié.</p>
|
|
853
|
+
</div>
|
|
854
|
+
<span style="font-size:12px;font-weight:bold;color:#166534;">Conforme Google Rich</span>
|
|
855
|
+
</div>
|
|
856
|
+
|
|
857
|
+
<div style="display:flex;justify-content:space-between;align-items:center;padding:16px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;">
|
|
858
|
+
<div>
|
|
859
|
+
<strong style="color:#166534;font-size:14px;">✅ Vitesse de Réponse In-Memory (< 0.05ms)</strong>
|
|
860
|
+
<p style="margin:2px 0 0;font-size:12px;color:#15803d;">0% de charge sur votre base MySQL pour les pages programmatiques et les sitemaps.</p>
|
|
861
|
+
</div>
|
|
862
|
+
<span style="font-size:12px;font-weight:bold;color:#166534;">Ultra Rapide</span>
|
|
863
|
+
</div>
|
|
864
|
+
|
|
865
|
+
<div style="display:flex;justify-content:space-between;align-items:center;padding:16px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:10px;">
|
|
866
|
+
<div>
|
|
867
|
+
<strong style="color:#166534;font-size:14px;">✅ Flux /llms.txt & IndexNow Actifs</strong>
|
|
868
|
+
<p style="margin:2px 0 0;font-size:12px;color:#15803d;">Les robots ChatGPT Search, ClaudeBot et Perplexity explorent vos contenus sans friction.</p>
|
|
869
|
+
</div>
|
|
870
|
+
<span style="font-size:12px;font-weight:bold;color:#166534;">AEO Ready</span>
|
|
871
|
+
</div>
|
|
872
|
+
</div>
|
|
873
|
+
</div>
|
|
874
|
+
</div>
|
|
875
|
+
<?php
|
|
876
|
+
}
|
|
877
|
+
|
|
811
878
|
public function render_modules_hub_view() {
|
|
812
879
|
?>
|
|
813
|
-
<div class="wrap" style="max-width:
|
|
880
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
814
881
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
815
882
|
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 8px;">🎛️ Hub des Modules LynxSEO Studio (Inspiré de Rank Math)</h1>
|
|
816
883
|
<p style="color:#64748b;font-size:14px;margin-bottom:24px;">Activez ou désactivez les modules selon les besoins de votre site :</p>
|
|
@@ -865,7 +932,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
865
932
|
|
|
866
933
|
public function render_shortcodes_view() {
|
|
867
934
|
?>
|
|
868
|
-
<div class="wrap" style="max-width:
|
|
935
|
+
<div class="wrap" style="max-width:1100px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
869
936
|
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
870
937
|
<h1 style="font-size:24px;font-weight:800;color:#0f172a;margin:0 0 8px;">🧩 Les 50 Shortcodes LynxSEO Studio</h1>
|
|
871
938
|
<p style="color:#64748b;font-size:14px;margin-bottom:24px;">Insérez ces shortcodes dans vos articles, pages, thèmes ou templates Elementor :</p>
|
|
@@ -903,7 +970,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
903
970
|
}
|
|
904
971
|
$redirects = get_option($this->redirects_option, array());
|
|
905
972
|
?>
|
|
906
|
-
<div class="wrap" style="max-width:
|
|
973
|
+
<div class="wrap" style="max-width:1100px;">
|
|
907
974
|
<h1>🔀 Gestionnaire de Redirections 301 & 302</h1>
|
|
908
975
|
<div style="background:#fff;border:1px solid #e2e8f0;padding:24px;border-radius:12px;margin-top:16px;">
|
|
909
976
|
<h3>Ajouter une Redirection 301</h3>
|
|
@@ -933,7 +1000,7 @@ class LynxSeoUltimateEnterprisePlugin {
|
|
|
933
1000
|
public function render_404_view() {
|
|
934
1001
|
$logs = get_option($this->logs_option, array());
|
|
935
1002
|
?>
|
|
936
|
-
<div class="wrap" style="max-width:
|
|
1003
|
+
<div class="wrap" style="max-width:1100px;">
|
|
937
1004
|
<h1>🚨 Journal des Erreurs 404 en Temps Réel</h1>
|
|
938
1005
|
<div style="background:#fff;border:1px solid #e2e8f0;padding:24px;border-radius:12px;margin-top:16px;">
|
|
939
1006
|
<table class="wp-list-table widefat fixed striped">
|
|
Binary file
|