How to Find and Fix Common Technical SEO Issues

Post on 21-Apr-2017

4.273 views 1 download

Transcript of How to Find and Fix Common Technical SEO Issues

POLEMIC

D I G I T A L@badams

Find and FixCommon Technical

SEO Issues

Webpromo Expert Webinar

19 January 2016

Barry Adams

POLEMIC

D I G I T A L@badams

Barry Adams

POLEMIC

D I G I T A L@badams

Agenda:

1. Server-side Technical SEO

2. On-site Technical SEO

3. Technical SEO for International Websites

4. Q & A

POLEMIC

D I G I T A L@badams

Server-side Technical SEO

POLEMIC

D I G I T A L@badams

Crawl Optimisation

• Minimising wasted crawl budget

Crawl Budget = the maximum amount of time a search engine spider will spend crawling your website before it gives up.

POLEMIC

D I G I T A L@badams

Crawl Sources

• Site Crawl

• XML Sitemaps

• Inbound Links

• DNS Records

• Domain Registrations

• Browsing Data

POLEMIC

D I G I T A L@badams

Crawl Waste

DeepCrawl report

POLEMIC

D I G I T A L@badams

Crawl Issue: URL Duplication

• http://website.com

• http://www.website.com

• http://www.website.com/index.php

• http://website.com/index.php

• http://www.website.com/category

• http://www.website.com/category/

• http://website.com/category

• http://website.com/category/

POLEMIC

D I G I T A L@badams

Solving URL duplication: WWW

• Apache .htaccess rules:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^website\.com

RewriteRule (.*) http://www.website.com/$1 [R=301,L]

This redirects all requests to http://website.com to http://www.website.com

POLEMIC

D I G I T A L@badams

Trailing Slash Redirect

• Apache .htaccess rules:

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_URI} !(.*)/$

RewriteRule ^(.*)$ http://domain.com/$1/ [L,R=301]

This redirects all requests to /category to the version with the trailing slash: /category/

POLEMIC

D I G I T A L@badams

HTTPS Redirect

• Apache .htaccess rules:

RewriteEngine on

RewriteCond %{SERVER_PORT} !^443$

RewriteCond %{HTTPS} off

RewriteRule ^(.*)$ https://www.website.com/$1 [R=301,L]

This redirects all standard HTTP requests to the HTTPS version of the website

POLEMIC

D I G I T A L@badams

SSL Certificate Quality

https://www.ssllabs.com/ssltest/

POLEMIC

D I G I T A L@badams

Learn more about Apache .htaccess:

• http://www.htaccess-guide.com/

• http://www.htaccesstools.com/

POLEMIC

D I G I T A L@badams

HTTP Status Codes

The most important ones:

200 OKeverything is fine, here is your content

404 Not Foundthe page you are trying to view doesn’t exist

301 Permanent Redirectthe page you are trying to view has moved permanently,here’s the new URL

302 Temporary Redirectthe page you are trying to view has moved temporarily,here is the new URL

500 Server Errorthere’s been a massive fuck up, I can’t serve you this page

POLEMIC

D I G I T A L@badams

On-Site Technical SEO

POLEMIC

D I G I T A L@badams

XML Sitemaps

POLEMIC

D I G I T A L@badams

Optimise your XML sitemap

• Ensure your sitemap contains final URLs only

• Minimise non-200 status codes

POLEMIC

D I G I T A L@badams

Use Multiple Sitemaps

• Google says max 50.000 URLs

Nick Eubanks case study shows 35.000 is optimal

Source: http://seoauv.com/increase-traffic/

POLEMIC

D I G I T A L@badams

Mismatched Canonicals

• All URLs in XML sitemap should be final canonical URLs only

POLEMIC

D I G I T A L@badams

Always use Canonicals

• Duplicate URLs can originate from various sources…

http://www.website.com/page1.html

http://www.website.com/page1.html?utm_source=buffer&

utm_medium=social&utm_campaign=seo

POLEMIC

D I G I T A L@badams

Use Full URLs in Canonicals

<link rel=“canonical” href=“/page1.html”>

<link rel=“canonical”

href=“www.website.com/page1.html”>

<link rel=“canonical”

href=“https://www.website.com/page1.html”>

POLEMIC

D I G I T A L@badams

Use Canonicals wisely…

• “rel=canonical” is primarily for index issues

It is not a fix for crawl waste

Search engines need to see the canonical tag before they can act on it

Ergo, pages need to be crawled before rel=canonical has any effect

Ditto with meta noindex tags

POLEMIC

D I G I T A L@badams

Internal Redirects

• Find redirects with Screaming Frog or DeepCrawl

• Internal links should all be 200 OK

• Flat site structure

POLEMIC

D I G I T A L@badams

Pagination

• Potential for massive crawl waste

Especially when combined with sorting

POLEMIC

D I G I T A L@badams

Optimise Paginated Lists

• Show more products per page

