SEO SQUIRRLY™ - Version 11.1.04

Version Description

Download this release

Release Info

Developer cifi
Plugin Icon 128x128 SEO SQUIRRLY™
Version 11.1.04
Comparing to
See all releases

Code changes from version 11.1.03 to 11.1.04

classes/ActionController.php CHANGED
@@ -342,6 +342,7 @@ class SQ_Classes_ActionController extends SQ_Classes_FrontController {
342
  $http_referer = SQ_Classes_Helpers_Tools::getValue('_wp_http_referer', false);
343
  $sq_nonce = SQ_Classes_Helpers_Tools::getValue('sq_nonce', false);
344
 
 
345
  //Let only the logged users to access the actions
346
  if ($cur_action <> '' && $sq_nonce <> '') {
347
 
@@ -387,6 +388,14 @@ class SQ_Classes_ActionController extends SQ_Classes_FrontController {
387
  }
388
  }
389
 
 
 
 
 
 
 
 
 
390
  }
391
 
392
  }
342
  $http_referer = SQ_Classes_Helpers_Tools::getValue('_wp_http_referer', false);
343
  $sq_nonce = SQ_Classes_Helpers_Tools::getValue('sq_nonce', false);
344
 
345
+
346
  //Let only the logged users to access the actions
347
  if ($cur_action <> '' && $sq_nonce <> '') {
348
 
388
  }
389
  }
390
 
391
+ //For Post List
392
+ if(SQ_Classes_Helpers_Tools::isAjax() && $cur_action <> '' && $cur_action == 'inline-save'){
393
+ check_ajax_referer('inlineeditnonce', '_inline_edit');
394
+ SQ_Classes_ObjController::getClass('SQ_Controllers_PostsList')->action();
395
+
396
+ }
397
+
398
+
399
  }
400
 
401
  }
