Date post: | 21-Apr-2017 |
Category: |
Internet |
Upload: | barry-adams |
View: | 4,275 times |
Download: | 1 times |
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?
www.polemicdigital.com
@polemicdigital
@badams