Zauważyłeś u siebie, że Contact Form 7 lub Google reCAPTCHA zintegrowana za jego pomocą spowalnia Twoją stronę? Ja też! Zauważyłem to podczas analizy wyników w PageSpeed Insights. W sekcji “Ogranicz nieużywany JavaScript”, która prosi aby opóźnić ładowanie skryptów do momentu, aż będą wymagane. Jeśli nie potrzebujesz formularza kontaktowego na stronie głównej, to nie ma potrzeby ładować tego skryptu. Co więcej, pokażę Ci sposób na ładowanie reCAPTCHA tylko na stronie z Contact Form 7 tak, aby nie spowalniał całej strony.
Jak włączyć ładowanie reCAPTCHA tylko na stronie z Contact Form 7
Cała operacja jest w WordPress dość prosta. Musimy zmodyfikować tylko (lub aż) dwa pliki.
Pierwszym z nich jest plik wp-config.php w katalogu głównym WordPress. Przejdź do jego edycji (np. za pomocą FileZilla) i dopisz gdzieś w środku:
/** Contact Form 7: wyłącza assety na froncie */
define('WPCF7_LOAD_JS', false);
define('WPCF7_LOAD_CSS', false);
Zapisz zmiany i prześlij plik z powrotem na serwer. Snippet ten po prostu wyłącza Contact Form 7 na całej witrynie.
Drugim plikiem, który musisz edytować jest functions.php w motywie potomnym (lub stworzyć snippet np. za pomocą wtyczki Code Snippets). Poniższy snippet szuka na każdej podstronie shortcode należący do Contact Form 7. Jeśli go znajdzie – uruchamia ładowanie jego skryptów i plików CSS, które wyłączyłeś w pliku wp-config.php. Jeśli nie znajdzie – wyłącza ładowanie skryptów reCAPTCHA.
/**
* Sprawdza czy Shortcode Contact Form 7 występuje.
*
* Szuka shortcode `[contact-form-7]` tylko w zwykłych typach postów.
*
*/
function tw_cf7_shortcode_exists($post_id = null)
{
if (!is_null($post_id) || (is_singular() && class_exists('WPCF7'))) {
if (is_null($post_id)) {
global $post;
$post_id = $post->ID;
}
return strpos(get_post_field('post_content', $post_id), '[contact-form-7 ') !== false;
}
return false;
}
/**
* Wyłącza Recaptcha gdy nie ma formularza Contact Form 7 na stronie.
*/
add_action('wp_enqueue_scripts', function () {
if (!tw_cf7_shortcode_exists()) {
remove_action('wp_enqueue_scripts', 'wpcf7_recaptcha_enqueue_scripts', 20, 0);
}
}, 1, 0);
/**
* Włącza skrypty Contact Form 7 gdy formularz znajduje się na stronie.
*/
add_action('wp_enqueue_scripts', function () {
if (tw_cf7_shortcode_exists()) {
if (function_exists('wpcf7_enqueue_scripts')) {
wpcf7_enqueue_scripts();
}
if (function_exists('wpcf7_enqueue_styles')) {
wpcf7_enqueue_styles();
}
}
}, 20, 0);
Czy warto decydować się na taki ruch?
Wyłączenie skryptów Google reCAPTCHA ma swoje wady i zalety. Oczywistą zaletą jest wspomniane przyspieszenie ładowania się strony głównej oraz wszystkich innych podstron, gdzie nie ma formularza kontaktowego. Minusem jest pogorszenie wydajności Google reCAPTCHA v3 w wykrywaniu podejrzanego ruchu. Skrypt ten analizuje ruch człowieka na całej stronie. Na jego podstawie ocenia, czy formularz kontaktowy został wypełniony przez internautę czy przez robota spamującego.
Wyłączając skrypt na innych podstronach, Google dostaje mniej informacji o interakcji użytkownika ze stroną, przez co może nieco mniej skutecznie blokować wysyłkę formularzy. Ruch na stronie nie jest na szczęście jedynym czynnikiem oceny. Skrypt waliduje również treść pól formularza oraz czas jego wypełniania. Warto więc zaryzykować lub przejść na wersję Google reCAPTCHA v2 – tam gdzie trzeba klikać w przejścia dla pieszych 😉
PS. Nie wydaje Ci się głupie, że z jednej strony Google tworzy różne skrypty i narzędzia takie jak Google reCAPTCHA, Google Analytics, Google Tag Manager a następnie w Google PageSpeed Insights informuje Cię, że skrypty te spowalniają Twoją stronę? Absurdalnie, co nie?