classes/RemoteController.php CHANGED
@@ -430,7 +430,7 @@ class SQ_Classes_RemoteController {
430
  public static function getBriefcase($args = array()) {
431
  self::$apimethod = 'get'; //call method
432
 
433
- $json = json_decode(self::apiCall('api/briefcase/get', $args));
434
 
435
  if (isset($json->error) && $json->error <> '') {
436
  return (new WP_Error('api_error', $json->error));
430
  public static function getBriefcase($args = array()) {
431
  self::$apimethod = 'get'; //call method
432
 
433
+ $json = json_decode(self::apiCall('api/briefcase/get', $args, ['timeout' => 60]));
434
 
435
  if (isset($json->error) && $json->error <> '') {
436
  return (new WP_Error('api_error', $json->error));
classes/helpers/DevKit.php CHANGED
@@ -31,20 +31,31 @@ class SQ_Classes_Helpers_DevKit {
31
  add_filter('sq_menu_name', array($this, 'getCustomMenuName'));
32
  add_filter('sq_audit_success_task', array($this, 'getCustomAuditSuccessTask'));
33
  add_filter('sq_audit_fail_task', array($this, 'getCustomAuditFailTask'));
 
 
34
  }
35
 
36
  }
 
 
 
 
 
 
 
 
 
 
37
  public static function getOptions() {
38
- if(is_multisite()) {
39
  self::$options = json_decode(get_blog_option(get_main_site_id(), SQ_OPTION), true);
40
- }else{
41
  self::$options = json_decode(get_option(SQ_OPTION), true);
42
  }
43
 
44
  return self::$options;
45
  }
46
 
47
-
48
  /**
49
  * Get the option from database
50
  * @param $key
31
  add_filter('sq_menu_name', array($this, 'getCustomMenuName'));
32
  add_filter('sq_audit_success_task', array($this, 'getCustomAuditSuccessTask'));
33
  add_filter('sq_audit_fail_task', array($this, 'getCustomAuditFailTask'));
34
+ add_action('sq_seo_errors', array($this, 'getSEOErrors'));
35
+
36
  }
37
 
38
  }
39
+
40
+ //Check if Next SEO Goals are active
41
+ public function getSEOErrors($errors) {
42
+ if (SQ_Classes_Helpers_Tools::getMenuVisible('show_seogoals')) {
43
+ return $errors;
44
+ }
45
+
46
+ return 0;
47
+ }
48
+
49
  public static function getOptions() {
50
+ if (is_multisite()) {
51
  self::$options = json_decode(get_blog_option(get_main_site_id(), SQ_OPTION), true);
52
+ } else {
53
  self::$options = json_decode(get_option(SQ_OPTION), true);
54
  }
55
 
56
  return self::$options;
57
  }
58
 
 
59
  /**
60
  * Get the option from database
61
  * @param $key
classes/helpers/Tools.php CHANGED
@@ -14,10 +14,10 @@ class SQ_Classes_Helpers_Tools {
14
  public function __construct() {
15
  self::$options = $this->getOptions();
16
 
17
- $maxmemory = self::getMaxMemory();
18
- if ($maxmemory && $maxmemory < 60) {
19
- @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
20
- }
21
 
22
  SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
23
  }
@@ -265,6 +265,7 @@ class SQ_Classes_Helpers_Tools {
265
  //Sitemap
266
  'sq_auto_sitemap' => 1,
267
  'sq_sitemap_ping' => 0,
 
268
  'sq_sitemap_show' => array(
269
  'images' => 1,
270
  'videos' => 0,
@@ -314,7 +315,7 @@ class SQ_Classes_Helpers_Tools {
314
  'sq_auto_noindex' => 1,
315
  'sq_use_frontend' => 1,
316
  'sq_attachment_redirect' => 0,
317
- 'profile_noindex_empty' => 0,
318
  '404_url_redirect' => home_url(),
319
  'sq_external_nofollow' => 1,
320
  'sq_external_exception' => array(),
@@ -354,6 +355,7 @@ class SQ_Classes_Helpers_Tools {
354
  //menu restrictions
355
  'menu' => array(
356
  'show_account_info' => 1,
 
357
  'show_panel' => 1,
358
  'show_tutorial' => 1,
359
  'show_audit' => 1,
14
  public function __construct() {
15
  self::$options = $this->getOptions();
16
 
17
+ // $maxmemory = self::getMaxMemory();
18
+ // if ($maxmemory && $maxmemory < 60) {
19
+ // @ini_set('memory_limit', apply_filters('admin_memory_limit', WP_MAX_MEMORY_LIMIT));
20
+ // }
21
 
22
  SQ_Classes_ObjController::getClass('SQ_Classes_HookController')->setHooks($this);
23
  }
265
  //Sitemap
266
  'sq_auto_sitemap' => 1,
267
  'sq_sitemap_ping' => 0,
268
+ 'sq_sitemap_exclude_noindex' => 0,
269
  'sq_sitemap_show' => array(
270
  'images' => 1,
271
  'videos' => 0,
315
  'sq_auto_noindex' => 1,
316
  'sq_use_frontend' => 1,
317
  'sq_attachment_redirect' => 0,
318
+ 'sq_term_noindex_empty' => 1,
319
  '404_url_redirect' => home_url(),
320
  'sq_external_nofollow' => 1,
321
  'sq_external_exception' => array(),
355
  //menu restrictions
356
  'menu' => array(
357
  'show_account_info' => 1,
358
+ 'show_journey' => 1,
359
  'show_panel' => 1,
360
  'show_tutorial' => 1,
361
  'show_audit' => 1,
controllers/Patterns.php CHANGED
@@ -89,8 +89,8 @@ class SQ_Controllers_Patterns extends SQ_Classes_FrontController {
89
  foreach ($this->patterns->getPatterns() as $key => $pattern) {
90
  foreach ($sq_with_patterns as $name => $value) {
91
  if ($name <> '' && is_string($value) && $value <> '' && $pattern <> '') {
92
- if (strpos($value, $pattern) !== false) {
93
- $object->$name = str_replace($pattern, $this->patterns->$key, $object->$name);
94
  }
95
  }
96
  }
89
  foreach ($this->patterns->getPatterns() as $key => $pattern) {
90
  foreach ($sq_with_patterns as $name => $value) {
91
  if ($name <> '' && is_string($value) && $value <> '' && $pattern <> '') {
92
+ if (stripos($value, $pattern) !== false) {
93
+ $object->$name = str_ireplace($pattern, $this->patterns->$key, $object->$name);
94
  }
95
  }
96
  }
controllers/PostsList.php CHANGED
@@ -35,7 +35,7 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
35
 
36
  if (!empty($this->_types) && !empty($excludes)) {
37
  foreach ($excludes as $exclude) {
38
- if($exclude) {
39
  if (false !== $key = array_search($exclude, $this->_types)) {
40
  unset($this->_types[$key]);
41
  }
@@ -119,7 +119,7 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
119
  array_push($this->posts, $post_id);
120
  }
121
 
122
- echo '<div class="' . $this->_slacolumn_id . '_row" ref="' . $post_id . '">' . (($html) ? $html: 'loading ...') . '</div>';
123
  }
124
 
125
  if ($column == $this->_column_id) {
@@ -187,15 +187,47 @@ class SQ_Controllers_PostsList extends SQ_Classes_FrontController {
187
  public function action() {
188
  switch (SQ_Classes_Helpers_Tools::getValue('action')) {
189
  case 'inline-save':
190
- check_ajax_referer('inlineeditnonce', '_inline_edit');
191
- if (isset($_POST['post_ID']) && ($post_id = (int)$_POST['post_ID']) && isset($_POST['_status']) && $_POST['_status'] <> '') {
192
- $args = array();
193
- $args['status'] = $_POST['_status'];
194
- $args['post_id'] = $post_id;
195
- $args['referer'] = 'posts';
196
- SQ_Classes_RemoteController::savePost($args);
197
- }
198
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  return;
200
  }
201
 
35
 
36
  if (!empty($this->_types) && !empty($excludes)) {
37
  foreach ($excludes as $exclude) {
38
+ if ($exclude) {
39
  if (false !== $key = array_search($exclude, $this->_types)) {
40
  unset($this->_types[$key]);
41
  }
119
  array_push($this->posts, $post_id);
120
  }
121
 
122
+ echo '<div class="' . $this->_slacolumn_id . '_row" ref="' . $post_id . '">' . (($html) ? $html : 'loading ...') . '</div>';
123
  }
124
 
125
  if ($column == $this->_column_id) {
187
  public function action() {
188
  switch (SQ_Classes_Helpers_Tools::getValue('action')) {
189
  case 'inline-save':
 
 
 
 
 
 
 
 
190
 
191
+ if (isset($_POST['post_ID']) && ($post_id = (int)$_POST['post_ID']) && isset($_POST['_status']) && $_POST['_status'] == 'publish') {
192
+
193
+ // Don't bother if it hasn't changed.
194
+ $sq_hash = md5($post_id);
195
+ $post = SQ_Classes_ObjController::getClass('SQ_Models_Qss')->getSqPost($sq_hash);
196
+ $patterns = (array)SQ_Classes_Helpers_Tools::getOption('patterns');
197
+ if (!empty($patterns) && $permalink = get_permalink($post->ID)) {
198
+
199
+ if ($post->ID > 0 && $permalink <> $post->url) {
200
+
201
+ //Get the Squirrly SEO Patterns
202
+ foreach ($patterns as $pattern => $type) {
203
+ if (get_post_type($post->ID) == $pattern) {
204
+ if (isset($type['do_redirects']) && $type['do_redirects']) {
205
+
206
+ //do_redirects
207
+ $post_name = basename($post->url);
208
+ $old_slugs = (array)get_post_meta($post->ID, '_sq_old_slug');
209
+
210
+ // If we haven't added this old slug before, add it now.
211
+ if (!empty($post_name) && !in_array($post_name, $old_slugs)) {
212
+ add_post_meta($post->ID, '_sq_old_slug', $post_name);
213
+ }
214
+
215
+ // If the new slug was used previously, delete it from the list.
216
+ if (in_array($post->post_name, $old_slugs)) {
217
+ delete_post_meta($post->ID, '_sq_old_slug', $post->post_name);
218
+ }
219
+
220
+ //Update the permalink in QSS
221
+ SQ_Classes_ObjController::getClass('SQ_Models_Qss')->savePermalink($permalink, $sq_hash);
222
+
223
+ }
224
+ }
225
+ }
226
+
227
+ }
228
+ }
229
+
230
+ }
231
  return;
232
  }
233
 
controllers/Research.php CHANGED
@@ -41,6 +41,10 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
41
 
42
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'research');
43
 
 
 
 
 
44
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
45
  if (is_rtl()) {
46
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('popper');
@@ -66,6 +70,7 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
66
 
67
  echo $this->getView('Research/' . ucfirst($tab));
68
 
 
69
  //get the modal window for the assistant popup
70
  echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
71
  }
@@ -111,9 +116,6 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
111
 
112
  }
113
 
114
- wp_enqueue_style('wp-color-picker');
115
- wp_enqueue_script('wp-color-picker');
116
-
117
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
118
 
119
  }
@@ -134,9 +136,6 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
134
  }
135
  }
136
 
137
- wp_enqueue_style('wp-color-picker');
138
- wp_enqueue_script('wp-color-picker');
139
-
140
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
141
 
142
  }
@@ -155,9 +154,6 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
155
 
156
  $this->suggested = SQ_Classes_RemoteController::getKrFound();
157
 
158
- wp_enqueue_style('wp-color-picker');
159
- wp_enqueue_script('wp-color-picker');
160
-
161
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
162
 
163
  }
@@ -410,18 +406,23 @@ class SQ_Controllers_Research extends SQ_Classes_FrontController {
410
  $args['limit'] = -1;
411
  $briefcase = SQ_Classes_RemoteController::getBriefcase($args);
412
 
413
- $fp = fopen(_SQ_CACHE_DIR_ . 'file.txt', 'w');
414
- foreach ($briefcase->keywords as $row) {
415
- fwrite($fp, $row->keyword . PHP_EOL);
 
 
 
 
 
 
 
 
 
 
 
 
 
416
  }
417
- fclose($fp);
418
-
419
- header("Content-type: text;");
420
- header("Content-Encoding: UTF-8");
421
- header("Content-Disposition: attachment; filename=squirrly-briefcase-" . gmdate('Y-m-d') . ".txt");
422
- header("Pragma: no-cache");
423
- header("Expires: 0");
424
- readfile(_SQ_CACHE_DIR_ . 'file.txt');
425
 
426
  exit();
427
  case 'sq_briefcase_restore':
41
 
42
  $tab = SQ_Classes_Helpers_Tools::getValue('tab', 'research');
43
 
44
+
45
+ wp_enqueue_style('wp-color-picker');
46
+ wp_enqueue_script('wp-color-picker');
47
+
48
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
49
  if (is_rtl()) {
50
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('popper');
70
 
71
  echo $this->getView('Research/' . ucfirst($tab));
72
 
73
+
74
  //get the modal window for the assistant popup
75
  echo SQ_Classes_ObjController::getClass('SQ_Models_Assistant')->getModal();
76
  }
116
 
117
  }
118
 
 
 
 
119
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
120
 
121
  }
136
  }
137
  }
138
 
 
 
 
139
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
140
 
141
  }
154
 
155
  $this->suggested = SQ_Classes_RemoteController::getKrFound();
156
 
 
 
 
157
  SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('briefcase');
158
 
159
  }
406
  $args['limit'] = -1;
407
  $briefcase = SQ_Classes_RemoteController::getBriefcase($args);
408
 
409
+ if(isset($briefcase->keywords) && !empty($briefcase->keywords)) {
410
+ $fp = fopen(_SQ_CACHE_DIR_ . 'file.txt', 'w');
411
+ foreach ($briefcase->keywords as $row) {
412
+ fwrite($fp, $row->keyword . PHP_EOL);
413
+ }
414
+ fclose($fp);
415
+
416
+ header("Content-type: text;");
417
+ header("Content-Encoding: UTF-8");
418
+ header("Content-Disposition: attachment; filename=squirrly-briefcase-" . gmdate('Y-m-d') . ".txt");
419
+ header("Pragma: no-cache");
420
+ header("Expires: 0");
421
+ readfile(_SQ_CACHE_DIR_ . 'file.txt');
422
+ }else{
423
+ SQ_Classes_Error::setError(esc_html__("No keywords in Briefcase to backup", _SQ_PLUGIN_NAME_), 'sq_error');
424
+ return;
425
  }
 
 
 
 
 
 
 
 
426
 
427
  exit();
428
  case 'sq_briefcase_restore':
controllers/SeoSettings.php CHANGED
@@ -563,9 +563,11 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
563
 
564
  if ($platform <> '') {
565
  $seo = SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->importDBSeo($platform);
 
566
  if (!empty($seo)) {
567
  foreach ($seo as $sq_hash => $metas) {
568
  $sq = SQ_Classes_ObjController::getClass('SQ_Models_Qss')->getSqSeo($sq_hash);
 
569
  if ($overwrite || !($sq->title && $sq->description)) {
570
 
571
  SQ_Classes_ObjController::getClass('SQ_Models_Qss')->saveSqSEO(
563
 
564
  if ($platform <> '') {
565
  $seo = SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->importDBSeo($platform);
566
+
567
  if (!empty($seo)) {
568
  foreach ($seo as $sq_hash => $metas) {
569
  $sq = SQ_Classes_ObjController::getClass('SQ_Models_Qss')->getSqSeo($sq_hash);
570
+
571
  if ($overwrite || !($sq->title && $sq->description)) {
572
 
573
  SQ_Classes_ObjController::getClass('SQ_Models_Qss')->saveSqSEO(
controllers/Sitemaps.php CHANGED
@@ -30,14 +30,13 @@ class SQ_Controllers_Sitemaps extends SQ_Classes_FrontController {
30
  global $wp_query;
31
 
32
  if (isset($_SERVER['REQUEST_URI'])) {
33
- if (strpos($_SERVER['REQUEST_URI'], 'sq_feed') !== false) {
34
- $parseurl = parse_url($_SERVER['REQUEST_URI']);
35
  $sitemap = 'sitemap';
36
  $page = 0;
37
 
38
- if (isset($parseurl['query'])) {
39
- parse_str($parseurl['query'], $query);
40
- $sitemap = (isset($query['sq_feed']) ? $query['sq_feed'] : 'sitemap');
41
  $page = (isset($query['page']) ? $query['page'] : 0);
42
  }
43
 
30
  global $wp_query;
31
 
32
  if (isset($_SERVER['REQUEST_URI'])) {
33
+ if (isset($_SERVER['QUERY_STRING']) && strpos($_SERVER['QUERY_STRING'], 'sq_feed') !== false) {
34
+ parse_str($_SERVER['QUERY_STRING'], $query);
35
  $sitemap = 'sitemap';
36
  $page = 0;
37
 
38
+ if (isset($query['sq_feed'])) {
39
+ $sitemap = $query['sq_feed'];
 
40
  $page = (isset($query['page']) ? $query['page'] : 0);
41
  }
42
 
core/BlockFeatures.php CHANGED
@@ -22,6 +22,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
22
  'logo' => 'squirrly.png',
23
  'link' => SQ_Classes_RemoteController::getMySquirrlyLink('dashboard'),
24
  'details' => 'https://howto.squirrly.co/kb/squirrly-cloud-app/',
 
25
  ), //Squirrly Cloud
26
  array(
27
  'title' => "14 Days Journey Course",
@@ -34,6 +35,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
34
  'logo' => 'journey_92.png',
35
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'journey1'),
36
  'details' => 'https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#journey',
 
37
  ), //14 Days Journey Course
38
  array(
39
  'title' => "Next SEO Goals",
@@ -46,6 +48,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
46
  'logo' => 'goals_92.png',
47
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard', '', array('#tasks')),
48
  'details' => 'https://howto.squirrly.co/kb/next-seo-goals/',
 
49
  ),//Next SEO Goals
50
  array(
51
  'title' => "Progress & Achievements",
@@ -58,6 +61,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
58
  'logo' => 'progress_92.png',
59
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard', '', array('#tasks')),
60
  'details' => 'https://howto.squirrly.co/kb/squirrly-seo-goals/',
 
61
  ),//Progress
62
  array(
63
  'title' => "Focus Pages",
@@ -70,6 +74,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
70
  'logo' => 'focuspages_92.png',
71
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist'),
72
  'details' => 'https://howto.squirrly.co/kb/focus-pages-page-audits/',
 
73
  ), //Focus Pages
74
  array(
75
  'title' => "Chances of Ranking",
@@ -82,6 +87,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
82
  'logo' => 'focuspages_92.png',
83
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist'),
84
  'details' => 'https://howto.squirrly.co/kb/focus-pages-page-audits/#chance_to_rank',
 
85
  ), //Chances of Ranking
86
  array(
87
  'title' => "Keyword Research",
@@ -94,6 +100,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
94
  'logo' => 'kr_92.png',
95
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'research'),
96
  'details' => 'https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/',
 
97
  ), //Keyword Research
98
  array(
99
  'title' => "Google Search & Trends",
@@ -106,6 +113,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
106
  'logo' => 'kr_92.png',
107
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'research'),
108
  'details' => 'https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/',
 
109
  ), //Keyword Research
110
  array(
111
  'title' => "Briefcase",
@@ -118,6 +126,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
118
  'logo' => 'briefcase_92.png',
119
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'briefcase'),
120
  'details' => 'https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase',
 
121
  ),//SEO Briefcase
122
  array(
123
  'title' => "Live Assistant",
@@ -130,6 +139,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
130
  'logo' => 'sla_92.png',
131
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
132
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/',
 
133
  ),//Live Assistant
134
  array(
135
  'title' => "Keywords Optimization",
@@ -142,6 +152,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
142
  'logo' => 'briefcase_92.png',
143
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
144
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#add_keyword',
 
145
  ),//Keywords Optimization
146
  array(
147
  'title' => "Elementor Website Builder",
@@ -154,6 +165,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
154
  'logo' => 'sla_92.png',
155
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant', 'settings'),
156
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#elementor',
 
157
  ),//Live Assistant Elementor
158
  array(
159
  'title' => "Google Rankings with GSC",
@@ -166,6 +178,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
166
  'logo' => 'ranking_92.png',
167
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings', 'rankings'),
168
  'details' => 'https://howto.squirrly.co/kb/ranking-serp-checker/',
 
169
  ),//Google SERP with GSC
170
  array(
171
  'title' => "SEO Automation",
@@ -178,6 +191,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
178
  'logo' => 'automation_92.png',
179
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'automation'),
180
  'details' => 'https://howto.squirrly.co/kb/seo-automation/',
 
181
  ),//SEO Automation
182
  array(
183
  'title' => "Bulk SEO & Snippets",
@@ -190,6 +204,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
190
  'logo' => 'bulkseo_92.png',
191
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
192
  'details' => 'https://howto.squirrly.co/kb/bulk-seo/',
 
193
  ),//Bulk SEO
194
  array(
195
  'title' => "Frontend SEO Snippet",
@@ -202,6 +217,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
202
  'logo' => 'bulkseo_92.png',
203
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'metas'),
204
  'details' => 'https://howto.squirrly.co/kb/seo-metas/#Add-Snippet-in-Frontend',
 
205
  ),//Frontend SEO Snippet
206
  array(
207
  'title' => "Open Graph Optimization",
@@ -214,6 +230,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
214
  'logo' => 'social_92.png',
215
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'social'),
216
  'details' => 'https://howto.squirrly.co/kb/social-media-settings/#opengraph',
 
217
  ),//Open Graph Optimization
218
  array(
219
  'title' => "Twitter Card Optimization",
@@ -226,6 +243,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
226
  'logo' => 'social_92.png',
227
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'social'),
228
  'details' => 'https://howto.squirrly.co/kb/social-media-settings/#twittercard',
 
229
  ),//Twitter Card Optimization
230
  array(
231
  'title' => "Sitemap XML",
@@ -238,6 +256,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
238
  'logo' => 'sitemap_92.png',
239
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'sitemap'),
240
  'details' => 'https://howto.squirrly.co/kb/sitemap-xml-settings/',
 
241
  ), //XML Sitemap
242
  array(
243
  'title' => "Google News",
@@ -250,6 +269,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
250
  'logo' => 'news_92.png',
251
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'sitemap'),
252
  'details' => 'https://howto.squirrly.co/kb/sitemap-xml-settings/#news_sitemap',
 
253
  ), //Sitemap Instant Indexing
254
  array(
255
  'title' => "JSON-LD Structured Data",
@@ -262,6 +282,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
262
  'logo' => 'jsonld_92.png',
263
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld'),
264
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/',
 
265
  ), //JSON-LD Optimizaition
266
  array(
267
  'title' => "ACF Integration",
@@ -274,6 +295,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
274
  'logo' => 'jsonld_92.png',
275
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld'),
276
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#ACF',
 
277
  ), //Advanced Custom Fields
278
  array(
279
  'title' => "Google Analytics Tracking",
@@ -286,6 +308,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
286
  'logo' => 'traffic_92.png',
287
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'tracking'),
288
  'details' => 'https://howto.squirrly.co/kb/google-analytics-tracking-tool/#google_analytics',
 
289
  ), //Google Analytics Tracking
290
  array(
291
  'title' => "AMP Support",
@@ -298,6 +321,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
298
  'logo' => 'amp_92.png',
299
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'tracking'),
300
  'details' => 'https://howto.squirrly.co/kb/google-analytics-tracking-tool/#amp_support',
 
301
  ), //
302
  array(
303
  'title' => "Facebook Pixel Tracking",
@@ -310,6 +334,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
310
  'logo' => 'traffic_92.png',
311
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'tracking'),
312
  'details' => 'https://howto.squirrly.co/kb/google-analytics-tracking-tool/#facebook_pixel',
 
313
  ), //Facebook Pixel Tracking
314
  array(
315
  'title' => "Webmaster Tools",
@@ -322,6 +347,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
322
  'logo' => 'websites_92.png',
323
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'webmaster'),
324
  'details' => 'https://howto.squirrly.co/kb/webmaster-tools-settings/',
 
325
  ), //Webmaster Tools
326
  array(
327
  'title' => "Google Search Console (GSC)",
@@ -334,6 +360,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
334
  'logo' => 'websites_92.png',
335
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings', 'settings'),
336
  'details' => 'https://howto.squirrly.co/kb/ranking-serp-checker/#google_search_console',
 
337
  ), //Google Search Console
338
  array(
339
  'title' => "Robots.txt File",
@@ -346,6 +373,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
346
  'logo' => 'robots_92.png',
347
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'robots'),
348
  'details' => false,
 
349
  ), //Robots.txt File
350
  array(
351
  'title' => "Favicon Site Icon",
@@ -358,6 +386,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
358
  'logo' => 'favicon_92.png',
359
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'favicon'),
360
  'details' => 'https://howto.squirrly.co/kb/website-favicon-settings/',
 
361
  ), //Favicon Site Icon
362
  array(
363
  'title' => "SEO Links",
@@ -370,6 +399,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
370
  'logo' => 'links_92.png',
371
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'links'),
372
  'details' => 'https://howto.squirrly.co/kb/seo-links/',
 
373
  ), //SEO Links
374
  array(
375
  'title' => "On-Page SEO METAs",
@@ -382,6 +412,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
382
  'logo' => 'metas_92.png',
383
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'metas'),
384
  'details' => 'https://howto.squirrly.co/kb/seo-metas/',
 
385
  ), //On-Page SEO METAs
386
  array(
387
  'title' => "Remove META Duplicate",
@@ -394,6 +425,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
394
  'logo' => 'metas_92.png',
395
  'link' => false,
396
  'details' => 'https://howto.squirrly.co/kb/seo-metas/#remove_duplicates',
 
397
  ), //Remove META Duplicate
398
  array(
399
  'title' => "404 URLs Redirects",
@@ -406,6 +438,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
406
  'logo' => 'redirect_92.png',
407
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'automation', array('#tab=nav-post')),
408
  'details' => 'https://howto.squirrly.co/kb/seo-automation/#redirect_broken_urls',
 
409
  ), //404 Redirects
410
  array(
411
  'title' => "SEO Audit",
@@ -418,6 +451,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
418
  'logo' => 'audit_92.png',
419
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
420
  'details' => 'https://howto.squirrly.co/kb/seo-audit/',
 
421
  ), //SEO Audit
422
  array(
423
  'title' => "Moz",
@@ -430,6 +464,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
430
  'logo' => 'audit_92.png',
431
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
432
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#moz',
 
433
  ), //SEO Audit Moz
434
  array(
435
  'title' => "Majestic",
@@ -442,6 +477,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
442
  'logo' => 'audit_92.png',
443
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
444
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#majestic',
 
445
  ), //SEO Audit Majestic
446
  array(
447
  'title' => "Alexa",
@@ -454,6 +490,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
454
  'logo' => 'audit_92.png',
455
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
456
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#alexa',
 
457
  ), //SEO Audit Alexa
458
  array(
459
  'title' => "Google PageSpeed Insights",
@@ -466,6 +503,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
466
  'logo' => 'audit_92.png',
467
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
468
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#google_pagespeed',
 
469
  ), //SEO Audit Google PageSpeed
470
  array(
471
  'title' => "Blogging Assistant",
@@ -478,6 +516,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
478
  'logo' => 'sla_92.png',
479
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
480
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#live_assistant_box',
 
481
  ), //Blogging Assistant
482
  array(
483
  'title' => "Google SERP Checker",
@@ -490,6 +529,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
490
  'logo' => 'ranking_92.png',
491
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings', 'rankings'),
492
  'details' => 'https://howto.squirrly.co/kb/ranking-serp-checker/',
 
493
  ), //Google SERP Checker
494
  array(
495
  'title' => "Copyright Free Images",
@@ -502,6 +542,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
502
  'logo' => 'image_92.png',
503
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
504
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#copyright_free_images',
 
505
  ), //Blogging Assistant
506
  array(
507
  'title' => "WooCommerce SEO",
@@ -514,6 +555,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
514
  'logo' => 'shop_92.png',
515
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo', array('stype=product')),
516
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#woocommerce',
 
517
  ), //
518
  array(
519
  'title' => "Polylang",
@@ -526,6 +568,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
526
  'logo' => 'multilingual_92.png',
527
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
528
  'details' => 'https://howto.squirrly.co/wordpress-seo/compatibility-with-polylang-plugin/',
 
529
  ), //
530
  array(
531
  'title' => "Local SEO",
@@ -538,6 +581,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
538
  'logo' => 'local_92.png',
539
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld', array('#localseo')),
540
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo',
 
541
  ), //
542
  array(
543
  'title' => "Settings Assistant",
@@ -550,6 +594,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
550
  'logo' => 'audit_92.png',
551
  'link' => false,
552
  'details' => 'https://howto.squirrly.co/kb/squirrly-settings-assistant/',
 
553
  ),//Live Assistant Elementor
554
  array(
555
  'title' => "Fetch SEO Snippet",
@@ -562,6 +607,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
562
  'logo' => 'social_92.png',
563
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant', 'settings'),
564
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#fetch_social',
 
565
  ), //
566
  array(
567
  'title' => "SEO Images",
@@ -574,6 +620,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
574
  'logo' => 'image_92.png',
575
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant', 'settings'),
576
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#seo_image',
 
577
  ), //
578
 
579
  array(
@@ -587,6 +634,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
587
  'logo' => 'settings_92.png',
588
  'link' => false,
589
  'details' => 'https://howto.squirrly.co/',
 
590
  ), //
591
  array(
592
  'title' => "Import SEO & Settings",
@@ -599,6 +647,7 @@ class SQ_Core_BlockFeatures extends SQ_Classes_BlockController {
599
  'logo' => 'settings_92.png',
600
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'backup'),
601
  'details' => 'https://howto.squirrly.co/kb/import-export-seo-settings/',
 
602
  ), //Import SEO & Settings
603
 
604
 
22
  'logo' => 'squirrly.png',
23
  'link' => SQ_Classes_RemoteController::getMySquirrlyLink('dashboard'),
24
  'details' => 'https://howto.squirrly.co/kb/squirrly-cloud-app/',
25
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_panel'),
26
  ), //Squirrly Cloud
27
  array(
28
  'title' => "14 Days Journey Course",
35
  'logo' => 'journey_92.png',
36
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_onboarding', 'journey1'),
37
  'details' => 'https://howto.squirrly.co/kb/install-squirrly-seo-plugin/#journey',
38
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_journey'),
39
  ), //14 Days Journey Course
40
  array(
41
  'title' => "Next SEO Goals",
48
  'logo' => 'goals_92.png',
49
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard', '', array('#tasks')),
50
  'details' => 'https://howto.squirrly.co/kb/next-seo-goals/',
51
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_seogoals'),
52
  ),//Next SEO Goals
53
  array(
54
  'title' => "Progress & Achievements",
61
  'logo' => 'progress_92.png',
62
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_dashboard', '', array('#tasks')),
63
  'details' => 'https://howto.squirrly.co/kb/squirrly-seo-goals/',
64
+ 'show' => true,
65
  ),//Progress
66
  array(
67
  'title' => "Focus Pages",
74
  'logo' => 'focuspages_92.png',
75
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist'),
76
  'details' => 'https://howto.squirrly.co/kb/focus-pages-page-audits/',
77
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_focuspages'),
78
  ), //Focus Pages
79
  array(
80
  'title' => "Chances of Ranking",
87
  'logo' => 'focuspages_92.png',
88
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_focuspages', 'pagelist'),
89
  'details' => 'https://howto.squirrly.co/kb/focus-pages-page-audits/#chance_to_rank',
90
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_focuspages'),
91
  ), //Chances of Ranking
92
  array(
93
  'title' => "Keyword Research",
100
  'logo' => 'kr_92.png',
101
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'research'),
102
  'details' => 'https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/',
103
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_research'),
104
  ), //Keyword Research
105
  array(
106
  'title' => "Google Search & Trends",
113
  'logo' => 'kr_92.png',
114
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'research'),
115
  'details' => 'https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/',
116
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_research'),
117
  ), //Keyword Research
118
  array(
119
  'title' => "Briefcase",
126
  'logo' => 'briefcase_92.png',
127
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_research', 'briefcase'),
128
  'details' => 'https://howto.squirrly.co/kb/keyword-research-and-seo-strategy/#briefcase',
129
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_research'),
130
  ),//SEO Briefcase
131
  array(
132
  'title' => "Live Assistant",
139
  'logo' => 'sla_92.png',
140
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
141
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/',
142
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
143
  ),//Live Assistant
144
  array(
145
  'title' => "Keywords Optimization",
152
  'logo' => 'briefcase_92.png',
153
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
154
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#add_keyword',
155
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
156
  ),//Keywords Optimization
157
  array(
158
  'title' => "Elementor Website Builder",
165
  'logo' => 'sla_92.png',
166
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant', 'settings'),
167
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#elementor',
168
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
169
  ),//Live Assistant Elementor
170
  array(
171
  'title' => "Google Rankings with GSC",
178
  'logo' => 'ranking_92.png',
179
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings', 'rankings'),
180
  'details' => 'https://howto.squirrly.co/kb/ranking-serp-checker/',
181
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_rankings'),
182
  ),//Google SERP with GSC
183
  array(
184
  'title' => "SEO Automation",
191
  'logo' => 'automation_92.png',
192
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'automation'),
193
  'details' => 'https://howto.squirrly.co/kb/seo-automation/',
194
+ 'show' => true,
195
  ),//SEO Automation
196
  array(
197
  'title' => "Bulk SEO & Snippets",
204
  'logo' => 'bulkseo_92.png',
205
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
206
  'details' => 'https://howto.squirrly.co/kb/bulk-seo/',
207
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_bulkseo'),
208
  ),//Bulk SEO
209
  array(
210
  'title' => "Frontend SEO Snippet",
217
  'logo' => 'bulkseo_92.png',
218
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'metas'),
219
  'details' => 'https://howto.squirrly.co/kb/seo-metas/#Add-Snippet-in-Frontend',
220
+ 'show' => true,
221
  ),//Frontend SEO Snippet
222
  array(
223
  'title' => "Open Graph Optimization",
230
  'logo' => 'social_92.png',
231
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'social'),
232
  'details' => 'https://howto.squirrly.co/kb/social-media-settings/#opengraph',
233
+ 'show' => true,
234
  ),//Open Graph Optimization
235
  array(
236
  'title' => "Twitter Card Optimization",
243
  'logo' => 'social_92.png',
244
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'social'),
245
  'details' => 'https://howto.squirrly.co/kb/social-media-settings/#twittercard',
246
+ 'show' => true,
247
  ),//Twitter Card Optimization
248
  array(
249
  'title' => "Sitemap XML",
256
  'logo' => 'sitemap_92.png',
257
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'sitemap'),
258
  'details' => 'https://howto.squirrly.co/kb/sitemap-xml-settings/',
259
+ 'show' => true,
260
  ), //XML Sitemap
261
  array(
262
  'title' => "Google News",
269
  'logo' => 'news_92.png',
270
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'sitemap'),
271
  'details' => 'https://howto.squirrly.co/kb/sitemap-xml-settings/#news_sitemap',
272
+ 'show' => true,
273
  ), //Sitemap Instant Indexing
274
  array(
275
  'title' => "JSON-LD Structured Data",
282
  'logo' => 'jsonld_92.png',
283
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld'),
284
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/',
285
+ 'show' => true,
286
  ), //JSON-LD Optimizaition
287
  array(
288
  'title' => "ACF Integration",
295
  'logo' => 'jsonld_92.png',
296
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld'),
297
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#ACF',
298
+ 'show' => true,
299
  ), //Advanced Custom Fields
300
  array(
301
  'title' => "Google Analytics Tracking",
308
  'logo' => 'traffic_92.png',
309
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'tracking'),
310
  'details' => 'https://howto.squirrly.co/kb/google-analytics-tracking-tool/#google_analytics',
311
+ 'show' => true,
312
  ), //Google Analytics Tracking
313
  array(
314
  'title' => "AMP Support",
321
  'logo' => 'amp_92.png',
322
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'tracking'),
323
  'details' => 'https://howto.squirrly.co/kb/google-analytics-tracking-tool/#amp_support',
324
+ 'show' => true,
325
  ), //
326
  array(
327
  'title' => "Facebook Pixel Tracking",
334
  'logo' => 'traffic_92.png',
335
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'tracking'),
336
  'details' => 'https://howto.squirrly.co/kb/google-analytics-tracking-tool/#facebook_pixel',
337
+ 'show' => true,
338
  ), //Facebook Pixel Tracking
339
  array(
340
  'title' => "Webmaster Tools",
347
  'logo' => 'websites_92.png',
348
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'webmaster'),
349
  'details' => 'https://howto.squirrly.co/kb/webmaster-tools-settings/',
350
+ 'show' => true,
351
  ), //Webmaster Tools
352
  array(
353
  'title' => "Google Search Console (GSC)",
360
  'logo' => 'websites_92.png',
361
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings', 'settings'),
362
  'details' => 'https://howto.squirrly.co/kb/ranking-serp-checker/#google_search_console',
363
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_rankings'),
364
  ), //Google Search Console
365
  array(
366
  'title' => "Robots.txt File",
373
  'logo' => 'robots_92.png',
374
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'robots'),
375
  'details' => false,
376
+ 'show' => true,
377
  ), //Robots.txt File
378
  array(
379
  'title' => "Favicon Site Icon",
386
  'logo' => 'favicon_92.png',
387
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'favicon'),
388
  'details' => 'https://howto.squirrly.co/kb/website-favicon-settings/',
389
+ 'show' => true,
390
  ), //Favicon Site Icon
391
  array(
392
  'title' => "SEO Links",
399
  'logo' => 'links_92.png',
400
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'links'),
401
  'details' => 'https://howto.squirrly.co/kb/seo-links/',
402
+ 'show' => true,
403
  ), //SEO Links
404
  array(
405
  'title' => "On-Page SEO METAs",
412
  'logo' => 'metas_92.png',
413
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'metas'),
414
  'details' => 'https://howto.squirrly.co/kb/seo-metas/',
415
+ 'show' => true,
416
  ), //On-Page SEO METAs
417
  array(
418
  'title' => "Remove META Duplicate",
425
  'logo' => 'metas_92.png',
426
  'link' => false,
427
  'details' => 'https://howto.squirrly.co/kb/seo-metas/#remove_duplicates',
428
+ 'show' => true,
429
  ), //Remove META Duplicate
430
  array(
431
  'title' => "404 URLs Redirects",
438
  'logo' => 'redirect_92.png',
439
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'automation', array('#tab=nav-post')),
440
  'details' => 'https://howto.squirrly.co/kb/seo-automation/#redirect_broken_urls',
441
+ 'show' => true,
442
  ), //404 Redirects
443
  array(
444
  'title' => "SEO Audit",
451
  'logo' => 'audit_92.png',
452
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
453
  'details' => 'https://howto.squirrly.co/kb/seo-audit/',
454
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_audit'),
455
  ), //SEO Audit
456
  array(
457
  'title' => "Moz",
464
  'logo' => 'audit_92.png',
465
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
466
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#moz',
467
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_audit'),
468
  ), //SEO Audit Moz
469
  array(
470
  'title' => "Majestic",
477
  'logo' => 'audit_92.png',
478
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
479
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#majestic',
480
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_audit'),
481
  ), //SEO Audit Majestic
482
  array(
483
  'title' => "Alexa",
490
  'logo' => 'audit_92.png',
491
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
492
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#alexa',
493
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_audit'),
494
  ), //SEO Audit Alexa
495
  array(
496
  'title' => "Google PageSpeed Insights",
503
  'logo' => 'audit_92.png',
504
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_audits', 'audits'),
505
  'details' => 'https://howto.squirrly.co/kb/seo-audit/#google_pagespeed',
506
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_audit'),
507
  ), //SEO Audit Google PageSpeed
508
  array(
509
  'title' => "Blogging Assistant",
516
  'logo' => 'sla_92.png',
517
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
518
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#live_assistant_box',
519
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
520
  ), //Blogging Assistant
521
  array(
522
  'title' => "Google SERP Checker",
529
  'logo' => 'ranking_92.png',
530
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_rankings', 'rankings'),
531
  'details' => 'https://howto.squirrly.co/kb/ranking-serp-checker/',
532
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_rankings'),
533
  ), //Google SERP Checker
534
  array(
535
  'title' => "Copyright Free Images",
542
  'logo' => 'image_92.png',
543
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant'),
544
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#copyright_free_images',
545
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
546
  ), //Blogging Assistant
547
  array(
548
  'title' => "WooCommerce SEO",
555
  'logo' => 'shop_92.png',
556
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo', array('stype=product')),
557
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#woocommerce',
558
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_bulkseo'),
559
  ), //
560
  array(
561
  'title' => "Polylang",
568
  'logo' => 'multilingual_92.png',
569
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
570
  'details' => 'https://howto.squirrly.co/wordpress-seo/compatibility-with-polylang-plugin/',
571
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_bulkseo'),
572
  ), //
573
  array(
574
  'title' => "Local SEO",
581
  'logo' => 'local_92.png',
582
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'jsonld', array('#localseo')),
583
  'details' => 'https://howto.squirrly.co/kb/json-ld-structured-data/#local_seo',
584
+ 'show' => true,
585
  ), //
586
  array(
587
  'title' => "Settings Assistant",
594
  'logo' => 'audit_92.png',
595
  'link' => false,
596
  'details' => 'https://howto.squirrly.co/kb/squirrly-settings-assistant/',
597
+ 'show' => true,
598
  ),//Live Assistant Elementor
599
  array(
600
  'title' => "Fetch SEO Snippet",
607
  'logo' => 'social_92.png',
608
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant', 'settings'),
609
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#fetch_social',
610
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
611
  ), //
612
  array(
613
  'title' => "SEO Images",
620
  'logo' => 'image_92.png',
621
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_assistant', 'settings'),
622
  'details' => 'https://howto.squirrly.co/kb/squirrly-live-assistant/#seo_image',
623
+ 'show' => SQ_Classes_Helpers_Tools::getMenuVisible('show_assistant'),
624
  ), //
625
 
626
  array(
634
  'logo' => 'settings_92.png',
635
  'link' => false,
636
  'details' => 'https://howto.squirrly.co/',
637
+ 'show' => true,
638
  ), //
639
  array(
640
  'title' => "Import SEO & Settings",
647
  'logo' => 'settings_92.png',
648
  'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_seosettings', 'backup'),
649
  'details' => 'https://howto.squirrly.co/kb/import-export-seo-settings/',
650
+ 'show' => true,
651
  ), //Import SEO & Settings
652
 
653
 
models/Compatibility.php CHANGED
@@ -124,6 +124,15 @@ class SQ_Models_Compatibility {
124
 
125
  if (isset($post->ID) && (int)$post->ID > 0) {
126
 
 
 
 
 
 
 
 
 
 
127
  if ($content = get_post_meta($post->ID, 'ct_builder_shortcodes', true)) {
128
  wp_enqueue_script('sq-oxygen-integration', _SQ_ASSETS_URL_ . 'js/oxygen' . (SQ_DEBUG ? '' : '.min') . '.js');
129
 
@@ -332,7 +341,6 @@ class SQ_Models_Compatibility {
332
 
333
  //dequeue styles and scripts that affect the layout in Squirrly SEO pages
334
  foreach ($exclude as $name) {
335
-
336
  wp_dequeue_style($name);
337
  }
338
  }
@@ -343,6 +351,7 @@ class SQ_Models_Compatibility {
343
  public function isPluginThemeGlobalStyle($name) {
344
  if (isset($name)
345
  && (strpos($name, 'wp-content/plugins') !== false || strpos($name, 'wp-content/themes') !== false)
 
346
  && strpos($name, 'seo') === false
347
  && strpos($name, 'monitor') === false
348
  && strpos($name, 'debug') === false
124
 
125
  if (isset($post->ID) && (int)$post->ID > 0) {
126
 
127
+ //If Oxygen Gutenberg plugin is installed and it's set to work with Gutenberg Bloks
128
+ if (SQ_Classes_Helpers_Tools::isPluginInstalled('oxygen-gutenberg/oxygen-gutenberg.php')) {
129
+ if ($oxygenberg = get_post_meta($post->ID, 'ct_oxygenberg_full_page_block', true)) {
130
+ if ($oxygenberg == 1) {
131
+ return;
132
+ }
133
+ }
134
+ }
135
+
136
  if ($content = get_post_meta($post->ID, 'ct_builder_shortcodes', true)) {
137
  wp_enqueue_script('sq-oxygen-integration', _SQ_ASSETS_URL_ . 'js/oxygen' . (SQ_DEBUG ? '' : '.min') . '.js');
138
 
341
 
342
  //dequeue styles and scripts that affect the layout in Squirrly SEO pages
343
  foreach ($exclude as $name) {
 
344
  wp_dequeue_style($name);
345
  }
346
  }
351
  public function isPluginThemeGlobalStyle($name) {
352
  if (isset($name)
353
  && (strpos($name, 'wp-content/plugins') !== false || strpos($name, 'wp-content/themes') !== false)
354
+ && strpos($name, 'gutenberg') === false
355
  && strpos($name, 'seo') === false
356
  && strpos($name, 'monitor') === false
357
  && strpos($name, 'debug') === false
models/Frontend.php CHANGED
@@ -891,59 +891,61 @@ class SQ_Models_Frontend {
891
  return $buffer;
892
  }
893
 
894
- $domain = parse_url(home_url(), PHP_URL_HOST);
895
-
896
- foreach ($out[0] as $index => $link) {
897
- $newlink = $link;
898
-
899
- //only for external links
900
- if (isset($out[1][$index])) {
901
- //If it's not a valid link
902
- if (!$linkdomain = parse_url($out[1][$index], PHP_URL_HOST)) {
903
- continue;
904
- }
905
 
906
- //If it's not an external link
907
- if (strpos($linkdomain, $domain) !== false) {
908
- continue;
909
- }
910
 
911
- //If it's not an exception link
912
- $exceptions = SQ_Classes_Helpers_Tools::getOption('sq_external_exception');
913
- if (!empty($exceptions)) {
914
- foreach ($exceptions as $exception) {
915
- if (strpos($exception, $linkdomain) !== false || strpos($linkdomain, $exception) !== false) {
916
- continue 2;
 
 
 
917
  }
918
  }
919
  }
920
- }
921
 
922
- //If nofollow rel is set
923
- if (SQ_Classes_Helpers_Tools::getOption('sq_external_nofollow')) {
 
 
 
 
 
 
924
 
925
- if (strpos($newlink, 'rel=') === false) {
926
- $newlink = str_replace('<a', '<a rel="nofollow" ', $newlink);
927
- } elseif (strpos($newlink, 'nofollow') === false) {
928
- $newlink = preg_replace('/(rel=[\'"])([^\'"]+)([\'"])/i', '$1nofollow $2$3', $newlink);
929
  }
930
 
931
- }
 
932
 
933
- //if force external open
934
- if (SQ_Classes_Helpers_Tools::getOption('sq_external_blank')) {
 
 
 
935
 
936
- if (strpos($newlink, 'target=') === false) {
937
- $newlink = str_replace('<a', '<a target="_blank" ', $newlink);
938
- } elseif (strpos($link, '_blank') === false) {
939
- $newlink = preg_replace('/(target=[\'"])([^\'"]+)([\'"])/i', '$1_blank$3', $newlink);
940
  }
941
 
942
- }
943
-
944
- //Check the link and replace it
945
- if ($newlink <> $link) {
946
- $buffer = str_replace($link, $newlink, $buffer);
947
  }
948
  }
949
 
891
  return $buffer;
892
  }
893
 
894
+ if($domain = parse_url(home_url(), PHP_URL_HOST)) {
895
+ foreach ($out[0] as $index => $link) {
896
+ $newlink = $link;
897
+
898
+ //only for external links
899
+ if (isset($out[1][$index])) {
900
+ //If it's not a valid link
901
+ if (!$linkdomain = parse_url($out[1][$index], PHP_URL_HOST)) {
902
+ continue;
903
+ }
 
904
 
905
+ //If it's not an external link
906
+ if (stripos($linkdomain, $domain) !== false) {
907
+ continue;
908
+ }
909
 
910
+ //If it's not an exception link
911
+ $exceptions = SQ_Classes_Helpers_Tools::getOption('sq_external_exception');
912
+ if (!empty($exceptions)) {
913
+ foreach ($exceptions as $exception) {
914
+ if($exception <> '') {
915
+ if (stripos($exception, $linkdomain) !== false || stripos($linkdomain, $exception) !== false) {
916
+ continue 2;
917
+ }
918
+ }
919
  }
920
  }
921
  }
 
922
 
923
+ //If nofollow rel is set
924
+ if (SQ_Classes_Helpers_Tools::getOption('sq_external_nofollow')) {
925
+
926
+ if (strpos($newlink, 'rel=') === false) {
927
+ $newlink = str_replace('<a', '<a rel="nofollow" ', $newlink);
928
+ } elseif (strpos($newlink, 'nofollow') === false) {
929
+ $newlink = preg_replace('/(rel=[\'"])([^\'"]+)([\'"])/i', '$1nofollow $2$3', $newlink);
930
+ }
931
 
 
 
 
 
932
  }
933
 
934
+ //if force external open
935
+ if (SQ_Classes_Helpers_Tools::getOption('sq_external_blank')) {
936
 
937
+ if (strpos($newlink, 'target=') === false) {
938
+ $newlink = str_replace('<a', '<a target="_blank" ', $newlink);
939
+ } elseif (strpos($link, '_blank') === false) {
940
+ $newlink = preg_replace('/(target=[\'"])([^\'"]+)([\'"])/i', '$1_blank$3', $newlink);
941
+ }
942
 
 
 
 
 
943
  }
944
 
945
+ //Check the link and replace it
946
+ if ($newlink <> $link) {
947
+ $buffer = str_replace($link, $newlink, $buffer);
948
+ }
 
949
  }
950
  }
951
 
models/ImportExport.php CHANGED
@@ -581,10 +581,10 @@ class SQ_Models_ImportExport {
581
 
582
  if (!empty($meta_keys)) {
583
  $placeholders = array_fill(0, count($meta_keys), '%s');
584
- $query = "SELECT * FROM `$wpdb->postmeta` WHERE meta_key IN (" . join(",", $placeholders) . ");";
585
 
586
  $meta_keys = array_flip($meta_keys);
587
 
 
588
  if ($rows = $wpdb->get_results($wpdb->prepare($query, array_keys($meta_keys)), OBJECT)) {
589
  foreach ($rows as $row) {
590
 
@@ -621,11 +621,11 @@ class SQ_Models_ImportExport {
621
  }
622
  }
623
 
624
- if($row->meta_key == 'rank_math_robots'){
625
  $value = unserialize($value);
626
  $metas[$hash]['noindex'] = in_array('noindex', (array)$value);
627
  $metas[$hash]['nofollow'] = in_array('nofollow', (array)$value);
628
- }else {
629
  $metas[$hash][$meta_keys[$row->meta_key]] = stripslashes($value);
630
  }
631
  }
@@ -633,6 +633,53 @@ class SQ_Models_ImportExport {
633
  }
634
  }
635
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
636
  }
637
 
638
  if ($platform == 'wordpress-seo') {
@@ -679,9 +726,9 @@ class SQ_Models_ImportExport {
679
  }
680
  }
681
 
682
- if($meta_keys[$row->meta_key] == 'noindex'){
683
  $metas[$hash][$meta_keys[$row->meta_key]] = ($value == 'on');
684
- }else {
685
  $metas[$hash][$meta_keys[$row->meta_key]] = stripslashes($value);
686
  }
687
 
@@ -1030,8 +1077,10 @@ class SQ_Models_ImportExport {
1030
  if (!empty($metas)) {
1031
  foreach ($metas as &$meta) {
1032
  if (is_array($meta)) {
1033
- foreach ($meta as &$field) {
1034
- $field = preg_replace('/%%([^\%]+)%%/', '{{$1}}', str_replace(array_keys($findreplace), array_values($findreplace), $field));
 
 
1035
  }
1036
  }
1037
  }
@@ -1129,8 +1178,10 @@ class SQ_Models_ImportExport {
1129
  if (!empty($metas)) {
1130
  foreach ($metas as &$meta) {
1131
  if (is_array($meta)) {
1132
- foreach ($meta as &$field) {
1133
- $field = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace(array_keys($findreplace), array_values($findreplace), $field));
 
 
1134
  }
1135
  }
1136
  }
581
 
582
  if (!empty($meta_keys)) {
583
  $placeholders = array_fill(0, count($meta_keys), '%s');
 
584
 
585
  $meta_keys = array_flip($meta_keys);
586
 
587
+ $query = "SELECT * FROM `$wpdb->postmeta` WHERE meta_key IN (" . join(",", $placeholders) . ");";
588
  if ($rows = $wpdb->get_results($wpdb->prepare($query, array_keys($meta_keys)), OBJECT)) {
589
  foreach ($rows as $row) {
590
 
621
  }
622
  }
623
 
624
+ if ($row->meta_key == 'rank_math_robots') {
625
  $value = unserialize($value);
626
  $metas[$hash]['noindex'] = in_array('noindex', (array)$value);
627
  $metas[$hash]['nofollow'] = in_array('nofollow', (array)$value);
628
+ } else {
629
  $metas[$hash][$meta_keys[$row->meta_key]] = stripslashes($value);
630
  }
631
  }
633
  }
634
  }
635
 
636
+
637
+ if ($platform == 'seo-by-rank-math') {
638
+ $query = "SELECT * FROM `$wpdb->termmeta` WHERE meta_key IN (" . join(",", $placeholders) . ");";
639
+ if ($rows = $wpdb->get_results($wpdb->prepare($query, array_keys($meta_keys)), OBJECT)) {
640
+ foreach ($rows as $row) {
641
+
642
+ if (isset($meta_keys[$row->meta_key]) && $row->meta_value <> '') {
643
+ if ($term = get_term($row->term_id)) {
644
+ //set the hash for each post type
645
+ $hash = md5($term->taxonomy . $term->term_id);
646
+ $metas[$hash]['term_id'] = $term->term_id;
647
+ $metas[$hash]['taxonomy'] = $term->taxonomy;
648
+ $metas[$hash]['url'] = get_term_link($term->term_id, $term->taxonomy);
649
+
650
+ $value = $row->meta_value;
651
+ if (function_exists('mb_detect_encoding') && function_exists('iconv')) {
652
+ if ($encoding = mb_detect_encoding($value)) {
653
+ if ($encoding <> 'UTF-8') {
654
+
655
+ //support for international languages
656
+ if (function_exists('iconv') && SQ_Classes_Helpers_Tools::getOption('sq_non_utf8_support')) {
657
+ if (strpos(get_bloginfo("language"), 'en') === false) {
658
+ $value = iconv($encoding, 'UTF-8', $value);
659
+ }
660
+ }
661
+
662
+ if (strpos($value, '%%') !== false) {
663
+ $value = preg_replace('/%%([^\%]+)%%/', '{{$1}}', $value);
664
+ }
665
+ }
666
+ }
667
+ }
668
+
669
+ if ($row->meta_key == 'rank_math_robots') {
670
+ $value = unserialize($value);
671
+ $metas[$hash]['noindex'] = in_array('noindex', (array)$value);
672
+ $metas[$hash]['nofollow'] = in_array('nofollow', (array)$value);
673
+ } else {
674
+ $metas[$hash][$meta_keys[$row->meta_key]] = stripslashes($value);
675
+ }
676
+ }
677
+ }
678
+
679
+ }
680
+
681
+ }
682
+ }
683
  }
684
 
685
  if ($platform == 'wordpress-seo') {
726
  }
727
  }
728
 
729
+ if ($meta_keys[$row->meta_key] == 'noindex') {
730
  $metas[$hash][$meta_keys[$row->meta_key]] = ($value == 'on');
731
+ } else {
732
  $metas[$hash][$meta_keys[$row->meta_key]] = stripslashes($value);
733
  }
734
 
1077
  if (!empty($metas)) {
1078
  foreach ($metas as &$meta) {
1079
  if (is_array($meta)) {
1080
+ foreach ($meta as $name => &$field) {
1081
+ if ($name == 'title' || $name == 'description') {
1082
+ $field = preg_replace('/%%([^\%]+)%%/', '{{$1}}', str_replace(array_keys($findreplace), array_values($findreplace), $field));
1083
+ }
1084
  }
1085
  }
1086
  }
1178
  if (!empty($metas)) {
1179
  foreach ($metas as &$meta) {
1180
  if (is_array($meta)) {
1181
+ foreach ($meta as $name => &$field) {
1182
+ if ($name == 'title' || $name == 'description') {
1183
+ $field = preg_replace('/%([^\%]+)%/', '{{$1}}', str_replace(array_keys($findreplace), array_values($findreplace), $field));
1184
+ }
1185
  }
1186
  }
1187
  }
models/Qss.php CHANGED
@@ -97,6 +97,24 @@ class SQ_Models_Qss {
97
  return $url;
98
  }
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  /**
101
  * Check if the table exists
102
  */
97
  return $url;
98
  }
99
 
100
+ /**
101
+ * Save the SEO for a specific Post into database
102
+ * @param $url
103
+ * @param $url_hash
104
+ * @param $post
105
+ * @param $seo
106
+ * @param $date_time
107
+ * @return false|int
108
+ */
109
+ public function savePermalink($url, $url_hash) {
110
+ global $wpdb;
111
+ $wpdb->hide_errors();
112
+
113
+ $wpdb->update($wpdb->prefix . _SQ_DB_ , array('URL' => $url), array('url_hash'=> $url_hash));
114
+
115
+ return $wpdb->rows_affected;
116
+ }
117
+
118
  /**
119
  * Check if the table exists
120
  */
models/Sitemaps.php CHANGED
@@ -153,12 +153,37 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
153
  }
154
  }
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  if (!in_array($currentpost->ID, $post_ids)) { //prevent from showing duplicates
157
  if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($currentpost)) {
158
  if ($post->sq->nositemap || !$post->sq->do_sitemap) {
159
  continue;
160
  }
161
-
 
 
162
  $posts[] = $this->_getXml($post);
163
  array_push($post_ids, $post->ID);
164
  }
@@ -201,6 +226,9 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
201
  if ($post->sq->nositemap || !$post->sq->do_sitemap) {
202
  continue;
203
  }
 
 
 
204
  $xml = $this->_getXml($post);
205
  if (strpos($xml['loc'], '?') !== false) {
206
  $xml['loc'] = wp_get_attachment_url($post->ID);
@@ -245,7 +273,9 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
245
  if ($post->sq->nositemap || !$post->sq->do_sitemap) {
246
  continue;
247
  }
248
-
 
 
249
  $this->setPost($post); //set current sitemap post
250
 
251
  $xml = array();
@@ -385,6 +415,9 @@ class SQ_Models_Sitemaps extends SQ_Models_Abstract_Seo {
385
  if ($post->sq->nositemap || !$post->sq->do_sitemap || !$post->url) {
386
  continue;
387
  }
 
 
 
388
  $array[] = $this->_getXml($post);
389
 
390
  }
153
  }
154
  }
