Version Description
- 06/25/2020 =
- Update - Focus Page Words Length check based on Readability algorithm
- Update - Request a new SEO Check on settings changed to make sure the goals are updated every time
- Fixed - Small SEO Check warnings when the communication with Squirrlu Cloud is not working
- Fixed - SEO Image task in Focus Pages for RTL languages
- Fixed - JSON-LD identifier in SEO Audit
- Fixed - Corrected the UI in SEO Audit regarding Open Graph and Twitter Card
- Fixed - Corrected the Page Loading Speed in SEO Audit to not include JS files
Download this release
Release Info
Developer | cifi |
Plugin | SEO SQUIRRLY™ |
Version | 10.0.11 |
Comparing to | |
See all releases |
Code changes from version 10.0.10 to 10.0.11
- controllers/SeoSettings.php +39 -21
- models/Audits.php +2 -2
- models/CheckSeo.php +20 -10
- models/focuspages/Image.php +2 -2
- models/focuspages/Length.php +1 -0
- readme.txt +10 -0
- squirrly.php +3 -3
- view/Blocks/Snippet.php +1 -0
- view/Goals/CheckSeo.php +2 -2
controllers/SeoSettings.php
CHANGED
@@ -12,11 +12,11 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
12 |
$tab = SQ_Classes_Helpers_Tools::getValue('tab', 'automation');
|
13 |
|
14 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
|
15 |
-
if(is_rtl()){
|
16 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('popper');
|
17 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap.rtl');
|
18 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('rtl');
|
19 |
-
}else{
|
20 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
|
21 |
}
|
22 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
|
@@ -48,45 +48,45 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
48 |
}
|
49 |
|
50 |
public function automation() {
|
51 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
52 |
|
53 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight');
|
54 |
SQ_Classes_ObjController::getClass('SQ_Controllers_Patterns')->init();
|
55 |
}
|
56 |
|
57 |
public function metas() {
|
58 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
59 |
|
60 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight');
|
61 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('snippet');
|
62 |
}
|
63 |
|
64 |
public function jsonld() {
|
65 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
66 |
}
|
67 |
|
68 |
-
public function social(){
|
69 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
70 |
}
|
71 |
|
72 |
-
public function tracking(){
|
73 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
74 |
}
|
75 |
|
76 |
-
public function webmaster(){
|
77 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
78 |
}
|
79 |
|
80 |
-
public function sitemap(){
|
81 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
82 |
}
|
83 |
|
84 |
-
public function robots(){
|
85 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
86 |
}
|
87 |
|
88 |
-
public function favicon(){
|
89 |
-
add_action('sq_form_notices', array($this,'getNotificationBar'));
|
90 |
}
|
91 |
|
92 |
public function backup() {
|
@@ -151,6 +151,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
151 |
gmdate('Y-m-d H:i:s')
|
152 |
);
|
153 |
|
|
|
|
|
|
|
154 |
//show the saved message
|
155 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
156 |
|
@@ -189,6 +192,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
189 |
//save the options in database
|
190 |
SQ_Classes_Helpers_Tools::saveOptions();
|
191 |
|
|
|
|
|
|
|
192 |
//show the saved message
|
193 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
194 |
|
@@ -226,6 +232,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
226 |
|
227 |
}
|
228 |
|
|
|
|
|
|
|
229 |
//show the saved message
|
230 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
231 |
|
@@ -252,6 +261,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
252 |
//save the options in database
|
253 |
SQ_Classes_Helpers_Tools::saveOptions();
|
254 |
|
|
|
|
|
|
|
255 |
//show the saved message
|
256 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
257 |
|
@@ -280,6 +292,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
280 |
//save the options in database
|
281 |
SQ_Classes_Helpers_Tools::saveOptions();
|
282 |
|
|
|
|
|
|
|
283 |
//show the saved message
|
284 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
285 |
|
@@ -388,6 +403,9 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
388 |
//Check if there is an old backup from Squirrly
|
389 |
SQ_Classes_Helpers_Tools::getOptions();
|
390 |
|
|
|
|
|
|
|
391 |
SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
|
392 |
} else {
|
393 |
SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
|
@@ -472,7 +490,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
472 |
}
|
473 |
|
474 |
SQ_Classes_Error::setMessage(sprintf(__('Success! The import from %s was completed successfully and your SEO is safe!', _SQ_PLUGIN_NAME_), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
|
475 |
-
}catch (Exception $e){
|
476 |
SQ_Classes_Error::setMessage(__('Error! An error occured while import. Please try again.', _SQ_PLUGIN_NAME_));
|
477 |
}
|
478 |
}
|
@@ -527,7 +545,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
527 |
|
528 |
$rollback->set_plugin(array(
|
529 |
'version' => SQ_STABLE_VERSION,
|
530 |
-
'plugin_name' => _SQ_ROOT_DIR_
|
531 |
'plugin_slug' => $plugin_slug,
|
532 |
'package_url' => sprintf('https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, SQ_STABLE_VERSION),
|
533 |
));
|
@@ -668,7 +686,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
668 |
$code = SQ_Classes_RemoteController::getGSCToken();
|
669 |
|
670 |
if (!is_wp_error($code) && $code) {
|
671 |
-
$response['code'] =
|
672 |
} else {
|
673 |
$response['error'] = SQ_Classes_Error::showNotices(__('Error! Could not get the code. Connect to Google Search Console and validate the connection.', _SQ_PLUGIN_NAME_), 'sq_error');
|
674 |
}
|
@@ -689,7 +707,7 @@ class SQ_Controllers_SeoSettings extends SQ_Classes_FrontController {
|
|
689 |
//remove connection with Google Analytics
|
690 |
$code = SQ_Classes_RemoteController::getGAToken();
|
691 |
if (!is_wp_error($code) && $code) {
|
692 |
-
$response['code'] =
|
693 |
} else {
|
694 |
$response['error'] = SQ_Classes_Error::showNotices(__('Error! Could not get the tracking code. Connect to Google Analytics and get the website tracking code from Admin area.', _SQ_PLUGIN_NAME_), 'sq_error');
|
695 |
}
|
12 |
$tab = SQ_Classes_Helpers_Tools::getValue('tab', 'automation');
|
13 |
|
14 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap-reboot');
|
15 |
+
if (is_rtl()) {
|
16 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('popper');
|
17 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap.rtl');
|
18 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('rtl');
|
19 |
+
} else {
|
20 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('bootstrap');
|
21 |
}
|
22 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('switchery');
|
48 |
}
|
49 |
|
50 |
public function automation() {
|
51 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
52 |
|
53 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight');
|
54 |
SQ_Classes_ObjController::getClass('SQ_Controllers_Patterns')->init();
|
55 |
}
|
56 |
|
57 |
public function metas() {
|
58 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
59 |
|
60 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('highlight');
|
61 |
SQ_Classes_ObjController::getClass('SQ_Classes_DisplayController')->loadMedia('snippet');
|
62 |
}
|
63 |
|
64 |
public function jsonld() {
|
65 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
66 |
}
|
67 |
|
68 |
+
public function social() {
|
69 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
70 |
}
|
71 |
|
72 |
+
public function tracking() {
|
73 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
74 |
}
|
75 |
|
76 |
+
public function webmaster() {
|
77 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
78 |
}
|
79 |
|
80 |
+
public function sitemap() {
|
81 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
82 |
}
|
83 |
|
84 |
+
public function robots() {
|
85 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
86 |
}
|
87 |
|
88 |
+
public function favicon() {
|
89 |
+
add_action('sq_form_notices', array($this, 'getNotificationBar'));
|
90 |
}
|
91 |
|
92 |
public function backup() {
|
151 |
gmdate('Y-m-d H:i:s')
|
152 |
);
|
153 |
|
154 |
+
//reset the report time
|
155 |
+
SQ_Classes_Helpers_Tools::saveOptions('seoreport_time', false);
|
156 |
+
|
157 |
//show the saved message
|
158 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
159 |
|
192 |
//save the options in database
|
193 |
SQ_Classes_Helpers_Tools::saveOptions();
|
194 |
|
195 |
+
//reset the report time
|
196 |
+
SQ_Classes_Helpers_Tools::saveOptions('seoreport_time', false);
|
197 |
+
|
198 |
//show the saved message
|
199 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
200 |
|
232 |
|
233 |
}
|
234 |
|
235 |
+
//reset the report time
|
236 |
+
SQ_Classes_Helpers_Tools::saveOptions('seoreport_time', false);
|
237 |
+
|
238 |
//show the saved message
|
239 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
240 |
|
261 |
//save the options in database
|
262 |
SQ_Classes_Helpers_Tools::saveOptions();
|
263 |
|
264 |
+
//reset the report time
|
265 |
+
SQ_Classes_Helpers_Tools::saveOptions('seoreport_time', false);
|
266 |
+
|
267 |
//show the saved message
|
268 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
269 |
|
292 |
//save the options in database
|
293 |
SQ_Classes_Helpers_Tools::saveOptions();
|
294 |
|
295 |
+
//reset the report time
|
296 |
+
SQ_Classes_Helpers_Tools::saveOptions('seoreport_time', false);
|
297 |
+
|
298 |
//show the saved message
|
299 |
if (!SQ_Classes_Error::isError()) SQ_Classes_Error::setMessage(__('Saved', _SQ_PLUGIN_NAME_));
|
300 |
|
403 |
//Check if there is an old backup from Squirrly
|
404 |
SQ_Classes_Helpers_Tools::getOptions();
|
405 |
|
406 |
+
//reset the report time
|
407 |
+
SQ_Classes_Helpers_Tools::saveOptions('seoreport_time', false);
|
408 |
+
|
409 |
SQ_Classes_Error::setError(__('Great! The backup is restored.', _SQ_PLUGIN_NAME_) . " <br /> ", 'success');
|
410 |
} else {
|
411 |
SQ_Classes_Error::setError(__('Error! The backup is not valid.', _SQ_PLUGIN_NAME_) . " <br /> ");
|
490 |
}
|
491 |
|
492 |
SQ_Classes_Error::setMessage(sprintf(__('Success! The import from %s was completed successfully and your SEO is safe!', _SQ_PLUGIN_NAME_), SQ_Classes_ObjController::getClass('SQ_Models_ImportExport')->getName($platform)));
|
493 |
+
} catch (Exception $e) {
|
494 |
SQ_Classes_Error::setMessage(__('Error! An error occured while import. Please try again.', _SQ_PLUGIN_NAME_));
|
495 |
}
|
496 |
}
|
545 |
|
546 |
$rollback->set_plugin(array(
|
547 |
'version' => SQ_STABLE_VERSION,
|
548 |
+
'plugin_name' => _SQ_ROOT_DIR_,
|
549 |
'plugin_slug' => $plugin_slug,
|
550 |
'package_url' => sprintf('https://downloads.wordpress.org/plugin/%s.%s.zip', $plugin_slug, SQ_STABLE_VERSION),
|
551 |
));
|
686 |
$code = SQ_Classes_RemoteController::getGSCToken();
|
687 |
|
688 |
if (!is_wp_error($code) && $code) {
|
689 |
+
$response['code'] = SQ_Classes_Helpers_Sanitize::checkGoogleWTCode($code);
|
690 |
} else {
|
691 |
$response['error'] = SQ_Classes_Error::showNotices(__('Error! Could not get the code. Connect to Google Search Console and validate the connection.', _SQ_PLUGIN_NAME_), 'sq_error');
|
692 |
}
|
707 |
//remove connection with Google Analytics
|
708 |
$code = SQ_Classes_RemoteController::getGAToken();
|
709 |
if (!is_wp_error($code) && $code) {
|
710 |
+
$response['code'] = $code;
|
711 |
} else {
|
712 |
$response['error'] = SQ_Classes_Error::showNotices(__('Error! Could not get the tracking code. Connect to Google Analytics and get the website tracking code from Admin area.', _SQ_PLUGIN_NAME_), 'sq_error');
|
713 |
}
|
models/Audits.php
CHANGED
@@ -315,7 +315,7 @@ class SQ_Models_Audits {
|
|
315 |
'title' => __("Open Graph protocol?", _SQ_PLUGIN_NAME_),
|
316 |
'success' => __("Yes") . '!',
|
317 |
'fail' => __("No") . '!' . '<div class="sq_list_error_title">' . __("The pages without Open Graph metas", _SQ_PLUGIN_NAME_) . ':</div><div class="sq_list_error">%s</div>',
|
318 |
-
'description' => sprintf(htmlentities(__("How can we fix the Open Graph of the website? %s You need to make sure you're going to fix the Open Graph image AS WELL AS all the other open graph elements. The third bullet point in this section offers you the examples you need to implement in the <head> section of your page's code. Make sure you replace the elements inside content=\" \" with your own stuff: your own titles, own image URLs, etc. %s If you're on WordPress, you're easily getting all the settings you need from the Squirrly SEO . Make sure you use it. %s <meta property=“og:url” content=“{site}/product/expectation-marketing-ebook/“ /> %s <meta property=“og:title” content=“Expectation Marketing [Book]” /> %s <meta property=“og:description” content=“If you
|
319 |
'protip' => __("Fixing this will improve Click Through Rates on Facebook, Google Plus, LinkedIN. Guaranteed. Make sure you use this to control how your pages look on social media when people share them.", _SQ_PLUGIN_NAME_),
|
320 |
'solution' => __("Add the meta Open Graph tag in your page's header.", _SQ_PLUGIN_NAME_),
|
321 |
'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
|
@@ -325,7 +325,7 @@ class SQ_Models_Audits {
|
|
325 |
'title' => __("Twitter Card?", _SQ_PLUGIN_NAME_),
|
326 |
'success' => __("Yes") . '!',
|
327 |
'fail' => __("No") . '!' . '<div class="sq_list_error_title">' . __("The pages without Twitter Card metas", _SQ_PLUGIN_NAME_) . ':</div><div class="sq_list_error">%s</div>',
|
328 |
-
'description' => sprintf(htmlentities(__("How can we fix the Twitter Cards of the website? %s You need to make sure you're going to fix the Twitter Card image AS WELL AS all the other twitter card elements. The third bullet point in this section offers you the examples you need to implement in the <head> section of your page's code. Make sure you replace the elements inside content=\" \" with your own stuff: your own titles, own image URLs, etc. %s If you're on WordPress, you're easily getting all the settings you need from the Squirrly SEO . Make sure you use it. %s <meta property=“twitter:url” content=“{site}/product/expectation-marketing-ebook/“ /> %s <meta property=“twitter:title” content=“Expectation Marketing [Book]” /> %s <meta property=“twitter:description” content=“If you
|
329 |
'protip' => __("Fixing this will improve Click Through Rates on Twitter. Guaranteed. Make sure you use this to control how your pages look on social media when people share them.", _SQ_PLUGIN_NAME_),
|
330 |
'solution' => __("Add Twitter Card to make your articles look better on Twitter.", _SQ_PLUGIN_NAME_),
|
331 |
'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
|
315 |
'title' => __("Open Graph protocol?", _SQ_PLUGIN_NAME_),
|
316 |
'success' => __("Yes") . '!',
|
317 |
'fail' => __("No") . '!' . '<div class="sq_list_error_title">' . __("The pages without Open Graph metas", _SQ_PLUGIN_NAME_) . ':</div><div class="sq_list_error">%s</div>',
|
318 |
+
'description' => sprintf(htmlentities(__("How can we fix the Open Graph of the website? %s You need to make sure you're going to fix the Open Graph image AS WELL AS all the other open graph elements. The third bullet point in this section offers you the examples you need to implement in the <head> section of your page's code. Make sure you replace the elements inside content=\" \" with your own stuff: your own titles, own image URLs, etc. %s If you're on WordPress, you're easily getting all the settings you need from the Squirrly SEO . Make sure you use it. %s <meta property=“og:url” content=“{site}/product/expectation-marketing-ebook/“ /> %s <meta property=“og:title” content=“Expectation Marketing [Book]” /> %s <meta property=“og:description” content=“If you`re wondering why your marketing strategy isn`t bringing the results you expected this is the right ebook for you. Expectation Marketing is about giving you an acti” /> %s <meta property=“og:type” content=“product” /> %s <meta property=“og:image” content=“{site}/image.jpg” /> %s <meta property=“og:image:width” content=“700” /> %s <meta property=“og:image:height” content=“536” /> %s <meta property=“og:image:type” content=“image/jpeg” /> %s <meta property=“og:site_name” content=“Expectation Marketing” /> %s <meta property=“og:locale” content=“en” />%s", _SQ_PLUGIN_NAME_)), '<ul><li>', '</li><li>', '</li></ul><pre style="white-space: initial !important;">', '<br />', '<br />', '<br />', '<br />', '<br />', '<br />', '<br />', '<br />', '<br />', '</pre>'),
|
319 |
'protip' => __("Fixing this will improve Click Through Rates on Facebook, Google Plus, LinkedIN. Guaranteed. Make sure you use this to control how your pages look on social media when people share them.", _SQ_PLUGIN_NAME_),
|
320 |
'solution' => __("Add the meta Open Graph tag in your page's header.", _SQ_PLUGIN_NAME_),
|
321 |
'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
|
325 |
'title' => __("Twitter Card?", _SQ_PLUGIN_NAME_),
|
326 |
'success' => __("Yes") . '!',
|
327 |
'fail' => __("No") . '!' . '<div class="sq_list_error_title">' . __("The pages without Twitter Card metas", _SQ_PLUGIN_NAME_) . ':</div><div class="sq_list_error">%s</div>',
|
328 |
+
'description' => sprintf(htmlentities(__("How can we fix the Twitter Cards of the website? %s You need to make sure you're going to fix the Twitter Card image AS WELL AS all the other twitter card elements. The third bullet point in this section offers you the examples you need to implement in the <head> section of your page's code. Make sure you replace the elements inside content=\" \" with your own stuff: your own titles, own image URLs, etc. %s If you're on WordPress, you're easily getting all the settings you need from the Squirrly SEO . Make sure you use it. %s <meta property=“twitter:url” content=“{site}/product/expectation-marketing-ebook/“ /> %s <meta property=“twitter:title” content=“Expectation Marketing [Book]” /> %s <meta property=“twitter:description” content=“If you`re wondering why your marketing strategy isn`t bringing the results you expected this is the right ebook for you. Expectation Marketing is about giving you an acti” /> %s <meta property=“twitter:image” content=“{site}/image.jpg” /> %s <meta property=“twitter:domain” content=“Expectation Marketing” /> %s <meta property=“twitter:card” content=“summary” />%s", _SQ_PLUGIN_NAME_)), '<ul><li>', '</li><li>', '</li></ul><pre style="white-space: initial!important;">', '<br />', '<br />', '<br />', '<br />', '<br />', '</pre>'),
|
329 |
'protip' => __("Fixing this will improve Click Through Rates on Twitter. Guaranteed. Make sure you use this to control how your pages look on social media when people share them.", _SQ_PLUGIN_NAME_),
|
330 |
'solution' => __("Add Twitter Card to make your articles look better on Twitter.", _SQ_PLUGIN_NAME_),
|
331 |
'link' => SQ_Classes_Helpers_Tools::getAdminUrl('sq_bulkseo', 'bulkseo'),
|
models/CheckSeo.php
CHANGED
@@ -1319,12 +1319,14 @@ class SQ_Models_CheckSeo {
|
|
1319 |
$tasks = $this->getTasks();
|
1320 |
foreach ($tasks as $function => $task) {
|
1321 |
//For Dev Kit
|
1322 |
-
if
|
1323 |
-
|
1324 |
-
|
1325 |
-
|
1326 |
-
|
1327 |
-
|
|
|
|
|
1328 |
}
|
1329 |
|
1330 |
///////////////////DEV ONLY
|
@@ -1343,14 +1345,22 @@ class SQ_Models_CheckSeo {
|
|
1343 |
}
|
1344 |
}
|
1345 |
//create the db taks if doesn't exist
|
1346 |
-
if (!isset($this->dbtasks[$this->category_name][$function])
|
|
|
|
|
1347 |
//merge the local and remote task
|
1348 |
-
$
|
|
|
|
|
1349 |
} elseif (method_exists($this, $function)) {
|
1350 |
//Call the local function if exists
|
1351 |
if ($result = @call_user_func(array($this, $function))) {
|
1352 |
-
if (!isset($this->dbtasks[$this->category_name][$function])
|
1353 |
-
|
|
|
|
|
|
|
|
|
1354 |
}
|
1355 |
} elseif (isset($this->dbtasks[$this->category_name][$function])) {
|
1356 |
//remove the task if is not linked to anything
|
1319 |
$tasks = $this->getTasks();
|
1320 |
foreach ($tasks as $function => $task) {
|
1321 |
//For Dev Kit
|
1322 |
+
if(is_array($task['tools']) && !empty($task['tools'])) {
|
1323 |
+
if (in_array('Audits', $task['tools']) && !SQ_Classes_Helpers_Tools::getMenuVisible('show_audit')) {
|
1324 |
+
continue;
|
1325 |
+
} elseif (in_array('Rankings', $task['tools']) && !SQ_Classes_Helpers_Tools::getMenuVisible('show_rankings')) {
|
1326 |
+
continue;
|
1327 |
+
} elseif (in_array('Focus Pages', $task['tools']) && !SQ_Classes_Helpers_Tools::getMenuVisible('show_focuspages')) {
|
1328 |
+
continue;
|
1329 |
+
}
|
1330 |
}
|
1331 |
|
1332 |
///////////////////DEV ONLY
|
1345 |
}
|
1346 |
}
|
1347 |
//create the db taks if doesn't exist
|
1348 |
+
if (!isset($this->dbtasks[$this->category_name][$function]) || !is_array($this->dbtasks[$this->category_name][$function])) {
|
1349 |
+
$this->dbtasks[$this->category_name][$function] = array();
|
1350 |
+
}
|
1351 |
//merge the local and remote task
|
1352 |
+
if(is_array($remote_tasks[$function]) && !empty($remote_tasks[$function])) {
|
1353 |
+
$this->dbtasks[$this->category_name][$function] = array_merge($this->dbtasks[$this->category_name][$function], $remote_tasks[$function]);
|
1354 |
+
}
|
1355 |
} elseif (method_exists($this, $function)) {
|
1356 |
//Call the local function if exists
|
1357 |
if ($result = @call_user_func(array($this, $function))) {
|
1358 |
+
if (!isset($this->dbtasks[$this->category_name][$function]) || !is_array($this->dbtasks[$this->category_name][$function])) {
|
1359 |
+
$this->dbtasks[$this->category_name][$function] = array();
|
1360 |
+
}
|
1361 |
+
if(is_array($result) && !empty($result)) {
|
1362 |
+
$this->dbtasks[$this->category_name][$function] = array_merge($this->dbtasks[$this->category_name][$function], $result);
|
1363 |
+
}
|
1364 |
}
|
1365 |
} elseif (isset($this->dbtasks[$this->category_name][$function])) {
|
1366 |
//remove the task if is not linked to anything
|
models/focuspages/Image.php
CHANGED
@@ -126,8 +126,8 @@ class SQ_Models_Focuspages_Image extends SQ_Models_Abstract_Assistant {
|
|
126 |
$task['error_message'] = __("No image found", _SQ_PLUGIN_NAME_);
|
127 |
$task['completed'] = false;
|
128 |
} elseif (!empty($this->_images)) {
|
129 |
-
$keyword = html_entity_decode(
|
130 |
-
$keyword = preg_replace('
|
131 |
$keyword = preg_replace('/\s{2,}/', ' ', $keyword);
|
132 |
$words = explode(' ', $keyword);
|
133 |
foreach ($this->_images as $image) {
|
126 |
$task['error_message'] = __("No image found", _SQ_PLUGIN_NAME_);
|
127 |
$task['completed'] = false;
|
128 |
} elseif (!empty($this->_images)) {
|
129 |
+
$keyword = html_entity_decode($this->_keyword);
|
130 |
+
$keyword = preg_replace( '|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\[\]\\x80-\\xff]|i', ' ', $keyword );
|
131 |
$keyword = preg_replace('/\s{2,}/', ' ', $keyword);
|
132 |
$words = explode(' ', $keyword);
|
133 |
foreach ($this->_images as $image) {
|
models/focuspages/Length.php
CHANGED
@@ -22,6 +22,7 @@ class SQ_Models_Focuspages_Length extends SQ_Models_Abstract_Assistant {
|
|
22 |
$this->_words = $this->_audit->data->sq_seo_meta->words;
|
23 |
}
|
24 |
|
|
|
25 |
if ($this->_audit->sq_analytics_google_connected && isset($this->_audit->data->sq_analytics_google->page_time)) {
|
26 |
$this->_pagetime = $this->_audit->data->sq_analytics_google->page_time;
|
27 |
}
|
22 |
$this->_words = $this->_audit->data->sq_seo_meta->words;
|
23 |
}
|
24 |
|
25 |
+
|
26 |
if ($this->_audit->sq_analytics_google_connected && isset($this->_audit->data->sq_analytics_google->page_time)) {
|
27 |
$this->_pagetime = $this->_audit->data->sq_analytics_google->page_time;
|
28 |
}
|
readme.txt
CHANGED
@@ -406,6 +406,16 @@ Type a keyword to the right of the screen and start using Squirrly Seo. Enjoy!
|
|
406 |
Squirrly SEO 10.0.0 it's a big update. We've re-designed the UX and added many new features. If you don't want to change the current experience you have with Squirrly you can remain on the current stable version of Squirrly SEO.
|
407 |
|
408 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
409 |
= 10.0.10 - 06/18/2020 =
|
410 |
* Fixed - Focus Page Words Count
|
411 |
* Fixed - Focus Page SEO Image
|
406 |
Squirrly SEO 10.0.0 it's a big update. We've re-designed the UX and added many new features. If you don't want to change the current experience you have with Squirrly you can remain on the current stable version of Squirrly SEO.
|
407 |
|
408 |
== Changelog ==
|
409 |
+
= 10.0.11 - 06/25/2020 =
|
410 |
+
* Update - Focus Page Words Length check based on Readability algorithm
|
411 |
+
* Update - Request a new SEO Check on settings changed to make sure the goals are updated every time
|
412 |
+
* Fixed - Small SEO Check warnings when the communication with Squirrlu Cloud is not working
|
413 |
+
* Fixed - SEO Image task in Focus Pages for RTL languages
|
414 |
+
* Fixed - JSON-LD identifier in SEO Audit
|
415 |
+
* Fixed - Corrected the UI in SEO Audit regarding Open Graph and Twitter Card
|
416 |
+
* Fixed - Corrected the Page Loading Speed in SEO Audit to not include JS files
|
417 |
+
|
418 |
+
|
419 |
= 10.0.10 - 06/18/2020 =
|
420 |
* Fixed - Focus Page Words Count
|
421 |
* Fixed - Focus Page SEO Image
|
squirrly.php
CHANGED
@@ -8,7 +8,7 @@
|
|
8 |
* Description: SEO By Squirrly is for the NON-SEO experts. Get Excellent Seo with Better Content, Ranking and Analytics. For Both Humans and Search Bots.<BR> <a href="http://cloud.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
|
9 |
* Author: Squirrly SEO
|
10 |
* Author URI: https://plugin.squirrly.co
|
11 |
-
* Version: 10.0.
|
12 |
* License: GPLv2 or later
|
13 |
* License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
14 |
* Text Domain: squirrly-seo
|
@@ -16,9 +16,9 @@
|
|
16 |
*/
|
17 |
if (!defined('SQ_VERSION')) {
|
18 |
/* SET THE CURRENT VERSION ABOVE AND BELOW */
|
19 |
-
define('SQ_VERSION', '10.0.
|
20 |
//The last stable version
|
21 |
-
define('SQ_STABLE_VERSION', '10.0.
|
22 |
// Call config files
|
23 |
try {
|
24 |
require_once(dirname(__FILE__) . '/config/config.php');
|
8 |
* Description: SEO By Squirrly is for the NON-SEO experts. Get Excellent Seo with Better Content, Ranking and Analytics. For Both Humans and Search Bots.<BR> <a href="http://cloud.squirrly.co/user" target="_blank"><strong>Check your profile</strong></a>
|
9 |
* Author: Squirrly SEO
|
10 |
* Author URI: https://plugin.squirrly.co
|
11 |
+
* Version: 10.0.11
|
12 |
* License: GPLv2 or later
|
13 |
* License URI: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
14 |
* Text Domain: squirrly-seo
|
16 |
*/
|
17 |
if (!defined('SQ_VERSION')) {
|
18 |
/* SET THE CURRENT VERSION ABOVE AND BELOW */
|
19 |
+
define('SQ_VERSION', '10.0.11');
|
20 |
//The last stable version
|
21 |
+
define('SQ_STABLE_VERSION', '10.0.10');
|
22 |
// Call config files
|
23 |
try {
|
24 |
require_once(dirname(__FILE__) . '/config/config.php');
|
view/Blocks/Snippet.php
CHANGED
@@ -63,6 +63,7 @@ if (SQ_Classes_Helpers_Tools::getOption('sq_api') <> '') {
|
|
63 |
<input type="hidden" name="sq_term_id" value="<?php echo (int)$view->post->term_id; ?>">
|
64 |
<input type="hidden" name="sq_taxonomy" value="<?php echo $view->post->taxonomy; ?>">
|
65 |
<input type="hidden" name="sq_hash" id="sq_hash" value="<?php echo $view->post->hash; ?>">
|
|
|
66 |
|
67 |
<?php
|
68 |
//Run only is frontend admin and ajax call
|
63 |
<input type="hidden" name="sq_term_id" value="<?php echo (int)$view->post->term_id; ?>">
|
64 |
<input type="hidden" name="sq_taxonomy" value="<?php echo $view->post->taxonomy; ?>">
|
65 |
<input type="hidden" name="sq_hash" id="sq_hash" value="<?php echo $view->post->hash; ?>">
|
66 |
+
<input type="hidden" name="sq_keyword" id="sq_keyword" value="">
|
67 |
|
68 |
<?php
|
69 |
//Run only is frontend admin and ajax call
|
view/Goals/CheckSeo.php
CHANGED
@@ -127,9 +127,9 @@ $category_name = apply_filters('sq_page', SQ_Classes_Helpers_Tools::getValue('pa
|
|
127 |
|
128 |
<?php if (!empty($view->congratulations) && !$refresh) { //if there are congratulations and is checked today
|
129 |
$seosuccess_time = SQ_Classes_ObjController::getClass('SQ_Models_CheckSeo')->getDbTask('seosuccess_time');
|
130 |
-
|
131 |
foreach ($view->congratulations as $index => $row) {
|
132 |
-
if (!empty($seosuccess_time) && (time() - (int)$seosuccess_time) < (3600 *
|
133 |
break;
|
134 |
}
|
135 |
if ($row['completed']) { ?>
|
127 |
|
128 |
<?php if (!empty($view->congratulations) && !$refresh) { //if there are congratulations and is checked today
|
129 |
$seosuccess_time = SQ_Classes_ObjController::getClass('SQ_Models_CheckSeo')->getDbTask('seosuccess_time');
|
130 |
+
shuffle($view->congratulations);
|
131 |
foreach ($view->congratulations as $index => $row) {
|
132 |
+
if (!empty($seosuccess_time) && (time() - (int)$seosuccess_time) < (3600 * 24 * 6 )) {
|
133 |
break;
|
134 |
}
|
135 |
if ($row['completed']) { ?>
|