searchlove london | 'jono alderson', turbocharging your wordpress website

Post on 13-Apr-2017

6.360 Views

Category:

Marketing

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

@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

webpagetest.org

@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)

top related