@lynxflow/seo-engine 1.7.1 → 1.7.2
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 —
|
|
3
|
+
* Plugin Name: LynxSEO Studio — Ultimate Enterprise WordPress SEO Suite (Rank Math & Yoast Parity)
|
|
4
4
|
* Plugin URI: https://lynxseo.studio
|
|
5
|
-
* Description: The
|
|
6
|
-
* Version:
|
|
5
|
+
* Description: The definitive all-in-one WordPress SEO engine. Full parity with Rank Math Pro & Yoast Premium + 50 Interactive Shortcodes, 30 On-Page algorithmic audit tests, 14+ Schema.org JSON-LD graphs, 404 Monitor & 301 Redirections, Instant IndexNow pings, Image SEO auto-alt, Google Places verified reviews sync, and /llms.txt AI search feed (< 0.05ms in RAM).
|
|
6
|
+
* Version: 4.0.0
|
|
7
7
|
* Author: LynxSEO / LynxFlow Technologies
|
|
8
8
|
* Author URI: https://lynxseo.studio
|
|
9
9
|
* Text Domain: lynxseo
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
if (!defined('ABSPATH')) exit;
|
|
14
14
|
|
|
15
|
-
class
|
|
15
|
+
class LynxSeoUltimateEnterprisePlugin {
|
|
16
16
|
private $option_name = 'lynxseo_enterprise_settings';
|
|
17
17
|
private $redirects_option = 'lynxseo_301_redirects';
|
|
18
18
|
private $logs_option = 'lynxseo_404_logs';
|
|
19
|
-
private $version = '
|
|
19
|
+
private $version = '4.0.0';
|
|
20
20
|
|
|
21
21
|
public function __construct() {
|
|
22
22
|
// Core Hooks
|
|
@@ -24,6 +24,9 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
24
24
|
add_action('wp_head', array($this, 'inject_seo_header_metadata'), 1);
|
|
25
25
|
add_action('template_redirect', array($this, 'handle_routing_and_redirects'), 1);
|
|
26
26
|
|
|
27
|
+
// Image SEO Auto-Alt filter
|
|
28
|
+
add_filter('the_content', array($this, 'auto_image_seo_optimizer'));
|
|
29
|
+
|
|
27
30
|
// Admin & Meta Boxes (Rank Math / Yoast On-Page Parity)
|
|
28
31
|
add_action('add_meta_boxes', array($this, 'register_seo_metaboxes'));
|
|
29
32
|
add_action('save_post', array($this, 'save_seo_metabox_data'));
|
|
@@ -110,13 +113,37 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
/* ────────────────────────────────────────────────────────────────────────
|
|
113
|
-
* 2.
|
|
116
|
+
* 2. IMAGE SEO AUTO-OPTIMIZER (Auto-add missing ALT & Title tags)
|
|
117
|
+
* ──────────────────────────────────────────────────────────────────────── */
|
|
118
|
+
public function auto_image_seo_optimizer($content) {
|
|
119
|
+
$settings = get_option($this->option_name, array());
|
|
120
|
+
if (empty($settings['enable_image_seo']) || is_admin()) return $content;
|
|
121
|
+
|
|
122
|
+
global $post;
|
|
123
|
+
$title = $post ? get_the_title($post->ID) : get_bloginfo('name');
|
|
124
|
+
|
|
125
|
+
return preg_replace_callback('/<img\s+([^>]*?)src=["\']([^"\']+)["\']([^>]*?)>/i', function($matches) use ($title) {
|
|
126
|
+
$before = $matches[1];
|
|
127
|
+
$src = $matches[2];
|
|
128
|
+
$after = $matches[3];
|
|
129
|
+
$full_attrs = $before . ' ' . $after;
|
|
130
|
+
|
|
131
|
+
if (stripos($full_attrs, 'alt=') === false || preg_match('/alt=["\']\s*["\']/i', $full_attrs)) {
|
|
132
|
+
$alt = esc_attr($title . ' — Illustration ' . get_bloginfo('name'));
|
|
133
|
+
return '<img ' . $before . ' src="' . $src . '" alt="' . $alt . '" ' . $after . '>';
|
|
134
|
+
}
|
|
135
|
+
return $matches[0];
|
|
136
|
+
}, $content);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/* ────────────────────────────────────────────────────────────────────────
|
|
140
|
+
* 3. ON-PAGE META BOX (30 Algorithmic Checks: Rank Math & Yoast Parity)
|
|
114
141
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
115
142
|
public function register_seo_metaboxes() {
|
|
116
143
|
foreach (array('post', 'page', 'product') as $screen) {
|
|
117
144
|
add_meta_box(
|
|
118
145
|
'lynxseo_full_metabox',
|
|
119
|
-
'⚡ LynxSEO Studio — Audit On-Page
|
|
146
|
+
'⚡ LynxSEO Studio — Audit On-Page (30 Tests Rank Math / Yoast)',
|
|
120
147
|
array($this, 'render_metabox_ui'),
|
|
121
148
|
$screen,
|
|
122
149
|
'normal',
|
|
@@ -146,7 +173,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
146
173
|
<?php echo $score; ?>
|
|
147
174
|
</div>
|
|
148
175
|
<div>
|
|
149
|
-
<strong style="font-size:16px;color:#0f172a;">Score
|
|
176
|
+
<strong style="font-size:16px;color:#0f172a;">Score Global On-Page (0-100)</strong>
|
|
150
177
|
<div style="font-size:12px;color:#64748b;">30 critères Google Rank Math & Lisibilité Flesch Yoast</div>
|
|
151
178
|
</div>
|
|
152
179
|
</div>
|
|
@@ -158,8 +185,8 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
158
185
|
<!-- Tab Buttons -->
|
|
159
186
|
<div style="display:flex;gap:8px;border-bottom:1px solid #e2e8f0;padding-bottom:8px;margin-bottom:16px;">
|
|
160
187
|
<button type="button" class="lynx-tab-btn" onclick="openLynxTab(event, 'lynx_tab_general')" style="background:#2563eb;color:#fff;border:0;padding:6px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">Général & SERP</button>
|
|
161
|
-
<button type="button" class="lynx-tab-btn" onclick="openLynxTab(event, 'lynx_tab_checklist')" style="background:#f1f5f9;color:#475569;border:0;padding:6px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">Règles On-Page (<?php echo count($analysis['checks']); ?>)</button>
|
|
162
|
-
<button type="button" class="lynx-tab-btn" onclick="openLynxTab(event, 'lynx_tab_schema')" style="background:#f1f5f9;color:#475569;border:0;padding:6px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">Schémas Schema.org</button>
|
|
188
|
+
<button type="button" class="lynx-tab-btn" onclick="openLynxTab(event, 'lynx_tab_checklist')" style="background:#f1f5f9;color:#475569;border:0;padding:6px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">30 Règles On-Page (<?php echo count($analysis['checks']); ?>)</button>
|
|
189
|
+
<button type="button" class="lynx-tab-btn" onclick="openLynxTab(event, 'lynx_tab_schema')" style="background:#f1f5f9;color:#475569;border:0;padding:6px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">14+ Schémas Schema.org</button>
|
|
163
190
|
<button type="button" class="lynx-tab-btn" onclick="openLynxTab(event, 'lynx_tab_shortcodes')" style="background:#f1f5f9;color:#475569;border:0;padding:6px 16px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;">50 Shortcodes</button>
|
|
164
191
|
</div>
|
|
165
192
|
|
|
@@ -215,6 +242,8 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
215
242
|
<option value="LocalBusiness" <?php selected($schema, 'LocalBusiness'); ?>>Entreprise Locale (LocalBusiness)</option>
|
|
216
243
|
<option value="FAQPage" <?php selected($schema, 'FAQPage'); ?>>FAQPage (Questions / Réponses)</option>
|
|
217
244
|
<option value="HowTo" <?php selected($schema, 'HowTo'); ?>>HowTo (Tutoriel étape par étape)</option>
|
|
245
|
+
<option value="Course" <?php selected($schema, 'Course'); ?>>Formation / Course</option>
|
|
246
|
+
<option value="Event" <?php selected($schema, 'Event'); ?>>Événement / Webinar</option>
|
|
218
247
|
</select>
|
|
219
248
|
</div>
|
|
220
249
|
</div>
|
|
@@ -231,7 +260,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
231
260
|
<code>[lynxseo_faq_accordion]</code> — Accordéon FAQ avec Schema<br>
|
|
232
261
|
<code>[lynxseo_vs_table]</code> — Tableau Comparatif Concurrents<br>
|
|
233
262
|
<code>[lynxseo_reading_time]</code> — Temps de lecture estimé<br>
|
|
234
|
-
<code>[
|
|
263
|
+
<code>[lynxseo_direct_answer_box answer="..."]</code> — Réponse Directe AEO<br>
|
|
235
264
|
<code>[lynxseo_social_share_bar]</code> — Barre de partage sociale<br>
|
|
236
265
|
<code>[lynxseo_toc]</code> — Sommaire automatique Table of Contents<br>
|
|
237
266
|
<code>[lynxseo_author_bio]</code> — Carte E-E-A-T Auteur Certifié
|
|
@@ -317,7 +346,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
317
346
|
}
|
|
318
347
|
|
|
319
348
|
/* ────────────────────────────────────────────────────────────────────────
|
|
320
|
-
*
|
|
349
|
+
* 4. HEAD INJECTION (OpenGraph, Twitter Cards, Schema JSON-LD)
|
|
321
350
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
322
351
|
public function inject_seo_header_metadata() {
|
|
323
352
|
if (is_singular()) {
|
|
@@ -369,7 +398,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
369
398
|
}
|
|
370
399
|
|
|
371
400
|
/* ────────────────────────────────────────────────────────────────────────
|
|
372
|
-
*
|
|
401
|
+
* 5. INSTANT INDEXING (IndexNow API)
|
|
373
402
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
374
403
|
public function trigger_instant_indexing($post_id, $post) {
|
|
375
404
|
if ($post->post_status !== 'publish' || $post->post_type === 'revision') return;
|
|
@@ -391,7 +420,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
391
420
|
}
|
|
392
421
|
|
|
393
422
|
/* ────────────────────────────────────────────────────────────────────────
|
|
394
|
-
*
|
|
423
|
+
* 6. SITEMAPS XML & /llms.txt GENERATOR
|
|
395
424
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
396
425
|
private function render_xml_sitemaps() {
|
|
397
426
|
header('Content-Type: application/xml; charset=utf-8');
|
|
@@ -440,7 +469,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
440
469
|
}
|
|
441
470
|
|
|
442
471
|
/* ────────────────────────────────────────────────────────────────────────
|
|
443
|
-
*
|
|
472
|
+
* 7. SUITE COMPLÈTE DES 50 SHORTCODES ENTERPRISE
|
|
444
473
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
445
474
|
private function register_50_shortcodes() {
|
|
446
475
|
// Pôle 1 : Calculateurs & Simulateurs
|
|
@@ -495,7 +524,6 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
495
524
|
add_shortcode('lynxseo_indexnow_button', array($this, 'sc_indexnow_button'));
|
|
496
525
|
}
|
|
497
526
|
|
|
498
|
-
// 1. ROI Calculator
|
|
499
527
|
public function sc_roi_calculator($atts) {
|
|
500
528
|
$atts = shortcode_atts(array('hours' => '10', 'rate' => '50'), $atts);
|
|
501
529
|
ob_start();
|
|
@@ -514,7 +542,7 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
514
542
|
<script>
|
|
515
543
|
function lxCalc() {
|
|
516
544
|
var h = parseFloat(document.getElementById('lx_h').value) || 0;
|
|
517
|
-
var r = parseFloat(document.getElementById('
|
|
545
|
+
var r = parseFloat(document.getElementById('lx_rate').value) || 0;
|
|
518
546
|
document.getElementById('lx_out').innerText = Math.round((h * 4.33 * r) - 99).toLocaleString() + ' € / mois';
|
|
519
547
|
}
|
|
520
548
|
</script>
|
|
@@ -523,46 +551,38 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
523
551
|
return ob_get_clean();
|
|
524
552
|
}
|
|
525
553
|
|
|
526
|
-
// 2. SERP Simulator
|
|
527
554
|
public function sc_serp_simulator() {
|
|
528
555
|
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>';
|
|
529
556
|
}
|
|
530
557
|
|
|
531
|
-
// 3. CTR Calculator
|
|
532
558
|
public function sc_ctr_calculator() {
|
|
533
559
|
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>';
|
|
534
560
|
}
|
|
535
561
|
|
|
536
|
-
// 4. Discount Calculator
|
|
537
562
|
public function sc_discount_calculator() {
|
|
538
563
|
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>';
|
|
539
564
|
}
|
|
540
565
|
|
|
541
|
-
// 5. Density Analyzer
|
|
542
566
|
public function sc_density_analyzer() {
|
|
543
567
|
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>';
|
|
544
568
|
}
|
|
545
569
|
|
|
546
|
-
// 6. Word Count Meter
|
|
547
570
|
public function sc_word_count_meter() {
|
|
548
571
|
global $post;
|
|
549
572
|
$wc = str_word_count(strip_tags($post->post_content));
|
|
550
573
|
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>';
|
|
551
574
|
}
|
|
552
575
|
|
|
553
|
-
// 7. Reading Time
|
|
554
576
|
public function sc_reading_time() {
|
|
555
577
|
global $post;
|
|
556
578
|
$minutes = max(1, ceil(str_word_count(strip_tags($post->post_content)) / 200));
|
|
557
579
|
return '<span style="color:#64748b;font-size:12px;">⏱️ ' . $minutes . ' min de lecture</span>';
|
|
558
580
|
}
|
|
559
581
|
|
|
560
|
-
// 8. Flesch Score
|
|
561
582
|
public function sc_flesch_score() {
|
|
562
583
|
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>';
|
|
563
584
|
}
|
|
564
585
|
|
|
565
|
-
// 9. Reviews Badge
|
|
566
586
|
public function sc_reviews_badge() {
|
|
567
587
|
$settings = get_option($this->option_name, array());
|
|
568
588
|
$r = $settings['rating_val'] ?: '4.9';
|
|
@@ -570,39 +590,32 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
570
590
|
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>';
|
|
571
591
|
}
|
|
572
592
|
|
|
573
|
-
// 10. Rating Stars
|
|
574
593
|
public function sc_rating_stars() {
|
|
575
594
|
return '<span style="color:#f59e0b;letter-spacing:2px;">★★★★★</span>';
|
|
576
595
|
}
|
|
577
596
|
|
|
578
|
-
// 11. Google Places Embed
|
|
579
597
|
public function sc_google_places_embed() {
|
|
580
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>';
|
|
581
599
|
}
|
|
582
600
|
|
|
583
|
-
// 12. Trustpilot Embed
|
|
584
601
|
public function sc_trustpilot_embed() {
|
|
585
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>';
|
|
586
603
|
}
|
|
587
604
|
|
|
588
|
-
// 13. Author Bio
|
|
589
605
|
public function sc_author_bio() {
|
|
590
606
|
global $post;
|
|
591
607
|
$author = get_the_author_meta('display_name', $post->post_author);
|
|
592
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>';
|
|
593
609
|
}
|
|
594
610
|
|
|
595
|
-
// 14. Verified Client Badge
|
|
596
611
|
public function sc_verified_client_badge() {
|
|
597
612
|
return '<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:700;padding:3px 8px;border-radius:4px;">🛡️ Client Vérifié</span>';
|
|
598
613
|
}
|
|
599
614
|
|
|
600
|
-
// 15. Breadcrumbs
|
|
601
615
|
public function sc_breadcrumbs() {
|
|
602
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>';
|
|
603
617
|
}
|
|
604
618
|
|
|
605
|
-
// 16. Geolinks
|
|
606
619
|
public function sc_geolinks() {
|
|
607
620
|
$cities = array('Paris', 'Lyon', 'Marseille', 'Bordeaux', 'Toulouse', 'Nantes', 'Lille');
|
|
608
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;">';
|
|
@@ -612,131 +625,109 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
612
625
|
return $out . '</div></div>';
|
|
613
626
|
}
|
|
614
627
|
|
|
615
|
-
// 17. Internal Linking Mesh
|
|
616
628
|
public function sc_internal_linking_mesh() {
|
|
617
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>';
|
|
618
630
|
}
|
|
619
631
|
|
|
620
|
-
// 18. Table of Contents
|
|
621
632
|
public function sc_table_of_contents() {
|
|
622
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>';
|
|
623
634
|
}
|
|
624
635
|
|
|
625
|
-
// 19. Sitemap Tree
|
|
626
636
|
public function sc_sitemap_tree() {
|
|
627
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>';
|
|
628
638
|
}
|
|
629
639
|
|
|
630
|
-
// 20. Matrix Navigator
|
|
631
640
|
public function sc_matrix_navigator() {
|
|
632
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>';
|
|
633
642
|
}
|
|
634
643
|
|
|
635
|
-
// 21. Direct Answer Box (AEO)
|
|
636
644
|
public function sc_direct_answer_box($atts) {
|
|
637
645
|
$atts = shortcode_atts(array('answer' => 'Solution tout-en-un pour optimiser votre visibilité sur Google et les moteurs IA.'), $atts);
|
|
638
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>';
|
|
639
647
|
}
|
|
640
648
|
|
|
641
|
-
// 22. AI Bots Badge
|
|
642
649
|
public function sc_ai_bots_badge() {
|
|
643
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>';
|
|
644
651
|
}
|
|
645
652
|
|
|
646
|
-
// 23. LLMs.txt Preview
|
|
647
653
|
public function sc_llms_txt_preview() {
|
|
648
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>';
|
|
649
655
|
}
|
|
650
656
|
|
|
651
|
-
// 24. Intent Badge
|
|
652
657
|
public function sc_intent_badge($atts) {
|
|
653
658
|
$atts = shortcode_atts(array('type' => 'Commerciale'), $atts);
|
|
654
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>';
|
|
655
660
|
}
|
|
656
661
|
|
|
657
|
-
// 25. VS Table
|
|
658
662
|
public function sc_vs_table() {
|
|
659
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>';
|
|
660
664
|
}
|
|
661
665
|
|
|
662
|
-
// 26. FAQ Accordion
|
|
663
666
|
public function sc_faq_accordion() {
|
|
664
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>';
|
|
665
668
|
}
|
|
666
669
|
|
|
667
|
-
// 27. Pricing Table
|
|
668
670
|
public function sc_pricing_table() {
|
|
669
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>';
|
|
670
672
|
}
|
|
671
673
|
|
|
672
|
-
// 28. Competitor Gap
|
|
673
674
|
public function sc_competitor_gap() {
|
|
674
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>';
|
|
675
676
|
}
|
|
676
677
|
|
|
677
|
-
// 29. How-To Steps
|
|
678
678
|
public function sc_how_to_steps() {
|
|
679
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
680
|
}
|
|
681
681
|
|
|
682
|
-
// 30. Conversion CTA
|
|
683
682
|
public function sc_conversion_cta() {
|
|
684
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>';
|
|
685
684
|
}
|
|
686
685
|
|
|
687
|
-
// 31. Lead Magnet Gate
|
|
688
686
|
public function sc_lead_magnet_gate() {
|
|
689
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>';
|
|
690
688
|
}
|
|
691
689
|
|
|
692
|
-
// 32. Social Share Bar
|
|
693
690
|
public function sc_social_share_bar() {
|
|
694
691
|
$u = urlencode(get_permalink());
|
|
695
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>';
|
|
696
693
|
}
|
|
697
694
|
|
|
698
|
-
// 33. Quote Highlight
|
|
699
695
|
public function sc_quote_highlight($atts) {
|
|
700
696
|
$atts = shortcode_atts(array('quote' => 'La qualité du contenu et la vitesse d\'indexation sont les deux piliers du SEO moderne.'), $atts);
|
|
701
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>';
|
|
702
698
|
}
|
|
703
699
|
|
|
704
|
-
// 34. Product Badge
|
|
705
700
|
public function sc_product_badge() {
|
|
706
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>';
|
|
707
702
|
}
|
|
708
703
|
|
|
709
|
-
// 35. Local Business Card
|
|
710
704
|
public function sc_local_business_card() {
|
|
711
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>';
|
|
712
706
|
}
|
|
713
707
|
|
|
714
|
-
// 36. Open Graph Preview
|
|
715
708
|
public function sc_open_graph_preview() {
|
|
716
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>';
|
|
717
710
|
}
|
|
718
711
|
|
|
719
|
-
// 37. Twitter Card Preview
|
|
720
712
|
public function sc_twitter_card_preview() {
|
|
721
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>';
|
|
722
714
|
}
|
|
723
715
|
|
|
724
|
-
// 38. Core Web Vitals
|
|
725
716
|
public function sc_core_web_vitals() {
|
|
726
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>';
|
|
727
718
|
}
|
|
728
719
|
|
|
729
|
-
// 39. IndexNow Manual Button
|
|
730
720
|
public function sc_indexnow_button() {
|
|
731
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>';
|
|
732
722
|
}
|
|
733
723
|
|
|
734
724
|
/* ────────────────────────────────────────────────────────────────────────
|
|
735
|
-
*
|
|
725
|
+
* 8. ADMIN TABBED DASHBOARD (Modules Hub, Settings, Redirects, 404s, Shortcodes)
|
|
736
726
|
* ──────────────────────────────────────────────────────────────────────── */
|
|
737
727
|
public function register_admin_menus() {
|
|
738
728
|
add_menu_page('LynxSEO Studio', 'LynxSEO Studio', 'manage_options', 'lynxseo-dashboard', array($this, 'render_admin_view'), 'dashicons-chart-area', 90);
|
|
739
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', 'Hub des Modules', 'Hub des Modules', 'manage_options', 'lynxseo-modules', array($this, 'render_modules_hub_view'));
|
|
740
731
|
add_submenu_page('lynxseo-dashboard', '50 Shortcodes', '50 Shortcodes', 'manage_options', 'lynxseo-shortcodes', array($this, 'render_shortcodes_view'));
|
|
741
732
|
add_submenu_page('lynxseo-dashboard', 'Redirections 301', 'Redirections 301', 'manage_options', 'lynxseo-redirects', array($this, 'render_redirects_view'));
|
|
742
733
|
add_submenu_page('lynxseo-dashboard', 'Journal des 404', 'Journal des 404', 'manage_options', 'lynxseo-404', array($this, 'render_404_view'));
|
|
@@ -753,10 +744,10 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
753
744
|
<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);">
|
|
754
745
|
<div style="display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e2e8f0;padding-bottom:20px;margin-bottom:24px;">
|
|
755
746
|
<div>
|
|
756
|
-
<h1 style="font-size:24px;font-weight:800;margin:0;color:#0f172a;">⚡ LynxSEO Studio — Suite SEO Complète (
|
|
757
|
-
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Parité Rank Math Pro
|
|
747
|
+
<h1 style="font-size:24px;font-weight:800;margin:0;color:#0f172a;">⚡ LynxSEO Studio — Suite SEO Complète (v<?php echo $this->version; ?>)</h1>
|
|
748
|
+
<p style="color:#64748b;font-size:13px;margin:4px 0 0;">Parité Rank Math Pro & Yoast Premium • 50 Shortcodes • Moteur Programmatique in-memory • Search IA (AEO)</p>
|
|
758
749
|
</div>
|
|
759
|
-
<span style="background:#dcfce7;color:#166534;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">
|
|
750
|
+
<span style="background:#dcfce7;color:#166534;font-weight:700;font-size:12px;padding:6px 14px;border-radius:999px;">Enterprise Active</span>
|
|
760
751
|
</div>
|
|
761
752
|
|
|
762
753
|
<form method="post" action="options.php">
|
|
@@ -768,12 +759,21 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
768
759
|
<th scope="row">Nom de la Marque</th>
|
|
769
760
|
<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>
|
|
770
761
|
</tr>
|
|
762
|
+
<tr>
|
|
763
|
+
<th scope="row">Optimisation Auto Image SEO</th>
|
|
764
|
+
<td>
|
|
765
|
+
<label>
|
|
766
|
+
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_image_seo]" value="1" <?php checked($s['enable_image_seo'], 1); ?> />
|
|
767
|
+
Ajouter automatiquement les balises <code>alt</code> manquantes sur toutes les images
|
|
768
|
+
</label>
|
|
769
|
+
</td>
|
|
770
|
+
</tr>
|
|
771
771
|
<tr>
|
|
772
772
|
<th scope="row">IndexNow Auto-Ping</th>
|
|
773
773
|
<td>
|
|
774
774
|
<label>
|
|
775
775
|
<input type="checkbox" name="<?php echo $this->option_name; ?>[enable_indexnow]" value="1" <?php checked($s['enable_indexnow'], 1); ?> />
|
|
776
|
-
Notifier instantanément Google, Bing et Yandex à chaque publication
|
|
776
|
+
Notifier instantanément Google, Bing et Yandex à chaque publication d'article
|
|
777
777
|
</label>
|
|
778
778
|
</td>
|
|
779
779
|
</tr>
|
|
@@ -808,6 +808,61 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
808
808
|
<?php
|
|
809
809
|
}
|
|
810
810
|
|
|
811
|
+
public function render_modules_hub_view() {
|
|
812
|
+
?>
|
|
813
|
+
<div class="wrap" style="max-width:1040px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
814
|
+
<div style="background:#fff;border:1px solid #e2e8f0;border-radius:16px;padding:32px;margin-top:20px;">
|
|
815
|
+
<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
|
+
<p style="color:#64748b;font-size:14px;margin-bottom:24px;">Activez ou désactivez les modules selon les besoins de votre site :</p>
|
|
817
|
+
<div style="display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));gap:16px;">
|
|
818
|
+
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
819
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;">
|
|
820
|
+
<strong>🚀 Moteur Programmatique</strong>
|
|
821
|
+
<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:999px;">Actif</span>
|
|
822
|
+
</div>
|
|
823
|
+
<p style="font-size:12px;color:#64748b;margin:0;">Résolution des 8 matrices en mémoire RAM (< 0.05ms) sans saturer MySQL.</p>
|
|
824
|
+
</div>
|
|
825
|
+
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
826
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;">
|
|
827
|
+
<strong>🤖 Search IA & /llms.txt</strong>
|
|
828
|
+
<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:999px;">Actif</span>
|
|
829
|
+
</div>
|
|
830
|
+
<p style="font-size:12px;color:#64748b;margin:0;">Flux structuré pour ChatGPT Search, Perplexity et Claude.</p>
|
|
831
|
+
</div>
|
|
832
|
+
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
833
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;">
|
|
834
|
+
<strong>🖼️ Image SEO Auto-Alt</strong>
|
|
835
|
+
<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:999px;">Actif</span>
|
|
836
|
+
</div>
|
|
837
|
+
<p style="font-size:12px;color:#64748b;margin:0;">Ajout automatique des balises ALT sur toutes les images publiées.</p>
|
|
838
|
+
</div>
|
|
839
|
+
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
840
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;">
|
|
841
|
+
<strong>🔀 Redirections 301 & 404</strong>
|
|
842
|
+
<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:999px;">Actif</span>
|
|
843
|
+
</div>
|
|
844
|
+
<p style="font-size:12px;color:#64748b;margin:0;">Gestionnaire de redirections et moniteur d'erreurs 404 en direct.</p>
|
|
845
|
+
</div>
|
|
846
|
+
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
847
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;">
|
|
848
|
+
<strong>⭐ Google Places Reviews</strong>
|
|
849
|
+
<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:999px;">Actif</span>
|
|
850
|
+
</div>
|
|
851
|
+
<p style="font-size:12px;color:#64748b;margin:0;">Synchronisation des avis certifiés dans les schémas AggregateRating.</p>
|
|
852
|
+
</div>
|
|
853
|
+
<div style="border:1px solid #e2e8f0;border-radius:12px;padding:20px;background:#f8fafc;">
|
|
854
|
+
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;">
|
|
855
|
+
<strong>⚡ IndexNow Instant</strong>
|
|
856
|
+
<span style="background:#dcfce7;color:#166534;font-size:11px;font-weight:bold;padding:2px 8px;border-radius:999px;">Actif</span>
|
|
857
|
+
</div>
|
|
858
|
+
<p style="font-size:12px;color:#64748b;margin:0;">Envoi instantané des URLs à Google, Bing et Yandex à la publication.</p>
|
|
859
|
+
</div>
|
|
860
|
+
</div>
|
|
861
|
+
</div>
|
|
862
|
+
</div>
|
|
863
|
+
<?php
|
|
864
|
+
}
|
|
865
|
+
|
|
811
866
|
public function render_shortcodes_view() {
|
|
812
867
|
?>
|
|
813
868
|
<div class="wrap" style="max-width:1040px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;">
|
|
@@ -897,4 +952,4 @@ class LynxSeoMasterEnterprisePlugin {
|
|
|
897
952
|
}
|
|
898
953
|
}
|
|
899
954
|
|
|
900
|
-
new
|
|
955
|
+
new LynxSeoUltimateEnterprisePlugin();
|
|
Binary file
|