Upload
distilled
View
6.360
Download
0
Embed Size (px)
Citation preview
@jonoaldersonTurbo-charging your WordPress website
Turbo-charging your WordPress*
website
@jonoaldersonTurbo-charging your WordPress website
I’m going to make you care about technical SEO.
@jonoaldersonTurbo-charging your WordPress website
Jono AldersonHead of Insight @ Linkdex
@jonoalderson
Technical SEO + analytics geekCloset web developer & Wordpress fanatic
@jonoaldersonTurbo-charging your WordPress website
So, like any good SEO, I needed a
website.
@jonoaldersonTurbo-charging your WordPress website
September 19th is Talk Like A Pirate Day
@jonoaldersonTurbo-charging your WordPress website
Today is International Plush Animal Lovers Day
@jonoaldersonTurbo-charging your WordPress website
Tomorrow is Cat Day and Internet Day
@jonoaldersonTurbo-charging your WordPress website
...and the whole of October is Pizza Month
@jonoaldersonTurbo-charging your WordPress website
!
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
# links builtzero
@jonoaldersonTurbo-charging your WordPress website
# bloggers emailedzero
@jonoaldersonTurbo-charging your WordPress website
Proactive outreach donezero
@jonoaldersonTurbo-charging your WordPress website
Comment spam, guest posting, content spunzero
@jonoaldersonTurbo-charging your WordPress website
Infographicszero
@jonoaldersonTurbo-charging your WordPress website
Average words per page< 50*
@jonoaldersonTurbo-charging your WordPress website
Budgetzero*
@jonoaldersonTurbo-charging your WordPress website
Wanna see?
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
www.daysoftheyear.com
@jonoaldersonTurbo-charging your WordPress website
When we started talking about content
marketing, we stopped talking about technical
optimisation.“on page” is not the same as
“technical”
@jonoaldersonTurbo-charging your WordPress website
Why should we care?
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
We’ve all seen the impact of technical
bugs/faults/etc.
Broken pages, missing redirects, indexation faults, etc...
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Visualising PerformanceSeeing is believing
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Ditch the crappy metaphor!
Yes, it works as a loose analogy, but it gives people permission to think about it in an
abstract sense.
@jonoaldersonTurbo-charging your WordPress website
Visualising PerformanceSpeed● Google PageSpeed Insights, ySlow● Google Analytics● Pingdom, WebPageTest*
@jonoaldersonTurbo-charging your WordPress website
developers.google.com/speed/pagespeed/insights/
@jonoaldersonTurbo-charging your WordPress website
webpagetest.org
@jonoaldersonTurbo-charging your WordPress website
There is no ‘site speed’ number which Google uses.
An aside… Developers HATE
this.
@jonoaldersonTurbo-charging your WordPress website
Visualising PerformanceUser Experience
● How’s it “feel”? Consider the psychology of the loading experience
● User experience index, general quality, give-a-damn● Track it, benchmark it. Surveying and feedback tools
@jonoaldersonTurbo-charging your WordPress website
Visualising PerformanceTechnical optimisation & security● Bandwidth/overhead optimisation
● Adoption of technologies (open graph, responsive images, caching, etc)
● Minimising risks of hacking, DDOS
@jonoaldersonTurbo-charging your WordPress website
But wait, this really isn’t SEO…?
@jonoaldersonTurbo-charging your WordPress website
So, let’s go.
@jonoaldersonTurbo-charging your WordPress website
bit.ly/searchlove-wordpressBut first...
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack1. Hosting Type
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack2. Server Spec & Config
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack3. Theme / CMS
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack4. Domain(s)
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack5. Media / Assets
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack6. HTML & DOM parsing (and CSS + JS)
@jonoaldersonTurbo-charging your WordPress website
Visualising the stack7. Re-flow / re-paint, FPS
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
So let’s start with something easy.
My ‘must have’ WordPress plugins
@jonoaldersonTurbo-charging your WordPress website
Don’t go anywhere without installing:W3 Total Cache*
RedirectionBWP Sitemaps
Broken Link CheckeriThemes Security*
Akismet*Query Monitor
@jonoaldersonTurbo-charging your WordPress website
You may also like...BWP Minify
Yet Another Related Posts Plugin*YARPP Experiments
Relevanssi*WP-PageNavi
Kraken.io*Google Tag Manager for Wordpress
User Role EditorCustom Post Type Permalinks
@jonoaldersonTurbo-charging your WordPress website
Third Party ServicesCloudflare (or MaxCDN)
NewRelicAn SSL certificate (ssl2buy.com)
...some kind of backup processes......and some proper hosting...
@jonoaldersonTurbo-charging your WordPress website
What, no Yoast SEO?
@jonoaldersonTurbo-charging your WordPress website
Stand up, Jim.Jim Seward, @iamoldskool
@jonoaldersonTurbo-charging your WordPress website
“My wordpress seo tends to be limited to ‘install the yoast plugin’ and do the usual site stuff...”Jim Seward, @iamoldskool
@jonoaldersonTurbo-charging your WordPress website
Is this really an issue?
What are the experts doing?
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
If everybody’s only running at 80%...
...Want the rest?
@jonoaldersonTurbo-charging your WordPress website
Here’s the stuff nobody talks about.
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Buy yourself some hosting.
You can only learn this stuff by doing
@jonoaldersonTurbo-charging your WordPress website
Dedicated/tailored WordPress Hosting?
@jonoaldersonTurbo-charging your WordPress website
DIY HOSTINGShared, Dedicated, or VPS*(vs Clusters & hardcore setups, AWS elastic cloud computing)
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
cPanel
@jonoaldersonTurbo-charging your WordPress website
Behind the curtain…
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
http://codex.wordpress.org/
@jonoaldersonTurbo-charging your WordPress website
wp-config.phpSecurity settings
Auto update settingsLimit revision & trash storage
Cookie stuffSet memory allowance
Force SSLSet language
http://codex.wordpress.org/Editing_wp-config.php
@jonoaldersonTurbo-charging your WordPress website
Expert tip... Reference the
Template HierarchyURL -> <- Page
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...You can use pre_get_posts to intercept and
change how requests are processed
@jonoaldersonTurbo-charging your WordPress website
URL Structures (Permalinks)
Default/?p=%post-id%
http://www.example.com/?p=123
@jonoaldersonTurbo-charging your WordPress website
URL Structures (Permalinks)
‘Pretty’ /%category%/%postname%/
http://www.example.com/cat/page/
@jonoaldersonTurbo-charging your WordPress website
URL Structures (Permalinks)
‘Flat’/%post-id%-%postname%/
http://www.example.com/123-page/
@jonoaldersonTurbo-charging your WordPress website
Custom 503, maintenance & DB error pages
@jonoaldersonTurbo-charging your WordPress website
Custom Error Files
<?php// Set headers before outputting the page HTML header('HTTP/1.1 503 Service Temporarily Unavailable'); header('Status: 503 Service Temporarily Unavailable'); header('Retry-After: 3600'); // 1 hour = 3600 seconds?>
<html>...
wp-content/maintenance.phpwp-content/db-error.php
@jonoaldersonTurbo-charging your WordPress website
Other WP Crap…
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Clean up WP and plugin overheads
// Clean up wp_head()function cleanhead() {
remove_action('wp_head', 'rsd_link'); remove_action('wp_head', 'wlwmanifest_link');remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'feed_links_extra', 3 );remove_action('wp_head', 'feed_links', 2 ); remove_action('wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );remove_action('wp_head', 'rel_canonical');remove_action('wp_head', 'wp_shortlink_wp_head', 10, 0 );}add_action('init', 'cleanhead');
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Clean up WP and plugin overheads
// Ged rid of superfluous CSSfunction deregister_styles() { if (!is_admin()) {
wp_deregister_style('avatars');wp_deregister_style('imgareaselect')wp_deregister_style('avatar-manager.css');wp_deregister_style('yarppRelatedCss');
} }add_action( 'wp_print_styles', 'deregister_styles');
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Kill unnecessary templates
// Kill misc pagesadd_action('template_redirect', 'jono_nerf_pages');function jono_nerf_pages() { global $wp_query, $post; if (is_day() || is_month() || is_year()) { header("HTTP/1.0 404 Not Found"); $wp_query->set_404(); } if (is_attachment()) { header("HTTP/1.1 301 Moved Permanently"); header("Location: ".get_permalink($post->post_parent)); exit; } if (is_feed()) { header("HTTP/1.0 404 Not Found"); $wp_query->set_404(); wp_query->is_feed = false; } if ((is_archive()) && (!have_posts())) { header("HTTP/1.0 404 Not Found"); $wp_query->set_404(); }}
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Your Theme Performance
PHP & databaseTheme files and functions
Plugins & widgets
@jonoaldersonTurbo-charging your WordPress website
W3 Total Cache!
@jonoaldersonTurbo-charging your WordPress website
I’m not going to tell you how to configure
this.Your site is unique.
@jonoaldersonTurbo-charging your WordPress website
Here’s a good place to start
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...You can move redirects from out of WordPress
and into .htaccess from within the plugin admin
@jonoaldersonTurbo-charging your WordPress website
apple-touch-icon.png (and variants)favicon.ico (and variants)
browserconfig.xmlInvalid or un-used feedsinvalid page/date ranges
broken internal links (and missing http links)alternate sitemap and meta data urls
pages & images with weird, breaking parameterssecurity probes
legacy urls
Some things to watch out for...
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
The physical location of your server & media
matters.
Use a CDN
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
MAGIC.
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Subdomains Rock.Serialisation of requests (and other cool stuff)
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
*No need to create/configure subdomains in cPanel/WHM!
@jonoaldersonTurbo-charging your WordPress website
Cloudflare + Subdomains + W3 Total Cache = MAGIC
Configure in W3TC as a “Generic Mirror”
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Redirect requests which resolve to your CDN subdomains (or other
hostnames)// Redirect requests from non-primary domainsfunction domain_redirect() { $hostname = $_SERVER['HTTP_HOST']; $mainDomains = array('www.daysoftheyear.com','app.daysoftheyear.com'); if (!in_array($hostname,$mainDomains)) { $uri = $_SERVER['REQUEST_URI']; wp_redirect( 'https://www.daysoftheyear.com'.$uri, 301 ); exit; }}add_action('init', 'domain_redirect');
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Use established CDNs to server common/large resources (like
jQuery)// Use Google CDN for jQueryfunction modify_jquery() { if (!is_admin()) { wp_deregister_script('jquery'); wp_register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', false, '1.11.1'); wp_enqueue_script('jquery'); }}add_action('init', 'modify_jquery');
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
(Or W3 Total Cache)
@jonoaldersonTurbo-charging your WordPress website
Before…
After…
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
HTTPS / SSLChange to protocol-relative URLs (//example.com/file/)
References in CSS/JS & third party stuff
Purchase & install key*(Cloudflare is MAGIC)
Buy the right type (single, multi, wildcard)
Tweak CDN config
W3 Total Cache config
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Database find & replace
update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);
...or cheat...
“Search and Replace” plugin
@jonoaldersonTurbo-charging your WordPress website
HTTPS / SSLForce SSL in wp-config.php (esp. if using Cloudflare)
// Force SSLdefine('FORCE_SSL_ADMIN', true);if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') $_SERVER['HTTPS']='on';
@jonoaldersonTurbo-charging your WordPress website
HTTPS / SSLForce SSL in .htaccess
http://www.webhostinghub.com/help/learn/website/ssl/force-website-to-use-ssl
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Media OptimisationPay attention to every detail.Kraken, but get it right first.
Photoshop isn’t good enough; use dedicated kit
@jonoaldersonTurbo-charging your WordPress website
File size is (sometimes) less important than
#requests
@jonoaldersonTurbo-charging your WordPress website
CSS SpritesAre super-awesome, and avoid extra
requests
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...You can base64 encode images in your
CSS
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Change default media links
// Change image default linkfunction misc_change_image_default_link() {
$image_set = get_option( 'image_default_link_type' );if ($image_set !== 'none') {
update_option('image_default_link_type', 'none');}
}add_action('admin_init', 'misc_change_image_default_link', 10);
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Lowercase filenames
// Lowercase filenamesadd_filter('sanitize_file_name', 'mfl_make_filename_lowercase', 10);function mfl_make_filename_lowercase($filename) { $info = pathinfo($filename); $ext = empty($info['extension']) ? '' : '.' . $info['extension']; $name = basename($filename, $ext); return strtolower($name) . $ext;}
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Responsive Images (without the overhead…)
<picture><!--[if IE 9]><video style="display: none;"><![endif]--><source srcset="small-image.jpg" media="(max-width: 480px)"><source srcset="medium-image.jpg" media="(max-width: 720px)"><source srcset="large-image.jpg" media="(max-width: 1024px)"><source srcset="xlarge-image.jpg" media="(max-width: 1280px)"><!--[if IE 9]></video><![endif]--><img srcset="xlarge-image.jpg" alt="" /></picture>
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Responsive Images (without the overhead…)
// Thumbnail sizesadd_image_size( 'cols-1-small', 480, 314, array( 'left', 'top' ) );add_image_size( 'cols-1-med', 720, 470, array( 'left', 'top' ) );add_image_size( 'cols-1-large', 1024, 669, array( 'left', 'top' ) );add_image_size( 'cols-1-xlarge', 1024, 669, array( 'left', 'top' ) );
add_image_size( 'cols-2-small', 240, 157, array( 'left', 'top' ) );add_image_size( 'cols-2-med', 360, 236, array( 'left', 'top' ) );add_image_size( 'cols-2-large', 512, 335, array( 'left', 'top' ) );add_image_size( 'cols-2-xlarge', 512, 335, array( 'left', 'top' ) );
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Expert tip... NewRelic
@jonoaldersonTurbo-charging your WordPress website
Expert tip... NewRelic
@jonoaldersonTurbo-charging your WordPress website
Expert tip... NewRelic
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Expert Tip...Check your error_log file
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
@jonoaldersonTurbo-charging your WordPress website
Stuff I haven’t talked about...Parent/child theme relationships
PHP(!)Transient caching
Device-type optimisationAwkward SSL stuff (chain certificates)
CSS/JS optimisationWP Cron, Ajax & the Heartbeat API
Browser reflow and repaint
(That may own websites are a bit slow, and far from perfect!)
Take it one step at a time.
@jonoaldersonTurbo-charging your WordPress website
Stop mitigating against technical
impact......Start capitalising on technical
opportunity.
@jonoaldersonTurbo-charging your WordPress website
Learn (some of) this stuff!
And not just because you want to be “full stack”.
@jonoaldersonTurbo-charging your WordPress website
And if you’re not at least thinking about this stuff…?
Maybe all you’re doing is “marketing”.
@jonoaldersonTurbo-charging your WordPress website
Google cares about this stuff...
Because users do. Even if they don’t know they do.
@jonoaldersonTurbo-charging your WordPress website
Aim for 100%(but get there one step at a time)
@jonoaldersonTurbo-charging your WordPress website
WIN
@jonoaldersonTurbo-charging your WordPress website
Jono AldersonHead of Insight @ Linkdex
@jonoalderson
(and also www.daysoftheyear.com)