155
 
156
+ if (function_exists('wpml_get_language_information')) {
157
+
158
+ $current_lang = apply_filters( 'wpml_current_language', NULL );
159
+
160
+ if ($current_lang && $info = wpml_get_language_information($currentpost->ID)) {
161
+ if(isset($info['language_code']) && $info['language_code'] == $current_lang)
162
+
163
+ if (!in_array($currentpost->ID, $post_ids)) { //prevent from showing duplicates
164
+ if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($currentpost->ID)) {
165
+ if ($post->sq->nositemap || !$post->sq->do_sitemap) {
166
+ continue;
167
+ }
168
+ if(SQ_Classes_Helpers_Tools::getOption('sq_sitemap_exclude_noindex') && $post->sq->noindex){
169
+ continue;
170
+ }
171
+ $posts[] = $this->_getXml($post);
172
+ }
173
+ }
174
+ //always add the current post ID as processed
175
+ array_push($post_ids, $currentpost->ID);
176
+ }
177
+ }
178
+
179
  if (!in_array($currentpost->ID, $post_ids)) { //prevent from showing duplicates
180
  if ($post = SQ_Classes_ObjController::getClass('SQ_Models_Snippet')->setPostByID($currentpost)) {
181
  if ($post->sq->nositemap || !$post->sq->do_sitemap) {
182
  continue;
183
  }
184
+ if(SQ_Classes_Helpers_Tools::getOption('sq_sitemap_exclude_noindex') && $post->sq->noindex){
185
+ continue;
186
+ }
187
  $posts[] = $this->_getXml($post);
188
  array_push($post_ids, $post->ID);
189
  }
226
  if ($post->sq->nositemap || !$post->sq->do_sitemap) {
227
  continue;
228
  }
229
+ if(SQ_Classes_Helpers_Tools::getOption('sq_sitemap_exclude_noindex') && $post->sq->noindex){
230
+ continue;
231
+ }
232
  $xml = $this->_getXml($post);
233
  if (strpos($xml['loc'], '?') !== false) {
234
  $xml['loc'] = wp_get_attachment_url($post->ID);
273
  if ($post->sq->nositemap || !$post->sq->do_sitemap) {
274
  continue;
275
  }
276
+ if(SQ_Classes_Helpers_Tools::getOption('sq_sitemap_exclude_noindex') && $post->sq->noindex){
277
+ continue;
278
+ }
279
  $this->setPost($post); //set current sitemap post
280
 
281
  $xml = array();
415
  if ($post->sq->nositemap || !$post->sq->do_sitemap || !$post->url) {
416
  continue;
417
  }
418
+ if(SQ_Classes_Helpers_Tools::getOption('sq_sitemap_exclude_noindex') && $post->sq->noindex){
419
+ continue;
420
+ }
421
  $array[] = $this->_getXml($post);
422
 
423
  }
models/abstract/Seo.php CHANGED
@@ -131,6 +131,8 @@ abstract class SQ_Models_Abstract_Seo {
131
 
132
  if (strpos($match[1], '//') === false) {
133
  $match[1] = get_bloginfo('url') . $match[1];
 
 
134
  }
135
 
136
  $images[] = array(
131
 
132
  if (strpos($match[1], '//') === false) {
133
  $match[1] = get_bloginfo('url') . $match[1];
134
+ }elseif (strpos($match[1], '//') === 0) {
135
+ $match[1] = (SQ_SSL ? 'https:' : 'http:') . $match[1];
136
  }
137
 
138
  $images[] = array(
models/domain/Patterns.php CHANGED
@@ -169,7 +169,7 @@ class SQ_Models_Domain_Patterns extends SQ_Models_Abstract_Domain {
169
  } elseif ($this->_id > 0) {
170
  $allcategories = SQ_Classes_ObjController::getClass('SQ_Models_Domain_Categories')->getAllCategories($this->_id);
171
  if (!empty($allcategories)) {
172
- $this->_category = join(',', $allcategories);
173
  }
174
  }
175
  }
169
  } elseif ($this->_id > 0) {
170
  $allcategories = SQ_Classes_ObjController::getClass('SQ_Models_Domain_Categories')->getAllCategories($this->_id);
171
  if (!empty($allcategories)) {
172
+ $this->_category = join(', ', $allcategories);
173
  }
174
  }
175
  }
models/services/JsonLD.php CHANGED
@@ -339,11 +339,7 @@ class SQ_Models_Services_JsonLD extends SQ_Models_Abstract_Seo {
339
  $markup['url'] = $this->_post->url;
340
 
341
  if (isset($this->_post->sq->title)) {
342
- $markup['name'] = $this->cleanText($this->truncate($this->_post->sq->title, 0, $this->_post->sq->jsonld_title_maxlength));
343
- }
344
-
345
- if (isset($this->_post->sq->description)) {
346
- $markup['headline'] = $this->cleanText($this->truncate($this->_post->sq->description, 0, $this->_post->sq->jsonld_description_maxlength));
347
  }
348
 
349
  $markup['mainEntityOfPage'] = array(
339
  $markup['url'] = $this->_post->url;
340
 
341
  if (isset($this->_post->sq->title)) {
342
+ $markup['headline'] = $this->cleanText($this->truncate($this->_post->sq->title, 0, $this->_post->sq->jsonld_title_maxlength));
 
 
 
 
343
  }
344
 
345
  $markup['mainEntityOfPage'] = array(
models/services/Noindex.php CHANGED
@@ -17,17 +17,27 @@ class SQ_Models_Services_Noindex extends SQ_Models_Abstract_Seo {
17
  if (get_option( 'blog_public' ) == 0) {
18
  return $robots;
19
  }
 
20
  if ((int)$this->_post->sq->noindex == 1) {
21
- $robots[] = 'noindex';
22
  }else{
23
- $robots[] = 'index';
24
  }
 
25
  if ((int)$this->_post->sq->nofollow == 1) {
26
- $robots[] = 'nofollow';
27
  } elseif (!empty($robots)) {
28
- $robots[] = 'follow';
29
  }
30
 
 
 
 
 
 
 
 
 
31
  return $robots;
32
  }
33
 
17
  if (get_option( 'blog_public' ) == 0) {
18
  return $robots;
19
  }
20
+
21
  if ((int)$this->_post->sq->noindex == 1) {
22
+ $robots[0] = 'noindex';
23
  }else{
24
+ $robots[0] = 'index';
25
  }
26
+
27
  if ((int)$this->_post->sq->nofollow == 1) {
28
+ $robots[1] = 'nofollow';
29
  } elseif (!empty($robots)) {
30
+ $robots[1] = 'follow';
31
  }
32
 
33
+ if($this->_post->term_id && SQ_Classes_Helpers_Tools::getOption('sq_term_noindex_empty')){
34
+ if(function_exists('have_posts') && !have_posts()){
35
+ $robots[0] = 'noindex';
36
+ $robots[1] = 'nofollow';
37
+ }
38
+ }
39
+
40
+
41
  return $robots;
42
  }
43
 
readme.txt CHANGED
@@ -400,6 +400,17 @@ Type a keyword to the right of the screen and start using Squirrly Seo. Enjoy!
400
  9. Squirrly SEO - Progress & Achievements
401
 
402
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
403
  = 11.1.03- 05/06/2021 =
404
  Update - Do not track the traffic for Squirrly crawlers
405
  Update - Add in Dev Kit the options to hide the Research, All Snippets, Live Assistant menu items
@@ -712,934 +723,6 @@ Increased plugin security and update compatibilities
712
  * Introducing Squirrly Private SEO Consultant and Squirrly Machine Learning system
713
  * and more ...
714
 
715
- = 9.2.21 - 04/13/2020 =
716
- * Fixed Focus Pages audit date and error
717
- * Fixed AMP issue for JSON-LD
718
-
719
- = 9.2.20 - 04/03/2020 =
720
- * SEO Update - Tested and Compatible with WordPress 5.4 stable
721
- * Live Assistant works well for Media Files
722
- * Fixed small bugs
723
-
724
- = 9.2.18 - 02/12/2020 =
725
- * Updated Squirrly Live Assistant and Briefcase for Google 2020
726
- * Fixed the Json-LD for Woocommerce websites
727
- * Fixed Squirrly to load Google API only for Squirrly settings pages
728
-
729
- = 9.2.17 - 01/22/2020 =
730
- * Updated the Focus Pages SEO Image, Innerlinks, traffic
731
- * Fixed compatibility with Starbox plugin
732
- * Fixed SSL check on remote calls to Squirrly Cloud
733
- * Update compatibility with the last version of Woocommerce
734
- * Update compatibility with review plugins
735
- * Update Open Graph product valability
736
- * Import from Rank Math plugin
737
-
738
- = 9.2.16 - 12/21/2019 =
739
- * SEO Update - Tested and Compatible with WordPress 5.3.2
740
- * Update JSON-LD for AMP websites
741
- * Fixed compatibility with the AMP to WP plugin
742
- * Fix the CSS with the new version of WP
743
- * Fix buffer arguments number
744
-
745
- = 9.2.15 - 12/19/2019 =
746
- * SEO Update - Tested and Compatible with WordPress 5.3.1
747
- * Fix - The multilanguage support for Thai language
748
- * Fix - The WP-Rocket compatibility
749
-
750
- = 9.2.14 - 10/29/2019 =
751
- * SEO Update - Added the option to choose the Live Assistant Type
752
- * SEO Update - Tested and Compatible with WordPress 5.2.4
753
- * Fix - The Squirrly SEO roles for different caps
754
-
755
- = 9.2.13 - 10/08/2019 =
756
- * Update - Added Bulk Option in the Briefcase Section
757
- * Update - Added Bulk Option in the Labels Section
758
- * Update - Added Bulk Option in the Rankings Section
759
- * Update - Added Help Sections in the plugin
760
- * Fix - Snippet ajax information for some websites
761
- * Fix - Don't add blank urls in sitemap
762
-
763
- = 9.2.12 - 09/17/2019 =
764
- * SEO Update - Tested and Compatible with WordPress 5.2.3
765
- * SEO Update - Added Yandex SEO support for Yandex.com
766
- * Fix - ranking assistant to set all green on average possitions
767
- * Fix - Fixed the Squirrly SEO Admin role
768
- * Fix - Fixed the Russian chars in Focus Pages, Bulk SEO and Squirrly SEO Snippet
769
-
770
- = 9.2.10 - 09/03/2019 =
771
- * Update - Squirrly Live Assistant for multiple languages
772
- * Update - my.squirrly.co to post on WordPress through a secure connection
773
- * Update - Update SEO METAs with last Google Algorithms
774
- * Update - Set Squirrly capabilities for each role
775
- * Update - Keywords suggestion update for better results
776
- * Fix - User Role Management when Admin has multiple roles
777
- * Fix - Sitemap terms exclude empty tags and categories
778
- * Fix - Sitemap taxonomi limit included to prevent timeouts
779
- * Fix - Fix small bugs
780
-
781
- = 9.2.01 - 08/20/2019 =
782
- * Update - Allow emoji in title and description in SEO Snippet
783
- * Fix - The keyword in article image for Focus Pages
784
- * Fix - Acuracy in Focus Pages
785
- * Fix - Save and Error messages in Bulk SEO Snippet
786
- * Fix - Remove the page from sitemap when pagination
787
- * Fix - Add language slug in Polylang sitemap when the languages are not combined
788
-
789
- = 9.2.00 - 08/06/2019 =
790
- * Update - Present the main features in Tutorial
791
- * Fix - Ignore the www. on external links in focus page > outbound links
792
- * Fix - URL decode for arabic language in Bulk SEO and Focus Pages
793
- * Fix - Focus Pages Nofollow to External Links
794
- * Fix - Corrected Innner links in Focus Pages
795
- * Fix - Fixed Squirrly SEO Buffer on shutdown
796
- * Fix - Fixed CSS issues within the plugin
797
- * Fix - Changed JSON-LD Type with JSON-LD Code in Squirrly SEO Snippet
798
- * fix - Fix the bulkseo.js to load the correct assistant on tab change
799
-
800
- = 9.1.21 - 07/22/2019 =
801
- * Update - DEV KIT disconnect website process
802
- * Update - Added rollback option to a previous stable version
803
- * Fix - Post Save hook priority changed
804
- * Fix - Fixed the Admin Bar CSS while in Squirrly SEO Settings
805
- * Fix - Fixed Live Assistant optimization score for block editor
806
- * Fix - Don't show the loading icon on SEO and Settings Backup Button
807
- * Fix - Corrected the Post Editor font Open Sans import
808
-
809
- = 9.1.20 - 07/22/2019 =
810
- * Fix - import url('https://fonts.googleapis.com/css?family=Open + Sans') issue in snippet
811
- * Fix - Fontawesome font size to be targeted to Squirrly divs
812
- * Fix - Focus Pages average time taks to reflect the minimum time on site
813
- * Fix - Send the correct post permalink to Squirrly Cloud
814
- * Fix - Corrected the Post publish hook in Post Controller
815
-
816
- = 9.1.19 - 07/08/2019 =
817
- * Update - Added refresh button for Squirrly SEO Snippet on ajax error
818
- * Fix - Canonical link verification on Focus Pages
819
- * Fix - PHP count() warning when the array is empty
820
- * Fix - The Inner Links count when the links are not absolute
821
-
822
- = 9.1.18 - 06/19/2019 =
823
- * Update - Live Assistant metrics and learning
824
- * Fix - Fixed Add to Briefcase in Google Search Console Keywords Sync
825
- * Fix - Fixed Squirrly Feedback button
826
- * Fix - Update Visibility score for draft pages
827
- * Fix - Responsive table in Rankings for smaller devices
828
-
829
- = 9.1.17 - 06/05/2019 =
830
- * Update - Added the Focus Page link in the Assistant Tasks side
831
- * Fix - Fixed the Show All button in Briefcase
832
- * Fix - Show Indexed in Squirrly Briefcase when a keyword is indexed in Serp Checker
833
- * SEO Update - Tested and Compatible with WordPress 5.2.1
834
-
835
-
836
- = 9.1.16 - 05/30/2019 =
837
- * Update - Added option for BreadCrumbsList in Json-LD
838
- * Update - Added option to clear the Json-LD code before loading to avoid duplicates
839
- * Fix - Loading Media Library in Bulk SEO for Open Graph and Twitter Card
840
- * Fix - Loading Media Library in Json-LD page
841
-
842
- = 9.1.15 - 05/21/2019 =
843
- * Update - Limit the results in Bulk SEO to 50 to avoid reaching the Memory Limit
844
- * Fix - Facebook Local language fix when WPML is installed
845
- * Fix - Double check if the connection with API is security and call it with HTTPS
846
-
847
- = 9.1.14 - 05/17/2019 =
848
- * Update - Increased the timeout for Keyword Research process
849
- * Update - Compatibility with the latest versions of Autoptimize, W3 Total Cache, WP Super Cache
850
- * Fix - Json-LD set to auto by default and prevent switching to custom
851
- * Fix - Remove the javascript error in squirrly.js when wp is undefined
852
- * Fix - Remove the trail slash in Bulk SEO pagination
853
- * Fix - Remove the page from post title in Bulk SEO when paginate
854
- * Fix - Increased the number of posts shown in Bulk SEO on one page
855
-
856
- = 9.1.13 - 05/14/2019 =
857
- * Update - Remove the CSS and JS from other plugin when Squirrly SEO Settings are loaded to prevent modal box issues
858
- * Fix - Keyword Research to show the timeout message and not the error message.
859
- * Fix - Prevent Breadcrumbs showing Auto Draft title when custom Json-LD is saved
860
- * Fix - Json-LD to validate the apostrophe in title and description
861
- * Fix - Stop reloading the Snippet in frontend on relogin or when no data exists for the page
862
-
863
- = 9.1.12 - 05/07/2019 =
864
- * Update - Focus Pages Keyword Competition, Search Volume, Trend
865
- * Fix - Custom SEO for Blog Post Page set in Settings > Readings
866
- * Fix - Squirrly Live Assistant Gutenberg Blocks identification
867
-
868
- = 9.1.11 - 04/24/2019 =
869
- * Update - Added the 14 days journey links to the completed days
870
- * Update - Check the SEO with API crawler to prevent local SSL errors
871
- * Update - Set DevKit menu in Squirrly SEO
872
- * Update - Json-LD task is complete only when the relevant data is added
873
- * Fix - Don't let to get to second step if the keyword is not set in the Keyword Research Tool
874
- * Fix - Keyword Research Tool column sort by competition and search volume
875
- * Fix - Focus Page audit error catch and message
876
- * Fix - Changed the remote timeout to 5 sec
877
- * Fix - Removed the error from API access
878
- * Fix - Show loading icon on the submit button when a form is submitted
879
- * Fix - Don't show Squirrly in admin toolbar when user is in network panel for wp multisite
880
- * Fix - Go to login page in case the account is disconnected from API
881
- * Fix - Remove the Squirrly 2018 exclude post type filter in frontend SEO
882
-
883
- = 9.1.10 - 04/19/2019 =
884
- * Update - Ranking details in Squirrly SEO Rankings
885
- * Update - Messages in Focus Pages when the page is not optimized for a keyword
886
- * Update - Added the 14 Days Journey in case the user didn't start it
887
- * Update - Facebook reactions count for Focus Pages and Audit
888
- * Update - Focus Pages floating header if more Focus Pages were added
889
- * Fix - Show the Live Assistant message when the user is not logged in to Squirrly
890
- * Fix - Layout fix for Bulk Seo and Show All Button
891
- * Fix - Show the Squirrly Snippet in Tags and custom tags
892
- * Fix - Changed the description height in Squirrly SEO Snippet
893
- * Fix - Show Squirrly Menu for Editors and Authors
894
- * Fix - Update caps and roles for author and editors in Research section
895
- * Fix - Don't show send keyword to Rankings if the keyword is already sent
896
- * Fix - Show impressions column in the GSG Sync page
897
- * Fix - Import keywords in Squirrly Briefcase from old Squirrly Briefcase backups
898
- * Fix - The Keyword Research algorithm
899
-
900
- = 9.1.06 - 04/16/2019 =
901
- * Update - Added Account Info in menu
902
- * Update - Focus pages messages
903
- * Fix - Squirrly Live Assistant add new keyword error
904
- * Fix - Squirrly Admin Layout
905
- * Fix - Squirrly Mobile Responsive
906
-
907
- = 9.1.05 - 04/15/2019 =
908
- * Update - Message on Ranking with GSC
909
- * Update - Platform SEO task description
910
- * Update - Import Keywords from CSV
911
- * Update - Add the option in SEO Settings > Tracking to load the tracking codes only for visitors
912
- * Fix - Parse error: syntax error, unexpected '::' Sitemaps.php on line 476
913
- * Fix - Responsive assistant view for pads and tiny desktops
914
- * Fix - Keyword in Bulk SEO
915
- * Fix - Don't inport the Journey Date
916
-
917
- = 9.1.04 - 04/08/2019 =
918
- * Fix - Squirrly Keyword Research Timeout after 10 seconds
919
- * Fix - Keyword research suggestions
920
- * Fix - Onboarding for editors to be able to start Squirrly
921
- * Fix - ob_flush causes blank screens for some users
922
- * Fix - SEO Check fix SSL error on check
923
- * Fix - Show the Assistant in the Right for Bulk SEO and Focus Pages
924
-
925
- = 9.1.02 - 04/05/2019 =
926
- * Fix - Squirrly Onboarding Loop
927
-
928
- = 9.1.02 - 04/05/2019 =
929
- * Update - Added the SEO Experts option for advanced SEO
930
- * Fix - Compatibility with PHP 5.6
931
- * Fix - JSON-LD type in SEO Automation
932
- * Fix - Update the JSON-LD to load the article schema correctly
933
- * Fix - CSS compatibility with more plugins and themes
934
- * Fix - Show custom separator in SEO automation
935
- * Fix - Show Squirrly Keyword in Bulk SEO which was used in Content Optimization
936
- * Fix - Bulk SEO Keyword identification
937
-
938
- = 9.1.00 - 04/04/2019 =
939
- * Update - Squirrly SEO 2019 (Strategy)
940
- * Update - New Squirrly UX and many new features
941
- * Update - 14 Days Journey with Squirrly SEO to better ranking
942
- * Update - Squirrly Onboarding Process
943
- * Update - Check for SEO Errors in frontend
944
- * Update - SEO Settings > Bulk SEO
945
- * Update - SEO Settings > SEO Automation
946
- * Update - Focus Pages
947
- * Update - Google Search Console Rankings
948
- * Update - Google Analytics Traffic Audit
949
-
950
- * Beta Changes __________________________
951
- * Squirrly Onboarding Process
952
- * Squirrly Keyword Research add keyword to Briefcase when no KR left
953
- * Added Author and Publish date on Rich Pins
954
- * Updated the Open Graph for Facebook
955
- * Add separator in Keyword research
956
- * Updated the Research communication with Squirrly API
957
- * Added CGS keywords sync button in Rankings
958
- * Add keywords from GSC into Briefcase and Rankings
959
- * Fixed Squirrly SEO Check crawler in case of redirect
960
- * Fixed connection problem with Squirrly API
961
- * Fixed info for the keywords with special chars
962
- * Fixed small css bugs
963
- * Fixed the Tab issue in Squirrly > SEO Settings > Automation
964
- * Show the Errors in GA & GSC connection
965
- * Fixed frontend snippet ob_flush error
966
- * Updated Keyword Research, Keyword History, Keyword Suggestion
967
- * Updated Dashboard with SEO Issues found
968
- * Updated Bulk SEO with Keyword in Title and Keyword in Description tasks
969
- * Fixed unknown function calls error
970
- * Beta version of the new Squirrly SEO Strategy
971
-
972
- = 8.4.07 - 02/22/2019 =
973
- * SEO Update - Tested and Compatible with WordPress 5.1
974
-
975
- = 8.4.06 - 01/03/2019 =
976
- * SEO Update - Compatible with WordPress 5.0.2
977
- * SEO Update - Update to the latest Google requirements
978
- * SEO Fix - Replace the %% patterns to Squirrly in case they still exist after the import
979
- * SEO Fix - Remove other robots meta when Squirrly Index, Follow is activated
980
-
981
- = 8.4.04 - 12/10/2018 =
982
- * SEO Update - Compatible with WordPress 5.0
983
- * SEO Fix - Prevent from saving the same image in media library multiple times
984
- * SEO Fix - Prevent image width and height value to be equal with 0 in Open Graph
985
-
986
- = 8.4.03 - 11/26/2018 =
987
- * SEO Fix - Showing Sqirrly in the right side when Gutenberg is not active
988
- * SEO Fix - Loading Squirrly Live Assistant issue
989
-
990
- = 8.4.02 - 11/23/2018 =
991
- * SEO Update - Added the box move option in Squirrly Live Assistance
992
- * SEO Fix - Keyword Research timout when searching multiple keywords
993
- * SEO Fix - Keyword Information Search Volume
994
- * SEO Fix - SEO updates in JSON-LD
995
-
996
- = 8.4.01 - 11/15/2018 =
997
- * SEO Fix - Excluded unused tags from sitemap in sitemap-taxonomy
998
- * SEO Fix - Fixed the Briefcase warning in case there are no labels set
999
-
1000
- = 8.4.00 - 11/13/2018 =
1001
- * SEO Update - Fetch new data in Facebook on post save
1002
- * SEO Update - Set URL ping to false by default and encourage the Google Search Console fetch
1003
- * SEO Fix - Keyword research search volume showing 0
1004
- * SEO Fix - COmpatibility with other plugins
1005
-
1006
- = 8.3.39 - 10/10/2018 =
1007
- * SEO Update - Morocco added in Google Ranking Option
1008
- * SEO Update - SEO Compatibility with WordPress 5
1009
- * SEO Fix - The overlay in Gutemberg 4.1.1 when Yoast is installed
1010
- * SEO Fix - Briefcase Search Volum info
1011
-
1012
- = 8.3.38 - 10/10/2018 =
1013
- * SEO Fix - Memory limit check in case the memory limit is over 1G
1014
- * SEO Fix - Set attachment sitemap as uncheck by default
1015
- * SEO Fix - Lower the attachment sitemap priority to prevent indexing the images before the articles
1016
- * SEO Fix - On multisite network there was an error at line squirrly-seo/controllers/Menu.php on line 372
1017
-
1018
- = 8.3.37 - 10/01/2018 =
1019
- * SEO Update - Compatibility with Gutenberg 3.9
1020
- * SEO Update - Compatibility with BuddyPress 3.2
1021
- * SEO Fix - Attachment URL linked to image URL when the attachment page is missing
1022
-
1023
- = 8.3.36 - 09/19/2018 =
1024
- * SEO Update - Compatibility with Gutenberg 3.8
1025
- * SEO Update - Compatibility with Woocommerce 3.4.5
1026
- * SEO Fix - Corrected the JSON-LD for Posts and Pages
1027
-
1028
- = 8.3.35 - 08/23/2018 =
1029
- * SEO Fix - Corrected the CSV export on Keyword Research
1030
- * SEO Fix - Corrected the JSON-LD for Author pages
1031
-
1032
- = 8.3.34 - 08/16/2018 =
1033
- * SEO Update - Compatibility with Gutenberg 3.5
1034
- * SEO Update - Compatibility with Woocommerce 3.4.4
1035
- * SEO Fix - Removed JSON-LD from tags and categories to prevent Structured Data Inconsistency
1036
- * SEO Fix - Prevent Squirrly Snippet from showing in Wordpress Dashboard pages
1037
-
1038
- = 8.3.33 - 08/11/2018 =
1039
- * SEO Fix - Save the Keyword in Post Edit
1040
- * SEO Fix - Save the image when edit with Gutenberg plugin
1041
-
1042
- = 8.3.32 - 08/06/2018 =
1043
- * SEO Update - Added support for more frontend builders
1044
- * SEO Update - Updated the Google Analytics Code for gtag
1045
- * SEO Update - Squirrly Live Assistant compatibility with Gutenberg
1046
- * Squirrly SEO is compatible with WP 4.9.8
1047
-
1048
- = 8.3.31 - 07/25/2018 =
1049
- * SEO Fix - Loading duplicate CSS and JS from Squirrly
1050
- * Settings Fix - Save the custom email on Squirrly Support section
1051
- * SEO Fix - Corrected the overlaps in Squirrly SEO Live Assistant when Gutenberg is not activated
1052
-
1053
- = 8.3.30 - 07/23/2018 =
1054
- * SEO Update - Squirrly SEO Live Assistant is compatible with Gutenberg plugin
1055
- * SEO Update - Added Image and HTML Support for Gutenberg editor
1056
- * SEO Fix - Scroll to Squirrly block when Gutenberg is activated
1057
-
1058
- = 8.3.23 - 07/16/2018 =
1059
- * Squirrly SEO is compatible with WP 4.9.7
1060
- * Settings Fix - Corrected the js if it's not loading every time
1061
- * SEO Fix - Prevent timeout on Google Ranking updated from Squirrly Cloud
1062
-
1063
- = 8.3.22 - 07/12/2018 =
1064
- * SEO Fix - Correct patterns {{focuskw}} and {{keyword}}
1065
- * SEO Fix - Show labels in Briefcase is no keyword is added
1066
-
1067
- = 8.3.21 - 07/04/2018 =
1068
- * SEO Fix - Get all URLs in Advanced Analytics and link them with the local posts
1069
- * SEO Update - Added Gutenberg support
1070
-
1071
- = 8.3.20 - 06/19/2018 =
1072
- * SEO Update - Add the Media sitemap with all the attachments
1073
- * SEO Update - Better filter to save optimized articles and Squirrly Snippet
1074
- * SEO Update - Ecommerce update for sitemap hourly and daily changes options
1075
- * SEO Fix - Better filter to remove the highlight in Squirrly SEO Live Assistant
1076
- * SEO Fix - Download images locally even if they don't have a URL extension
1077
-
1078
- = 8.3.19 - 06/10/2018 =
1079
- * SEO Update - Update the Social Media Shares. Removed the inactive once: linkedIn and Google Plus
1080
- * SEO Fix - Remove SimpleXML check
1081
- * Squirrly SEO is compatible with WP 4.9.6
1082
-
1083
- = 8.3.18 - 05/16/2018 =
1084
- * Update - GDPR Compliant
1085
- * SEO Update - Google Croatia in Rank Option and Keyword Research
1086
- * SEO Fix - Prevent removing the JSON-LD from oter plugins
1087
- * SEO Fix - Prevent from showing Squirrly Settings when the user is not yet connected to Squirrly Cloud
1088
- * SEO Fix - Google Plus and LinkedIn discontinued their support for share counts
1089
-
1090
-
1091
- = 8.3.17 - 04/25/2018 =
1092
- * SEO Update - Google Nigeria was added in Google Ranking Option
1093
- * SEO Update - Google SEO updated for April 2018
1094
- * SEO Fix - Prevent the Plus Sign from being translated into space
1095
- * SEO Fix - Title and Description METAs for Posts page for the last version ot WP
1096
- * Squirrly SEO is compatible with WP 4.9.5
1097
-
1098
- = 8.3.16 - 03/27/2018 =
1099
- * SEO Update - Google Ghana was added in Google Ranking Option
1100
- * SEO Update - Google Analytics code update
1101
- * SEO Update - Added new patterns {{currentday}} {{currentmonth}} {{currentyear}}
1102
-
1103
- = 8.3.15 - 03/22/2018 =
1104
- * SEO Fix - Don't display JSON-LD author for pages without authors
1105
- * SEO Fix - Include the Home Page sitemap in sitemap.xml
1106
- * SEO Update - better Yoast wordpress seo plugin alternative compatibility
1107
- * SEO Update - worked more on compatibility with All in One SEO
1108
- * SEO Update - added more compatibility between Squirrly SEO and SEO Framework plugin
1109
- * SEO Update - compatibility updates for Monster Insights
1110
- * SEO Update - backups from Yoast focus keywords now available
1111
- * SEO Update - WooCommerce SEO modules all fully included in Squirrly SEO
1112
- * SEO Update - MOZ compatibility and API updates
1113
- * SEO Update - SEMrush data reduced for better analysis
1114
- * SEO Update - Market Samurai keyword compatibility
1115
- * SEO Update - Ubersuggest keywords can be used with Keyword Research from Squirrly
1116
- * SEO Update - Keyword Planner tools from Google described for SEO purposes in db
1117
- * SEO Update - Google Ranking checker improved and better Google SERP Checker
1118
- * SEO Update - Hubspot SEO checks requests from users
1119
- * SEO Update - Majestic SEO compatibility updated for SEO Audit
1120
- * SEO Update - Google Analytics for WordPress codes updated
1121
- * SEO Update - Search Console integration prepared in my.squirrly
1122
- * SEO Update - Facebook Pixel amazing updates to control, tracking, and event-based actions
1123
- * SEO Update - Rich Pins updates for WooCommerce based Pinterest profiles and Pinterest posts
1124
- * SEO Update - more schema and json-ld updates
1125
- * SEO Update - Custom Sidebars - Dynamic Widget Area Manager compatibility
1126
-
1127
- = 8.3.14 - 03/19/2018 =
1128
- * SEO Update - Add a new pattern {{post_description}} to get only the description from Post Content
1129
- * SEO Fix - Compatibility with Woozone Plugin
1130
- * SEO Fix - Fatal error: Call to undefined function rest_get_url_prefix() on Tools.php on line 518
1131
- * SEO Fix - Missing argument 2 for get_term() on Frontend.php on line 703
1132
- * SEO Fix - Site Icon remove from Genesis framework when the Site Icon is loaded in Squirrly
1133
-
1134
- = 8.3.13 - 03/05/2018 =
1135
- * SEO Update - Added option in sitemap to add all languages in the same sitemap
1136
- * SEO Update - Changed the connection to my.squirrly.co to load for https websites
1137
- * SEO Fixed - Corrected the Current Month and Current Year Patterns
1138
- * SEO Update - Q2W3 Fixed Widget compatibility with this wordpress seo plugin
1139
- * SEO Update - WooCommerce Services works awesome with this WooCommerce SEO plugin
1140
- * SEO Update - YITH WooCommerce Wishlist compatibility
1141
- * SEO Update - works now with WooCommerce PDF Invoices & Packing Slips
1142
- * SEO Update - good with Shapely Companion
1143
- * SEO Update - works with Mollie Payments for WooCommerce
1144
- * SEO Update - compatible with Optimize Database after Deleting Revisions
1145
- * SEO Update - Custom Post Type UI compatible
1146
- * SEO Update - Header and Footer Scripts full compatibility
1147
-
1148
- = 8.3.12 - 02/23/2018 =
1149
- * SEO Update - Added Select Country in Briefcase for Keyword Research
1150
- * SEO Fix - wpml_get_language_information WP_error conflict with other plugins.
1151
- * SEO Fix - Sitemap XSL style for domains with both www and root access.
1152
- * SEO Update - Post Type Switcher working
1153
- * SEO Update - PS Auto Sitemap compatible
1154
- * SEO Update - Posts in Sidebar compatibility works
1155
- * SEO Update - Redux Framework compatible
1156
- * SEO Update - Orbit Fox by ThemeIsle compatible
1157
- * SEO Update - WP Maintenance Mode in
1158
- * SEO Update - Google XML Sitemaps compatible
1159
- * SEO Update - W3 Total Cache total compatibility
1160
- * SEO Update - MetaSlider ensure works together with SQ
1161
- * SEO Update - Redirection compatible
1162
- * SEO Update - Glue for Yoast SEO & AMP compatible
1163
-
1164
- = 8.3.11 - 02/23/2018 =
1165
- * SEO Fix - Correct the separator to show on custom patterns
1166
- * SEO Fix - Show Title and Excerpt when Pattern option is off
1167
- * SEO Fix - Save Pattern option on Switch click
1168
- * SEO Fix - Show Save Message on Snippet save
1169
- * SEO Fix - Fixed the _sq Object notification in Patterns Domain
1170
- * SEO Update - The SEO Framework import SEO data into Squirrly SEO
1171
- * SEO Update - SEOPress compatible
1172
- * SEO Update - Cloudflare compatibility works
1173
- * SEO Update - Link Checker works to improve compatibility
1174
- * SEO Update - Open Graph for Facebook, Google+ and Twitter Card Tags
1175
- * SEO Update - Open Graph for Facebook, Google+ and Twitter Card Tags plugin works
1176
- * SEO Update - WordPress Share Buttons Plugin - AddThis compatiblity
1177
- * SEO Update - Social Media Share Buttons & Social Sharing Icons works
1178
- * SEO Update - AddToAny Share Buttons compatibility
1179
-
1180
- = 8.3.10 - 02/21/2018 =
1181
- * SEO Update - Launching the Squirrly SEO Briefcase Labels
1182
- * SEO Update - Changed New Meta Lengths for all articles
1183
- * SEO Update - Added Briefcase Labels Filter in Editor Posts
1184
- * SEO Update - Wise Chat improve
1185
- * SEO Update - Contact Widgets works
1186
- * SEO Update - Social Icons compatible
1187
- * SEO Update - OG
1188
- * SEO Update - Wordfence Security - Firewall & Malware Scan compatible
1189
- * SEO Update - Google Analytics Dashboard for WP (GADWP) compatible
1190
- * SEO Update - Jetpack by WordPress.com backups and imports
1191
- * SEO Update - Elementor Page Builder compatible
1192
- * SEO Update - Elementor Page Builder SEO Live Assistant now checks it better
1193
- * SEO Update - Ninja Forms - The Easy and Powerful Forms Builder compatibility
1194
-
1195
- = 8.3.08 - 02/15/2018 =
1196
- * SEO Update - Update the article:tag Meta for Facebook Open Graph (SEO update)
1197
- * Squirrly SEO is compatible with Cache Enabler plugin
1198
- * SEO Update - Show canonical link for Draft Posts in Squirrly SEO Snippet
1199
- * SEO Fix - Fixed the invalid email issue for longer domain extensions when connecting the blog with Squirrly SEO
1200
- * SEO Fix - Removed the Memory Filter from Frontend (SEO update)
1201
- * SEO Fix - Removed the deprecate PHP 7.2 functions
1202
-
1203
- = 8.3.07 - 02/12/2018 =
1204
- * SEO Fix - Fixed the login error "Both fields are required."
1205
- * SEO Fix - Fixed deprecate call "create_function" for 7.2 or grater
1206
- * SEO Update - All-in-One WP Migration compatible
1207
- * SEO Update - WP-Optimize compatible
1208
- * SEO Update - Page Builder by SiteOrigin works with it
1209
- * SEO Update - WP Super Cache ensure working plugins
1210
- * SEO Update - WooCommerce PayPal Express Checkout Payment Gateway compatible
1211
- * SEO Update - All In One SEO Pack backup data and imports
1212
- * SEO Update - Nextend Social Login and Register (Facebook, Google, Twitter) compatible
1213
- * SEO Update - Revive Old Posts - Auto Post to Social Media compatible
1214
- * SEO Update - WP to Twitter
1215
-
1216
- = 8.3.06 - 02/09/2018 =
1217
- * SEO Update - Launching Squirrly SEO 2018 Briefcase
1218
- * SEO Fix - Fixed css and js loading when multiple jquerys are loaded
1219
- * SEO Fix - Fixed compatibility with Wordpress SEO Yoast and All In One SEO
1220
- * SEO Fix - Fixed compatibility with Thrive Architect
1221
- * Squirrly SEO is compatible with WP 4.9.4
1222
-
1223
- = 8.3.05 - 01/18/2018 =
1224
- * SEO Update - Changed Briefcase BETA to Production
1225
- * SEO Fix - Fixed sitemap.xml compatibility with more themes
1226
- * SEO Fix - Fixed memory loading limit and white screens
1227
- * Squirrly SEO is compatible with WP 4.9.2
1228
-
1229
- = 8.3.04 - 01/15/2018 =
1230
- * SEO Update - Update the Description Meta patterns excerpt to work if shortcodes are included in description
1231
- * SEO Update - Ignore URL prefix when checking the keyword in Ranking Option
1232
- * SEO Update - Change schema.org prefix to https in jsonld
1233
- * SEO Update - Update SEO for JsonLD and Open Graph
1234
- * SEO Update - Update the Squirrly SEO Briefcase to show all the optimized keywords
1235
- * SEO Fix - Fixed the Dollar Sign issue in Meta Title and Description
1236
- * SEO Fix - Fixed small bugs
1237
-
1238
- = 8.3.03 - 01/10/2018 =
1239
- * SEO Update - Remove the fontend.css from meta with the command define('SQ_NOCSS',true); in wp-config.php
1240
- * SEO Fix - Squirrly SEO SLA Images and News search
1241
-
1242
- = 8.3.02 - 12/18/2017 =
1243
- * SEO Update - The hreflang Meta removal
1244
- * SEO Update - Remove WP notifications
1245
- * SEO Update - Added option to close top notifications
1246
- * SEO Update - Added option to disable the auto patterns
1247
- * SEO Update - Added option to exclude post types from frontend SEO
1248
- * SEO Update - Prevent from adding broken link canonical
1249
- * SEO Update - Increased the Max Description Meta to 320 chars for new posts
1250
- * Squirrly SEO is now compatible with WP 4.9.1 and more Cache Plugins
1251
-
1252
- = 8.3.01 - 12/12/2017 =
1253
- * SEO Update - Added the Briefcase Beta version
1254
- * SEO Update - Added the Briefcase Keywords Section
1255
- * SEO Update - Added the Advanced Analytics section for Business Subscription
1256
- * SEO Update - Show the custom post types without feed in sitemap.xml
1257
- * SEO Update - Remove custom posts without publicly_queryable from sitemap.xml
1258
- * SEO Update - Remove the extra notifications in Advanced Analytics
1259
- * SEO Update - Optimize the Squirrly Live Assistant loading speed when the network is slow
1260
-
1261
- = 8.2.29 - 12/06/2017 =
1262
- * SEO Fix - JSON-LD clean text function
1263
- * SEO Fix - Fixed the Support Page
1264
-
1265
- = 8.2.28 - 11/28/2017 =
1266
- * SEO Update - Added Pinterest Social Shares in Analytics
1267
- * SEO Fix - Fixed JSON-LD for Woocommerce to remove duplicate declarations
1268
- * Squirrly SEO is now compatible with Woocommerce 3.2
1269
- * Squirrly SEO is now compatible with WP 4.9
1270
-
1271
- = 8.2.27 - 11/27/2017 =
1272
- * SEO Fix - Fixed Sitemap for WP Multiste with subdirectories
1273
- * SEO Fix - Fixed Backup & Restore for Squirrly SEO
1274
- * SEO Fix - Fixed broken URL to Performance Analytics if the user doesn't have enough rights to view it
1275
- * SEO Fix - Fixed Save Post Keywords while in cron mode
1276
- * SEO Fix - Fixed small bugs
1277
-
1278
- = 8.2.26 - 11/17/2017 =
1279
- * SEO Update - Update the Sitemap XML Custom post types in Admin Settings
1280
- * SEO Update - Added image Object in JSON-LD if the post has featured image
1281
- * SEO Fix - Prevent Crons from loading if not necessary
1282
- * SEO Fix - Fixed Facebook Admin ID duplicates
1283
- * SEO Fix - Prevent 404 page in BudyPress user activity page
1284
-
1285
-
1286
- = 8.2.24 - 11/10/2017 =
1287
- * SEO Update - Update SLA to work whn other plugins have javascript errors in Edit Post
1288
- * SEO Update - Increased the connection wait time to prevent the error message from showing on low connectivity
1289
- * SEO Update - Update Frontend to work with WP-Rocket plugin
1290
- * SEO Fix - Fixed Typos and Broken links
1291
-
1292
- = 8.2.23 - 11/07/2017 =
1293
- * SEO Update - Update Squirrly SEO Snippet Frontend is optional in Squirrly > SEO Settings Advanced
1294
- * SEO Fix - Fixed the SEO METAs in frontend for some theme
1295
- * SEO Fix - Fixed the SEO METAs for Wp Super cache and other cache plugins
1296
- * SEO Fix - Fixed the Sitemap to load for all subdirectories
1297
- * SEO Fix - Fixed compatibility issues with other plugins
1298
-
1299
-
1300
- = 8.2.21 - 11/04/2017 =
1301
- * SEO Update - Update Frontend to load with the known cache plugins
1302
- * SEO Update - Updated the SLA to recognize more languages and keywords with special chars
1303
- * SEO Update - Remove the Mark tag on save in case it passes javascript
1304
- * SEO Fix - Fixed the SLA mark option to remain active on click
1305
- * SEO Fix - Fixed the SLA to recognize the Squirrly Snippet when loaded
1306
- * SEO Fix - Fixed the Doublin Core name error on line 29
1307
- * Squirrly SEO is now compatible with WP 4.8.3
1308
-
1309
- = 8.2.20 - 11/02/2017 =
1310
- * SEO Fix - Fixed the Excerpt Only patterh
1311
- * SEO Fix - Fixed Squirrly Snippet in case is empty or has special chars
1312
-
1313
- = 8.2.19 - 10/30/2017 =
1314
- * SEO Update - Update Squirrly Live Assistant to use less resources and work faster
1315
- * SEO Update - Added the Post Publish option in Squirrly Split Window
1316
- * SEO Fix - Fixed Greeck keywords optimization fixed
1317
- * SEO Fix - Fixed the Keyword Research not to display the error message and to be able to redo the search
1318
- * SEO Fix - Fixed the Squirrly Snippet's Title snd Description when using special chars
1319
-
1320
- = 8.2.18 - 10/27/2017 =
1321
- * SEO Update - Update compatibility with Polylang plugin
1322
- * SEO Fix - Increased connection time with out API in case of slow internet access
1323
- * SEO Fix - Fixed the yellow highlight in frontend
1324
- * SEO Fix - Fixed Squirrly SLA loading in post edit
1325
- * SEO Fix - Fixed small bugs with article optimization in my.squirrly.co
1326
-
1327
- = 8.2.17 - 10/24/2017 =
1328
- * SEO Fix - Fixed the SLA loading issue for older WP versions
1329
- * SEO Fix - Fixed the Keyword one letter when loading a new post/page
1330
- * SEO Fix - Corrected the Facebook App ID
1331
-
1332
- = 8.2.15 - 10/18/2017 =
1333
- * SEO Update - Increased the loading speed for favicon.icon and robots.txt
1334
- * SEO Update - Update the SEO Audit with the latest METAs
1335
- * SEO Update - Register the Subservers for WP Multisite
1336
- * SEO Fix - Fixed the import process when the tables have different encoding
1337
- * SEO Fix - Fixed the Squirrly Snippet in frontend in case the js and css are not loading
1338
- * SEO Fix - Show error message in case SLA is not loading
1339
-
1340
- = 8.2.14 - 10/12/2017 =
1341
- * SEO Fix - Fixed compatibility with Beaver Builder
1342
- * SEO Fix - Increased security on SEO restore in Import SEO section
1343
-
1344
- = 8.2.13 - 10/11/2017 =
1345
- * SEO Fix - Fixed the snippet preview in case some features are disabled
1346
- * SEO Fix - Fixed the Title and Description Lenght in Frontend
1347
- * SEO Fix - Added the option to import the old SEO settings from Squirrly SEO
1348
-
1349
- = 8.2.11 - 10/10/2017 =
1350
- * SEO Fix - Fixed remove meta from Elementor
1351
- * SEO Fix - Fixed small bugs for Squirrly Split Window
1352
-
1353
- = 8.2.10 - 10/10/2017 =
1354
- * SEO Update - Launching Squirrly 2018 Steve
1355
- * See all the new features here: https://howto.squirrly.co/kb/slides/
1356
-
1357
- = 8.0.5 - 08/14/2017 =
1358
- * SEO Fix - Fixed HTTPS jquery load in sitemap.xml
1359
- * SEO Squirrly is compatible with WP 4.8.1
1360
-
1361
- = 8.0.4 - 07/24/2017 =
1362
- * SEO Fix - Fixed minor bugs
1363
- * SEO Fix - Fixed loading https classes in SSL backend
1364
-
1365
- = 8.0.2 - 05/20/2017 =
1366
- * SEO Update - Update the JSON-LD with the last update from google
1367
- * Squirrly SEO is compatible with WP 4.8
1368
-
1369
- = 8.0.1 - 05/08/2017 =
1370
- * SEO Update - Made the XML Sitemap for Google Compatible with more Wordpress Themes
1371
- * SEO Update - Update the validation link for Twitter
1372
-
1373
- = 8.0.0 - 05/01/2017 =
1374
- * SEO Update - Squirrly SEO 2018 version
1375
-
1376
- = 7.0.6 - 04/15/2017 =
1377
- * SEO Update - Add Facebook Publisher in Meta
1378
- * SEO Fix - Fixed Duplicate Head tag
1379
- * SEO Fix - Fixed Facebook Admin ID
1380
-
1381
- = 7.0.5 - 04/04/2017 =
1382
- * SEO Update - Squirrly removes Title Tag Duplicates with the meta duplicate removal tool
1383
- * SEO Update - Increase loading speed
1384
- * SEO Fix - Don't Load Squirrly for 404 pages
1385
- * Squirrly SEO is Compatible with WP 4.7.4
1386
-
1387
- = 7.0.4 - 03/20/2017 =
1388
- * SEO Update - Removed the filter with private IP check in Squirrly SEO Performance Analytics
1389
- * SEO Update - Updated the Squirrly SEO Live Assistant for Media Library
1390
- * SEO Update - Added Site SEO Audit Tool Progress in https://my.squirrly.co for each blog
1391
- * SEO Fix - Fixed small bugs
1392
-
1393
- = 7.0.3 - 03/19/2017 =
1394
- * SEO Update - Updated the Json LD for Woocommerce 3.0
1395
- * SEO Fix - Fixed bugs from the New SEO Keyword Research tool
1396
- * SEO Fix - Fixed Headline for Google Structured Tool
1397
- * SEO Fix - Fixed creating the new blogs on our server
1398
- * SEO Fix - Fixed the sitemap with the same image in case you set a front-end image
1399
-
1400
- = 7.0.1 - 03/01/2017 =
1401
- * SEO Fix - Fixed the localhost verification for Performance Analytics
1402
- * SEO Fix - Remove sitemap comments and white spaces from cache plugins
1403
-
1404
- = 7.0.0 - 02/10/2017 =
1405
- * SEO Update - Includes the Squirrly 2017 features and updates
1406
- * SEO Update - Updates in Keyword Research algorithm for marketing research tools
1407
- * SEO Update - Updates in Squirrly Live Assistant
1408
- * SEO Update - Updates in search engine optimization for 2017
1409
- * SEO Update - Updates for Copyright Free Images in the Inspiration box feature
1410
- * SEO Update - Updates in Squirrly SEO Advanced Settings
1411
- * SEO Update - Updates in the Squirrly Admin Menu
1412
- * SEO Update - Updates in https://my.squirrly.co panel
1413
- * SEO Update - Made all the Changes to G17 features. We announced them last week
1414
-
1415
- = 6.3.1 =
1416
- * SEO Update - Inform users with multiple active subscriptions
1417
- * SEO Update - Updated terms and conditions
1418
- * SEO Update - Added more channels for support in the Feedback and Support sections
1419
- * SEO Update - Fixed Facebook Admin ID for Profile and Pages
1420
- * SEO Update - Changed the Theme for Squirrly SEO Settings and Advanced sections
1421
- * SEO Update - Fixed Typos and Broken Links
1422
- * SEO Update - Updated the SEO Keyword Research tool for Long Tail Keyword
1423
- * SEO Update - Optimized the loading speed in case of poor connection with the API
1424
- * SEO Update - Pass the SSL issue for API calls
1425
- * SEO Update - Fixed the Squirrly SEO audit tool for free users
1426
- * SEO Update - Fixed Pay With a Tweet button
1427
- * SEO Update - Added google.us in Ranking Options
1428
- * SEO Update - Updated settings for ecommerce seo strategy for product category pages
1429
-
1430
- = 6.3.0 =
1431
- * SEO Update - Updated the Facebook and google tracking code
1432
- * SEO Update - Improved the Facebook Pixel Feature to work with Woocommerce
1433
- * SEO Update - Corrected the google tracking code
1434
- * SEO Update - Improved the communication with the API server
1435
-
1436
- = 6.2.8 =
1437
- * SEO Update - Added forced keyword update in Squirrly SEO Settings
1438
- * SEO Update - Added a new Country in the Rank Options section
1439
- * SEO Fix - Fixed the Canonical link for some WP Themes
1440
-
1441
- = 6.2.6 =
1442
- * SEO Fix - Fixed Canonical link for Facebook Open Graph Wordpress
1443
- * SEO Fix - Don't show the Canonical Link if Squirrly SEO is off
1444
- * SEO Fix - Fixed keyword saving on post update
1445
- * Happy New Year!
1446
-
1447
- = 6.2.5 =
1448
- * SEO Update - Added Instagram and Pinterest in Social JSON-LD
1449
- * SEO Fix - Fixed the connection issue in some cases when a keyword is modified
1450
- * SEO Fix - Fixed memory load when not using Squirrly SEO
1451
-
1452
- = 6.2.4 =
1453
- * SEO Fix - Fixed bug for Google Analytics AMP version
1454
- * SEO Fix - Fixed both title and description when including price value
1455
- * Squirrly SEO is Compatible with WP 4.7
1456
-
1457
- = 6.2.3 =
1458
- * SEO Update - Added Facebook Open Graph Wordpress Image for First Page when the first page is a blog feed
1459
- * SEO Update - Added AMP Analytics from Google
1460
- * SEO Fix - Fixed small CSS issues in post editor
1461
- * SEO Fix - Fixed duplicate title removal in the meta duplicate removal tool
1462
-
1463
- = 6.2.2 =
1464
- * SEO Update - Update SEO features
1465
- * SEO Fix - Fixed SEO Page Optimization for Post Feed Page and Home Page
1466
- * Squirrly SEO is Compatible with WP 4.6.1
1467
-
1468
- = 6.2.0 =
1469
- * SEO Update - Added Facebook Pixel Tracking Code in Squirrly &gt; SEO &gt; Tracking Tools
1470
- * SEO Update - Added more Copyright Free images in Squirrly SEO Live Assistant.
1471
- * SEO Update - Added the Pixabay.com library to the Inspiration Box
1472
- * SEO Update - Added the Unsplash.com library to the Copyright free image resource
1473
- * SEO Update - Added the Pexels.com library so you can have more Copyright free images
1474
- * SEO Fix - Fixed loading the Seo Live Assistant when a page is not optimized for a keyword
1475
- * SEO Fix - Fixed the connection issues between the plugin and API when a post is saved
1476
- * SEO Fix - Fixed the Squirrly Snippet when connected as Editor or Author
1477
-
1478
- = 6.1.6 =
1479
- * SEO Update - Added custom title and description for the Posts Page in Settings &gt; Reading &gt; Posts page
1480
- * SEO Fix - Fixed the JSONLD phone and prefix information
1481
- * SEO Fix - Fixed typos
1482
-
1483
- = 6.1.5 =
1484
- * SEO Update - July 2016 Security updates.
1485
- * SEO Update - Added google.co.id in Google Ranking Options
1486
- * SEO Fix - Fixed vulnerabilities between users who have rights in your site
1487
- * SEO Fix - Fixed some Squirrly SEO Snippet issues on first save
1488
-
1489
- = 6.1.3 =
1490
- * SEO Update - Added Pinterest Rich Pin Validator for Woocommerce Products
1491
- * SEO Fix - Pinterest Rich Pin Validator Option
1492
-
1493
- = 6.1.2 =
1494
- * SEO Update - We moved js files on cloud for faster loading
1495
- * SEO Fix - Update - Update Rank Check to the latest Google Requirements
1496
- * SEO Fix - Fixed the google profile link
1497
- * SEO Fix - Corrected some old related links
1498
- * Squirrly SEO is Compatible with WP 4.5.3
1499
-
1500
- = 6.1.0 =
1501
- * SEO Fix - Fixed the Front Page SEO to work with more WP themes
1502
- * SEO Fix - Fixed compatibility with PolyLang plugin
1503
- * SEO Fix - Fixed compatibility with Customizr theme
1504
- * SEO Fix - Fixed Squirrly SEO Snippet for Arabic language
1505
- * Squirrly SEO is Compatible with WP 4.5.2
1506
-
1507
- = 6.0.9 =
1508
- * SEO Fix - Fixed Squirrly Analytics in Performance Analytics
1509
- * Squirrly SEO is Compatible with WP 4.5
1510
-
1511
- = 6.0.6 =
1512
- * SEO Update - Added dateModified, ImageObject, mainEntityOfPage, publisher
1513
- * SEO Update - Update the Squirrly SEO Snippet
1514
- * SEO Fix - Fixed the JSON AMP for articles
1515
-
1516
- = 6.0.4 =
1517
- * SEO Fix - Fixed the snippet to save long text
1518
- * SEO Fix - Fixed the woocommerce title and description for a category
1519
- * SEO Fix - Fix the SEO for more themes
1520
-
1521
- = 6.0.3 =
1522
- * SEO Fix - Fixed compatibility with NextGen Gallery plugin
1523
- * Squirrly SEO is Compatible with Wordpress 4.4.3
1524
-
1525
- = 6.0.2 =
1526
- * SEO Update - Added style for the site feed in Squirrly &gt; SEO
1527
- * SEO Fix - Fixed the hook for feed when Squirrly SEO sitemap is active
1528
- * SEO Fix - Fixed the SEO for more WP themes
1529
-
1530
- = 6.0.0 =
1531
- * SEO Update - The last stable version of Squirrly with all the features included:
1532
- * SEO Update - Squirrly SEO is compatible with more WP themes
1533
- * SEO Update - Twitter Card latest updates (summary and summary_large_image)
1534
- * SEO Update - Facebook Open Graph Wordpress updates (multiple images, videos)
1535
- * SEO Update - Sitemap with more videos like Wistia.com, FLV
1536
- * SEO Update - External Canonical Link
1537
- * SEO Update - Woocommerce &amp; Instapage compatibility
1538
- * Squirrly SEO is Compatible with WP 4.4.1
1539
-
1540
- = 5.3.1 =
1541
- * SEO Update - Added the Twitter Summary Type option in Squirrly &gt; SEO &gt; Twitter Card
1542
- * SEO Fix - Fixed the same Title SEO issues for some WP themes
1543
- * SEO Fix - Fixed small bugs
1544
- * SEO Fix - Changed broken link in Content Audit tool
1545
-
1546
- = 5.2.9 =
1547
- * SEO Update - Optimized the way SEO is loading in every page
1548
- * SEO Update - Optimized SEO for Instapage Plugin
1549
- * SEO Update - Updated the Google Analytics Tracking code
1550
- * SEO Fix - Fixed the compatibility issue in Performance Analytics
1551
- * SEO Fix - Added twitter summary for large images
1552
-
1553
- = 5.2.7 =
1554
- * SEO Update - Added Squirrly SEO Canonical Link in Post Edit page
1555
- * SEO Update - Added Norway in Google Rank Option
1556
- * SEO Update - Set the Squirrly SEO Snippet OG image as shared image
1557
- * SEO Update - Set Squirrly SEO Live Assistant to work with more multilanguage plugins
1558
- * SEO Fix - Fixed the image section in Squirrly Inspiration Box to improve the research tools for writers
1559
-
1560
- = 5.2.6 =
1561
- * SEO Update - Compatible with Smart Security Tools plugin
1562
- * SEO Update - Added the google.ee in Squirrly Rank Option
1563
- * SEO Fix - Fixed the Squirrly SEO Keyword not to be added in Tags if is switched off in Squirrly &gt; Settings
1564
-
1565
- = 5.2.5 =
1566
- * SEO Update - Improved the Squirrly SEO Keyword Research from the marketing research tools
1567
- * SEO Fix - Fixed the sitemap.xml with videos included
1568
- * SEO Fix - Changed to relative URL in sitemap.xml for multisites
1569
-
1570
- = 5.2.3 =
1571
- * SEO Update - Updated to the last on-page SEO requirements
1572
- * SEO Update - Increased the Squirrly speed in post editor
1573
- * SEO Fix - Fixed the Seo Live Assistant to verify keywords with commas
1574
- * SEO Fix - Fixed the Seo Live Assistant to work with HTTPS dashboard for Wikis and Keyword suggestion
1575
- * SEO Fix - Fixed the OG:image:width issue when the width is null
1576
- * SEO Fix - Fixed the HTTPS connection when the general settings are not set correctly
1577
- * SEO Fix - Fixed minor bugs
1578
- * Squirrly SEO is Compatible with WordPress 4.3.1
1579
-
1580
- = 5.2.2 =
1581
- * SEO Update - Add the last google updates for JSON-LD Structured Data
1582
- * SEO Update - Make XML Sitemap for Google work for a large number of articles
1583
-
1584
- = 5.2.1 =
1585
- * SEO Fix - Fixed the Head Buffer for some themes
1586
- * Squirrly SEO is Compatible with WordPress 4.3
1587
-
1588
- = 5.2.0 =
1589
- * SEO Update - Added 17 more languages in Squirrly SEO Keyword Research Tool to improve the research tools for writers
1590
- * SEO Update - Added the focused language for Social Media in Squirrly &gt; SEO
1591
- * SEO Update - Added Squirrly SEO Performance Analytics in custom post types selected from Squirrly SEO &gt; Settings
1592
- * SEO Update - Add top menu link for Rank check
1593
- * Squirrly SEO is Compatible with WordPress 4.2.4
1594
-
1595
- = 5.1.6 =
1596
- * SEO Update - Improved the rank check to prevent Google temporary IP block
1597
- * SEO Update - Improved the plugin speed in backend
1598
- * SEO Update - Add the optimization progress bar in the post/page list
1599
- * SEO Fix - Fixed the Incorrect Hreflang META implementation
1600
- * SEO Fix - Fixed the restore the settings from backup validator
1601
- * Squirrly SEO is Compatible with WP 4.2.3
1602
-
1603
- = 5.1.2 =
1604
- * SEO Update - Added new features in Open Graph Generator for the Posts/Pages
1605
- * SEO Update - Added the SEO Settings Backup and Restore
1606
- * SEO Update - Improved the SEO Live Assistant to recognize more languages and characters
1607
- * SEO Update - Improved the communication with the API Server
1608
- * SEO Update - Added the custom size image for Open Graph Generator in Squirrly SEO Snippet
1609
- * SEO Fix - Fixed the Analytics notification bar
1610
- * SEO Fix - Fixed the wp_is_writable for older wp versions
1611
- * SEO Fix - Fixed the Open Graph Generator not to include non-embed videos in meta
1612
- * SEO Fix - Fixed the Sitemap Ping option to remain switched on when is selected
1613
-
1614
- = 5.0.3 =
1615
- * SEO Update - Prevent canonical, prev, next meta duplicate inserted by other SEO plugins with the meta duplicate removal tool
1616
- * SEO Fix - Fixed snippet custom title and description to change when other SEO plugins are installed
1617
- * SEO Fix - Fixed javascript issue in login page
1618
-
1619
- = 5.0.0 =
1620
- * SEO Update - Changed Squirrly SEO look
1621
- * SEO Update - Compatible with WP eCommerce plugin
1622
- * SEO Update - Made SEO improvements for Woocommerce plugin
1623
- * SEO Update - Interactive learning for the entire Squirrly SEO plugin
1624
- * SEO Update - Faster post save for long text and remote images
1625
- * SEO Update - Settings and SEO check improved
1626
- * SEO Update - Added robots.txt for multisites with security
1627
- * SEO Update - Added sitemap for multisite SEO
1628
- * SEO Update - Added sitemap for images and videos for each article
1629
- * SEO Update - Added the Json LD in Structured Data META
1630
- * SEO Update - Added the social linked Data for JSON-LD and publisher
1631
- * SEO Update - Added the favicon.ico for multisites SEO
1632
- * SEO Update - Added the icons for apple devices
1633
- * SEO Update - Added the SEO progress in post editor
1634
- * SEO Update - Added the SEO Star option in Dashboard
1635
- * SEO Fix - Fixed bugs for multisites and made it compatible with WP 4.2
1636
- * SEO Fix - Fixed the snippet title and description special chars
1637
- * SEO Fix - Fixed the custom fields variable in post editor
1638
- * SEO Fix - Fixed the site icon and added the site icon for multisites SEO
1639
- * SEO Fix - Fixed Sitemap for default permalink option
1640
- * SEO Fix - Fixed the SEO Analytics and the Rank updates
1641
- * SEO Fix - Fixed the SEO for First Page if the Home Page is not a static page
1642
- * SEO Fix - Fixed the SEO for the First Page when it starts with woocommerce shop
1643
 
1644
  yoast alternative
1645
  yoast seo alternative
400
  9. Squirrly SEO - Progress & Achievements
401
 
402
  == Changelog ==
403
+ = 11.1.04- 05/27/2021 =
404
+ Update - Add the Multilingual Support option for non UTF8 encodings
405
+ Update - Compatibility with Weglot plugin
406
+ Update - Archive patterns and Custom Post Types Archive in SEO Automation
407
+ Fix - Canonical Link for the blog page when pagination is on
408
+ Fix - SEO Snippet PHP warning when JSON-LD is not loaded for the post type
409
+ Fix - SEO Snippet data update when LIVE Assistant is not loaded on a post type
410
+ Fix - Product Custom Fields update when LIVE Assistant is not loaded on a post type
411
+ Fix - Remove the auto setup for SEO Links on onboarding
412
+ Fix - Set the Article and NewArticle Schema Headline correctly
413
+
414
  = 11.1.03- 05/06/2021 =
415
  Update - Do not track the traffic for Squirrly crawlers
416
  Update - Add in Dev Kit the options to hide the Research, All Snippets, Live Assistant menu items
723
  * Introducing Squirrly Private SEO Consultant and Squirrly Machine Learning system
724
  * and more ...
725
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
726
 
727
  yoast alternative
728
  yoast seo alternative
squirrly.php CHANGED
@@ -8,7 +8,7 @@
8
  * Description: A.I.-based Private SEO Consultant. In a Plugin. Powered by Machine Learning and Cloud Services. Over 300 functionalities for SEO available when you need them.
9
  * Author: Squirrly SEO
10
  * Author URI: https://plugin.squirrly.co
11
- * Version: 11.1.03
12
  * License: GPLv2 or later
13
  * License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
14
  * Text Domain: squirrly-seo
@@ -17,9 +17,9 @@
17
 
18
  if (!defined('SQ_VERSION')) {
19
  /* SET THE CURRENT VERSION ABOVE AND BELOW */
20
- define('SQ_VERSION', '11.1.03');
21
  //The last stable version
22
- define('SQ_STABLE_VERSION', '11.1.00');
23
  // Call config files
24
  try {
25
  require_once(dirname(__FILE__) . '/config/config.php');
@@ -51,3 +51,4 @@ if (!defined('SQ_VERSION')) {
51
  } catch (Exception $e) {
52
  }
53
  }
 
8
  * Description: A.I.-based Private SEO Consultant. In a Plugin. Powered by Machine Learning and Cloud Services. Over 300 functionalities for SEO available when you need them.
9
  * Author: Squirrly SEO
10
  * Author URI: https://plugin.squirrly.co
11
+ * Version: 11.1.04
12
  * License: GPLv2 or later
13
  * License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
14
  * Text Domain: squirrly-seo
17
 
18
  if (!defined('SQ_VERSION')) {
19
  /* SET THE CURRENT VERSION ABOVE AND BELOW */
20
+ define('SQ_VERSION', '11.1.04');
21
  //The last stable version
22
+ define('SQ_STABLE_VERSION', '11.1.03');
23
  // Call config files
24
  try {
25
  require_once(dirname(__FILE__) . '/config/config.php');
51
  } catch (Exception $e) {
52
  }
53
  }
54
+
view/Blocks/Features.php CHANGED
@@ -102,6 +102,10 @@
102
  }
103
  }
104
 
 
 
 
 
105
  $class = 'auto';
106
  if (SQ_Classes_Helpers_Tools::getOption('sq_seoexpert')) {
107
  if ($feature['active']) {
102
  }
103
  }
104
 
105
+ if(isset($feature['show']) && !$feature['show']){
106
+ continue;
107
+ }
108
+
109
  $class = 'auto';
110
  if (SQ_Classes_Helpers_Tools::getOption('sq_seoexpert')) {
111
  if ($feature['active']) {
view/Blocks/Snippet.php CHANGED
@@ -438,6 +438,8 @@ if (SQ_Classes_Helpers_Tools::getOption('sq_use')) {
438
  foreach ($sq_jsonld_types as &$jsonld_type) {
439
  $jsonld_type = ucwords($jsonld_type);
440
  }
 
 
441
  }
442
 
443
  $view->post->sq_adm->jsonld_types = array_filter((array)$view->post->sq_adm->jsonld_types);
@@ -1117,11 +1119,11 @@ if (SQ_Classes_Helpers_Tools::getOption('sq_use')) {
1117
  <div class="sq-card sq-border-0">
1118
  <?php if (get_option('blog_public') == 0) { ?>
1119
  <div class="sq-row">
1120
- <div class="sq-text-center sq-col-sm-12 sq-my-5 sq-mx-0 sq-px-0 sq-text-danger">
1121
- <?php echo sprintf(esc_html__("You selected '%s' in %sSettings > Reading%s. It's important to uncheck that option.", _SQ_PLUGIN_NAME_), esc_html__("Discourage search engines from indexing this site"), '<a href="' . admin_url('options-reading.php') . '" target="_blank"><strong>', '</strong></a>') ?>
1122
  </div>
1123
  </div>
1124
- <?php } else { ?>
1125
  <div class="sq-card-body sq_tab_visibility sq_tabcontent <?php echo ($view->post->sq_adm->doseo == 0) ? 'sq-d-none' : ''; ?>">
1126
 
1127
  <div class="sq-row">
@@ -1217,6 +1219,7 @@ if (SQ_Classes_Helpers_Tools::getOption('sq_use')) {
1217
  <div class="sq-col-sm-12 sq-p-0 sq-switch redgreen sq-switch-sm">
1218
  <input type="checkbox" id="sq_nositemap_<?php echo esc_attr($view->post->hash) ?>" name="sq_nositemap" class="sq-switch" <?php echo ($view->post->sq_adm->nositemap == 0) ? 'checked="checked"' : ''; ?> value="0"/>
1219
  <label for="sq_nositemap_<?php echo esc_attr($view->post->hash) ?>" class="sq-ml-2"><?php echo esc_html__("Show it in Sitemap.xml", _SQ_PLUGIN_NAME_); ?></label>
 
1220
  </div>
1221
  </div>
1222
 
@@ -1256,7 +1259,6 @@ if (SQ_Classes_Helpers_Tools::getOption('sq_use')) {
1256
  </div>
1257
 
1258
  </div>
1259
- <?php } ?>
1260
  </div>
1261
  </div>
1262
  <!-- ================ End Tabs ================= -->
438
  foreach ($sq_jsonld_types as &$jsonld_type) {
439
  $jsonld_type = ucwords($jsonld_type);
440
  }
441
+ }else{
442
+ $patterns[$view->post->post_type] = $patterns['custom'];
443
  }
444
 
445
  $view->post->sq_adm->jsonld_types = array_filter((array)$view->post->sq_adm->jsonld_types);
1119
  <div class="sq-card sq-border-0">
1120
  <?php if (get_option('blog_public') == 0) { ?>
1121
  <div class="sq-row">
1122
+ <div class="sq-text-center sq-col-sm-12 sq-mt-5 sq-mx-0 sq-px-0 sq-text-danger">
1123
+ <?php echo sprintf(esc_html__("You selected '%s' in %sSettings > Reading%s. %s It's important to uncheck that option.", _SQ_PLUGIN_NAME_), esc_html__("Discourage search engines from indexing this site"), '<a href="' . admin_url('options-reading.php') . '" target="_blank"><strong>', '</strong></a>', '<br />') ?>
1124
  </div>
1125
  </div>
1126
+ <?php }?>
1127
  <div class="sq-card-body sq_tab_visibility sq_tabcontent <?php echo ($view->post->sq_adm->doseo == 0) ? 'sq-d-none' : ''; ?>">
1128
 
1129
  <div class="sq-row">
1219
  <div class="sq-col-sm-12 sq-p-0 sq-switch redgreen sq-switch-sm">
1220
  <input type="checkbox" id="sq_nositemap_<?php echo esc_attr($view->post->hash) ?>" name="sq_nositemap" class="sq-switch" <?php echo ($view->post->sq_adm->nositemap == 0) ? 'checked="checked"' : ''; ?> value="0"/>
1221
  <label for="sq_nositemap_<?php echo esc_attr($view->post->hash) ?>" class="sq-ml-2"><?php echo esc_html__("Show it in Sitemap.xml", _SQ_PLUGIN_NAME_); ?></label>
1222
+ <div class="sq-small sq-text-warning sq-offset-sm-1"><?php echo esc_html__("Don't show in Sitemap XML a page set as Noindex.", _SQ_PLUGIN_NAME_); ?></div>
1223
  </div>
1224
  </div>
1225
 
1259
  </div>
1260
 
1261
  </div>
 
1262
  </div>
1263
  </div>
1264
  <!-- ================ End Tabs ================= -->
view/Overview.php CHANGED
@@ -10,7 +10,9 @@
10
  <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_seogoals')) { ?>
11
  <?php SQ_Classes_ObjController::getClass('SQ_Controllers_CheckSeo')->init(); ?>
12
  <?php } ?>
13
- <?php SQ_Classes_ObjController::getClass('SQ_Core_BlockJorney')->init(); ?>
 
 
14
  <?php } else {
15
  echo '<div class="col-12 alert alert-success text-center mx-0 my-3 p-3">' . esc_html__("You do not have permission to access Daily Goals. You need Squirrly SEO Editor role.", _SQ_PLUGIN_NAME_) . '</div>';
16
  } ?>
@@ -40,12 +42,12 @@
40
  </div>
41
 
42
  <div class="sq_col_side sticky">
43
- <div class="card col-12 p-0 my-2">
44
- <?php echo SQ_Classes_ObjController::getClass('SQ_Core_BlockSupport')->init(); ?>
45
- <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_panel') && SQ_Classes_Helpers_Tools::userCan('manage_options')) { ?>
46
  <div class="sq_account_info" style="min-height: 20px;"></div>
47
- <?php } ?>
48
- </div>
49
 
50
  <div class="card col-12 p-0 my-2">
51
  <?php echo SQ_Classes_ObjController::getClass('SQ_Core_BlockConnect')->init(); ?>
10
  <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_seogoals')) { ?>
11
  <?php SQ_Classes_ObjController::getClass('SQ_Controllers_CheckSeo')->init(); ?>
12
  <?php } ?>
13
+ <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_journey')) { ?>
14
+ <?php SQ_Classes_ObjController::getClass('SQ_Core_BlockJorney')->init(); ?>
15
+ <?php } ?>
16
  <?php } else {
17
  echo '<div class="col-12 alert alert-success text-center mx-0 my-3 p-3">' . esc_html__("You do not have permission to access Daily Goals. You need Squirrly SEO Editor role.", _SQ_PLUGIN_NAME_) . '</div>';
18
  } ?>