• Use pagination meta tags;<link rel="prev" href="http://www.domain.com/category/?page=2" />

<link rel="next" href="http://www.domain.com/category/?page=4" />

<link rel="canonical" href="http://www.domain.com/category/?page=all" />

Googlebot will deprioritise deeper paginated pages

• Block sorting parameters in robots.txt;User-agent: Googlebot

Disallow: /*?order=*

Noindex: /*?order=*

POLEMIC

D I G I T A L@badams

GSC Robots.txt Tester

POLEMIC

D I G I T A L@badams

Alternative: X-Robots-Tag

• Special HTTP status code intended for crawlers

• Implemented in Apache .htaccess file:

<FilesMatch ".pdf$">

Header set X-Robots-Tag "noindex, nofollow"

</FilesMatch>

More info: https://developers.google.com/webmasters/control-crawl-index/docs/robots_meta_tag

POLEMIC

D I G I T A L@badams

Faceted Navigation

• Risk of crawl waste & index inflation

POLEMIC

D I G I T A L@badams

Dealing with Faceted Navigation

1. Block facet URL parameters in robots.txt

User-agent: Googlebot

Disallow: /*attribute=*

Noindex: /*attribute=*

2. Tag facet links with “rel=nofollow”

POLEMIC

D I G I T A L@badams

JavaScript & Faceted Navigation

• ‘Hiding’ facets in JavaScript does not work

Google will execute JS and can follow embedded links

Don’t block JavaScript & CSS in robots.txt!

• JavaScript can add load time

Fast load speed is crucial

POLEMIC

D I G I T A L@badams

Optimise Load Speed

• Crawl budget = time

• Fast website = more pages crawled in same amount of time

POLEMIC

D I G I T A L@badams

WebPageTest.org

• Time to First Byte

• Lightweight pages

• Caching

• Compression

POLEMIC

D I G I T A L@badams

Code Bloat

POLEMIC

D I G I T A L@badams

Structured Data

• Schema.org markup

POLEMIC

D I G I T A L@badams

JSON-LD Markup

• In the <head> section

Separate from body code

Easier to implement

POLEMIC

D I G I T A L@badams

Google Tag Manager JSON-LD

• Use GTM data layer macros to inject JSON-LD schema.org code in your product pages

Source: http://www.swellpath.com/2015/03/7-steps-to-pushing-json-structured-data-using-google-tag-manager/

POLEMIC

D I G I T A L@badams

Structured Data Testing Tool

https://developers.google.com/structured-data/testing-tool/

POLEMIC

D I G I T A L@badams

Expired Pages

• Google’s advice: serve 404 Not Found

Downside: potential loss of link value

Source: https://www.youtube.com/watch?v=9tz7Eexwp_A

POLEMIC

D I G I T A L@badams

My Advice

• Keep the page up

POLEMIC

D I G I T A L@badams

High-churn Ecommerce

• Products with a limited lifespan, potentially thousands of new pages every week

Online auctions / ‘… for sale’ classified sites / etc

301-redirect old URL to most relevant new URL

Minimum 180 days

Serve 410 (or 404) on old URL after 180 days

POLEMIC

D I G I T A L@badams

Technical SEO forInternational Websites

POLEMIC

D I G I T A L@badams

International Domains

• Pick the right domain; Generic TLDs: .com, .org, .net, .info, …

ccTLDs: .co.uk, .ie, .de, .fr, .it, .nl, …

• Generic domains can be geo-targeted with Google Search Console

• Country-code domains will be assumed to target that countryIt’s almost impossible to get a .it website to rank in

google.co.uk

POLEMIC

D I G I T A L@badams

Google Search Console

POLEMIC

D I G I T A L@badams

Website Structure

• Subdirectories:

website.com/gb

website.com/it

• Subdomains:

gb.website.com

it.website.com

Verify separately in Google Search Console and set the geo-target

POLEMIC

D I G I T A L@badams

Country & Language

www.website.com/be-fr/

www.website.com/be-nl/

www.website.com/be-de/

Use official ISO country & language codes where possible

POLEMIC

D I G I T A L@badams

HTML Language Tag

• Use the ‘lang’ attribute:

• Don’t forget to change when you launch your international version!

POLEMIC

D I G I T A L@badams

HREFLANG Meta Tags

<link rel="alternate" href="http://example.com/en-ie"

hreflang="en-ie" />

<link rel="alternate" href="http://example.com/en-ca"

hreflang="en-ca" />

<link rel="alternate" href="http://example.com/en-au"

hreflang="en-au" />

<link rel="alternate" href="http://example.com/en"

hreflang="en" />

<link rel="alternate" href="http://example.com/" hreflang="x-

default" />

More info: https://support.google.com/webmasters/answer/189077

POLEMIC

D I G I T A L@badams

Google Search Console

POLEMIC

D I G I T A L@badams

Questions?

barry@polemicdigital.com

www.polemicdigital.com

@polemicdigital

@badams