Novinky na webu

Volné pokračování optimalizací a úprav. S WordPressem už jsem docela kamarád, a tak se mohu směle pouštět i do pokročilejších zásahů.

Co se tedy změnilo od článku WordPress. Nastavení, tipy a pluginy co jsem použil?

Šablona

Když to vezmu od konce tak šablona Hueman zůstala (i když se nám mezitím objevila placená verze PRO). Je to neuvěřitelné, ale stále vychází nové a nové verze. Standardně umí česky, a taky se naučila vlastní CSS, takže odpadlo přilepování vlastního stylu přes Proč a jak na vlastní plugin pro WordPress.

Pluginy

Broken Link Checker zůstal, ale je disablován, s tím, že ho pustím tu a tam ručně. All In One WP Security, zatím funguje, takže zůstal. Randomize nahradil Quotes Collection, ani už nevím proč. Redirection zůstává a funguje. Responsive Lightbox se taky osvědčil a není důvod hledat alternativu.

SyntaxHighlighter Evolved nahradil Crayon Syntax Highlighter – je prostě nejlepší, umí všechno už v základu a má spoustu nastavení. Enlighter, uvidíme, Crayon má těch nastavení až moc, a třeba na telefonu byl ten kód vždy nějaký divný.

Taky jsem vyměknul a nahradil The SEO Framework Yoastem, prostě opravdu umí spoustu věcí sám od sebe, a tak odpadly nějaké pluginy a starosti jako sitemapy, sociální metatagy apd.

TinyMCE Advanced taky není důvod měnit, WP Smush je základ sice zmenšuje, ale vždy mi nějaký měřič webu povídal, že by šly obrázky ještě zmenšit (klidně i o 20%), pokud nechcete placený Optimus, tak se hodně chválí Shortpixel (odkaz by vám i mě měl přidat 100 kreditů), tak uvidíme. Jinak free plán je 100 obrázků za měsíc, což asi většině bude stačit.

Roboti

Kromě robots.txt jsem přihodil i humans.txt.

Steroidy

No a jak dopadly všechny ty W3 Total CacheWP Super Cache, a další pokusy se zrychlováním webu a honbou za vyšším skóre?

Vyhodil jsem WP Super Cache, nahradil jedním zápisem do .htaccess a výsledek je stejný – a to nekešuju, takže odpadly problémy s neaktualizací hlášek.

# Browser Caching – Add Expire Headers to WordPress, https://www.keycdn.com/blog/speed-up-wordpress/
<IfModule mod_expires.c>
  # Enable expirations
  ExpiresActive On 
  # Default directive
  ExpiresDefault "access plus 1 month"
  # My favicon
  ExpiresByType image/x-icon "access plus 1 year"
  # Images
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/jpg "access plus 1 month"
  ExpiresByType image/jpeg "access plus 1 month"
  # CSS
  ExpiresByType text/css "access plus 1 month"
  # Javascript
  ExpiresByType application/javascript "access plus 1 year"
</IfModule>

# Gzip Compression, https://www.keycdn.com/blog/speed-up-wordpress/
<IfModule mod_deflate.c>
  # Compress HTML, CSS, JavaScript, Text, XML and fonts
  AddOutputFilterByType DEFLATE application/javascript
  AddOutputFilterByType DEFLATE application/rss+xml
  AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
  AddOutputFilterByType DEFLATE application/x-font
  AddOutputFilterByType DEFLATE application/x-font-opentype
  AddOutputFilterByType DEFLATE application/x-font-otf
  AddOutputFilterByType DEFLATE application/x-font-truetype
  AddOutputFilterByType DEFLATE application/x-font-ttf
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE font/opentype
  AddOutputFilterByType DEFLATE font/otf
  AddOutputFilterByType DEFLATE font/ttf
  AddOutputFilterByType DEFLATE image/svg+xml
  AddOutputFilterByType DEFLATE image/x-icon
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/xml

  # Remove browser bugs (only needed for really old browsers)
  BrowserMatch ^Mozilla/4 gzip-only-text/html
  BrowserMatch ^Mozilla/4\.0[678] no-gzip
  BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
  Header append Vary User-Agent
</IfModule>

 

Jen jsem se s tím tedy hodně natrápil, protože to pořád ne a ne fungovat, a nevím zda to není jen záležitosti hostingu u OneBitu, ale musel jsem po konzultaci s podporou vytvořit soubor .user.ini s obsahem zlib.output_compression = on pak už se vše rozeběhlo.

Taky jsem se trápil s Autoptimize na minifikování JS a CSS, pořád mi to házelo 404ky, buď se to tlouklo s cachovacím pluginem, nebo se mi nepodařilo najít ten správný JS/CSS na vyloučení z optimalizace – nyní tedy nahrazeno Fast Velocity Minify a testujeme.

Headers

Když už jedeme na HTTPS, tak to chtělo poladit Security Headers, a z nějakého důvodu mi některé nešly nastavit přes .htaccess, takže jsem vše nacpal přes ten vlastní plugin. Největší trápení je s Content-Security-Policy, tomu se pro začátek raději vyhněte.

/*
 * Security Headers plugin
 * https://wordpress.org/plugins/security-headers/
 * https://benrabicoff.com/adding-secure-http-response-headers-wordpress/
 */