42
  </div>
43
 
44
  <div class="sq_col_side sticky">
45
+ <?php if (SQ_Classes_Helpers_Tools::getMenuVisible('show_panel') && SQ_Classes_Helpers_Tools::userCan('manage_options')) { ?>
46
+ <div class="card col-12 p-0 my-2">
47
+ <?php echo SQ_Classes_ObjController::getClass('SQ_Core_BlockSupport')->init(); ?>
48
  <div class="sq_account_info" style="min-height: 20px;"></div>
49
+ </div>
50
+ <?php } ?>
51
 
52
  <div class="card col-12 p-0 my-2">
53
  <?php echo SQ_Classes_ObjController::getClass('SQ_Core_BlockConnect')->init(); ?>
view/SeoSettings/Metas.php CHANGED
@@ -199,7 +199,7 @@
199
  <div class="col-12 row py-2 mx-0 my-3">
200
  <div class="col-4 p-1 pr-3 font-weight-bold">
201
  <?php echo esc_html__("Title Length", _SQ_PLUGIN_NAME_); ?>:
202
- <a href="https://howto.squirrly.co/kb/seo-metas/#title_description_length" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a></label>
203
  </div>
204
  <div class="col-1 p-0 input-group input-group-sm">
205
  <input type="text" class="form-control bg-input" name="sq_metas[title_maxlength]" value="<?php echo (int)$metas->title_maxlength ?>"/>
@@ -208,7 +208,7 @@
208
  <div class="col-12 row py-2 mx-0 my-3">
209
  <div class="col-4 p-1 pr-3 font-weight-bold">
210
  <?php echo esc_html__("Description Length", _SQ_PLUGIN_NAME_); ?>:
211
- <a href="https://howto.squirrly.co/kb/seo-metas/#title_description_length" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a></label>
212
  </div>
213
  <div class="col-1 p-0 input-group input-group-sm">
214
  <input type="text" class="form-control bg-input" name="sq_metas[description_maxlength]" value="<?php echo (int)$metas->description_maxlength ?>"/>
199
  <div class="col-12 row py-2 mx-0 my-3">
200
  <div class="col-4 p-1 pr-3 font-weight-bold">
201
  <?php echo esc_html__("Title Length", _SQ_PLUGIN_NAME_); ?>:
202
+ <a href="https://howto.squirrly.co/kb/seo-metas/#lengths" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a></label>
203
  </div>
204
  <div class="col-1 p-0 input-group input-group-sm">
205
  <input type="text" class="form-control bg-input" name="sq_metas[title_maxlength]" value="<?php echo (int)$metas->title_maxlength ?>"/>
208
  <div class="col-12 row py-2 mx-0 my-3">
209
  <div class="col-4 p-1 pr-3 font-weight-bold">