function send_headers() {
  // Prevent MIME-Type Sniffing
  send_nosniff_header(); // .htaccess: Header set X-Content-Type-Options nosniff # nejde
  // Block Access If XSS Attack Is Suspected
  header("X-XSS-Protection: 1; mode=block"); // .htaccess: Header set X-XSS-Protection "1; mode=block" # nejde
  // Prevent Clickjacking
  send_frame_options_header(); // .htaccess: Header always append X-Frame-Options SAMEORIGIN # jde!
  // Enforce the use of HTTPS
  header("Strict-Transport-Security: max-age=31536000; includeSubDomains"); // .htaccess: Header set Strict-Transport-Security "max-age=31536000" # jde!
  // Referrer Policy
  header("Referrer-Policy: no-referrer-when-downgrade");
  // Prevent XSS Attack, https://walterebert.com/blog/using-csp-wordpress/
  $csp  = "default-src 'self'; ";
  $csp .= "img-src 'self' data: http: https: disqus.com *.disqus.com *.disquscdn.com *.google-analytics.com; ";
  $csp .= "script-src 'self' 'unsafe-inline' 'unsafe-eval' https: disqus.com *.disqus.com *.disquscdn.com *.google-analytics.com *.jsdelivr.net *.gstatic.com; ";
  $csp .= "style-src 'self' 'unsafe-inline' https: disqus.com *.disqus.com *.disquscdn.com; ";
  $csp .= "font-src 'self'; ";
  $csp .= "frame-src 'self' https: disqus.com *.disqus.com *.disquscdn.com; ";
  $csp .= "connect-src 'self' https: disqus.com *.disqus.com *.disquscdn.com; ";
  // FF 23+ Chrome 25+ Safari 7+ Opera 19+
  header("Content-Security-Policy: " . $csp);
  // IE 10+
  header("X-Content-Security-Policy: " . $csp);
}
add_action('send_headers', 'send_headers', 1);

Dále odebrány nějaké ty zbytečnosti

/*
 * Remove unnecessary things from header
 * https://orbitingweb.com/blog/remove-unnecessary-tags-wp-head/
 * http://musilda.cz/odstraneni-defaultnich-informaci-z-headeru-wordpress-sablony/
 */
add_action('wp', function(){
  remove_action( 'wp_head', 'rsd_link' ); // <link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.mikrom.cz/xmlrpc.php?rsd" />
  remove_action( 'wp_head', 'wlwmanifest_link' ); // <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://www.mikrom.cz/wp-includes/wlwmanifest.xml" /> 
  //remove_action( 'wp_head', 'wp_shortlink_wp_head' ); // <link rel='shortlink' href='https://www.mikrom.cz/?p=2971' />
  //remove_action( 'wp_head', 'wp_generator' ); // <meta name="generator" content="WordPress 3.4.2">
  //remove_action( 'wp_head', 'index_rel_link' ); // index link
  //remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 ); // prev link
  //remove_action( 'wp_head', 'start_post_rel_link', 10, 0 ); // start link
  //remove_action( 'wp_head', 'adjacent_posts_rel_link', 10, 0 ); // Display relational links for the posts adjacent to the current post.
  //remove_action( 'wp_head', 'feed_links_extra', 3 ); // Display the links to the extra feeds such as category feeds
  //remove_action( 'wp_head', 'feed_links', 2 ); // Display the links to the general feeds: Post and Comment Feed
}, 9);

Odebráno XML-RPC, odebrány verze skriptů, ale to je v každém takovémhle návodu.

Taky jsem opravil CookieBar, který voláním freegeoip strašně kazil výsledky na GTMetrix, Pingdom apd.

/*
 * Cookie Bar
 * http://cookie-bar.eu/
 */
function _add_cookie_bar() {
  wp_register_script( 'cookiebar', '//cdn.jsdelivr.net/cookie-bar/1/cookiebar-latest.min.js?theme=grey&scrolling=1&noGeoIp=1', '', '', true );
  wp_enqueue_script( 'cookiebar' );
}
add_filter( 'wp_enqueue_scripts', '_add_cookie_bar' );

Disqus

Zkusil jsem nasadit nový systém komentářů! Disqus je všude možně, lze se přihlásit kdejakým účtem (pokud chci mít info o odpovědi), nebo lze komentovat i bez přihlášení. Plugin Disqus Conditional Load nastaven bez větších potíží a paradoxně i přes to, že obnáší načítání dalšího balastu odněkud z webu, tak je ale znatelně rychlejší než načítání gravatarů v komentářích od WordPressu. Ano ty jdou vypnout, ale já chtěl obrázky. Ano dosáhnul jsem jich přes WP User Avatar. Ale takhle jsem mohl zakázat i AkismetA ještě

// Remove comment-reply.min.js from footer, https://www.keycdn.com/blog/speed-up-wordpress/
function comments_clean_header_hook(){
  wp_deregister_script( 'comment-reply' );
}
add_action('init','comments_clean_header_hook');

Závěr

Výsledkem je tedy nyní 17 aktivních pluginů a ještě lepší výsledek oproti Jak bylo náročné zrychlit WordPress.

mikrom

Roman Mikulka aka mikrom. Ajťák, opravář, programátor samouk, elektrotechnik, koloběžkář a geocacher. Více na samostatné stránce O mně.

Mohlo by se vám líbit...