210
  <?php echo esc_html__("Description Length", _SQ_PLUGIN_NAME_); ?>:
211
+ <a href="https://howto.squirrly.co/kb/seo-metas/#lengths" target="_blank"><i class="fa fa-question-circle m-0 px-2" style="display: inline;"></i></a></label>
212
  </div>
213
  <div class="col-1 p-0 input-group input-group-sm">
214
  <input type="text" class="form-control bg-input" name="sq_metas[description_maxlength]" value="<?php echo (int)$metas->description_maxlength ?>"/>
view/SeoSettings/Sitemap.php CHANGED
@@ -362,6 +362,15 @@
362
  </div>
363
  </div>
364
 
 
 
 
 
 
 
 
 
 
365
  </div>
366
 
367
  <div class="col-12 py-4 border-bottom tab-panel">
362
  </div>
363
  </div>
364
 
365
+ <div class="col-12 row mb-1 ml-1 sq_advanced">
366
+ <div class="checker col-12 row my-2 py-1">
367
+ <div class="col-12 p-0 sq-switch sq-switch-sm">
368
+ <input type="hidden" name="sq_sitemap_exclude_noindex" value="0"/>
369
+ <input type="checkbox" id="sq_sitemap_exclude_noindex" name="sq_sitemap_exclude_noindex" class="sq-switch" <?php echo((SQ_Classes_Helpers_Tools::getOption('sq_sitemap_exclude_noindex')) ? 'checked="checked"' : ''); ?> value="1"/>
370
+ <label for="sq_sitemap_exclude_noindex" class="ml-2"><?php echo esc_html__("Automatically exclude from sitemap the URLs with 'Noindex'", _SQ_PLUGIN_NAME_); ?></label>
371
+ </div>
372
+ </div>
373
+ </div>
374
  </div>
375
 
376
  <div class="col-12 py-4 border-bottom tab-panel">