overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
ツ
overdose.digital // @jasonmun // #smssyd18
Overdose Digital // Digital Commerce Agency
@jasonmun / jasonmun.com
https://overdose.digital
http://au.linkedin.com/in/jason-mun-8698a13
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
https://www.petstock.com.au/dog/food-1/dry-food
https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586
https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464
https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482
https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482/sort/name-a-to-z
https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482/sort/best-selling
https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482/sort/name-z-to-a
https://www.petstock.com.au/dog/food-1/dry-food/sort/name-z-to-a/page/2
https://www.petstock.com.au/dog/food-1/dry-food/sort/price-low/page/5
https://www.petstock.com.au/dog/food-1/dry-food/sort/best-selling/page/3
FacetedNavFiltersPagination
overdose.digital // @jasonmun // #smssyd18
• 108 different faceted options = 1,170,505,728 combos
• 7 sorting/filtering options
• 8 pages of products
1,170,505,728 x 7 x 8 = 65 billion URL combinations
This is only one product category!
overdose.digital // @jasonmun // #smssyd18
• NO canonical tags
• NO proper meta robots tag
• NO robots.txt blocks
• Impacts SEO performance
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
• Every website is allocated a set (finite) amount of crawl
budget
• Allocated based on technical capacity and popularity of
the site
• You want Google to crawl your important pages more
frequently – not crappy duplicated/thin pages
https://webmasters.googleblog.com/2017/01/what-crawl-budget-means-for-googlebot.html
overdose.digital // @jasonmun // #smssyd18
• Identify URL patterns for faceted navigation and filters
• Use robots.txt to control crawling
Disallow: /*/sort/*
Disallow: /*/filter/*
Disallow: /*mode=*
Disallow: /*manufacturer=*
• Use meta robots tag to control indexing
<meta name=”robots” content=”noindex,follow” />
https://www.contentkingapp.com/academy/control-crawl-indexing/
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
Homepage Category Sub-Category Faceted / Filtering Internal Search Result Pages
4 84 4 8
Crawl
&
Index
Crawl
&
Index
Crawl
&
Index
DO NOT
Crawl & Index
DO NOT
Crawl & Index
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
/collections/mens-footwear/products/vans-
vans-old-skool-mono-bumper-burgundy-white
/products/vans-vans-old-skool-mono-bumper-burgundy-white/collections/mens-footwear-lows/products/vans-vans-old-
skool-mono-bumper-burgundy-white
• Same product categorised in to multiple categories
• Unique URLs depending on click/crawl path
• Content is identical
overdose.digital // @jasonmun // #smssyd18
/au/clothing/shirts/botany-downs-
shirt/005359.html?dwvar_005359_color=VIOLET
&cgid=clothing-shirts#start=3
/au/clothing/shirts/botany-downs-shirt/005359-02.html/au/clothing/shirts/botany-downs-shirt/005359.html
• One product with multiple SKU options
• Every SKU option generates a unique URL
• Content is mostly identical except for colour swatch selection
overdose.digital // @jasonmun // #smssyd18
• It confuses the hell out of the bots
• No control over which version gets indexed and
displayed in SERPs
• If you are checking your SERPs in Google and notice the
message below, chances are you have some internal
duplicate content issue:
Source: Moz.com
overdose.digital // @jasonmun // #smssyd18
• Using advanced Google search queries
• Cherry pick a few product pages and run these queries
site:yourdomain.com.au inurl:product-url-key
OR
site:yourdomain.com.au intitle:product name
OR
site:yourdomain.com.au “snippet of content”
overdose.digital // @jasonmun // #smssyd18
GSC > Search Appearance > HTML Improvements > Duplicate Title Tags
overdose.digital // @jasonmun // #smssyd18
Deepcrawl.co.uk
overdose.digital // @jasonmun // #smssyd18
Screamingfrog.co.uk
overdose.digital // @jasonmun // #smssyd18
Sitebulb.com
overdose.digital // @jasonmun // #smssyd18
/products/vans-vans-old-skool-mono-bumper-burgundy-white
/collections/mens-footwear/products/vans-vans-old-skool-mono-
bumper-burgundy-white
/collections/mens-footwear-lows/products/vans-vans-old-skool-
mono-bumper-burgundy-white
/collections/sales/products/vans-vans-old-skool-mono-bumper-
burgundy-white
<link rel=“canonical”
href=“https://www.culturekings.com.au/products/vans-vans-old-
skool-mono-bumper-burgundy-white” />
<link rel=“canonical”
href=“https://www.culturekings.com.au/products/vans-vans-old-
skool-mono-bumper-burgundy-white” />
<link rel=“canonical”
href=“https://www.culturekings.com.au/products/vans-vans-old-
skool-mono-bumper-burgundy-white” />
DUPLICATE #1
DUPLICATE #2
DUPLICATE #3
CANONICAL VERSION
overdose.digital // @jasonmun // #smssyd18
/products/vans-vans-old-skool-mono-bumper-burgundy-white
/collections/mens-footwear/products/vans-vans-old-skool-mono-
bumper-burgundy-white
/collections/mens-footwear-lows/products/vans-vans-old-skool-
mono-bumper-burgundy-white
/collections/sales/products/vans-vans-old-skool-mono-bumper-
burgundy-white
<link rel=“canonical”
href=“https://www.culturekings.com.au/products/vans-vans-old-
skool-mono-bumper-burgundy-white” />
<link rel=“canonical”
href=“https://www.culturekings.com.au/products/vans-vans-old-
skool-mono-bumper-burgundy-white” />
<link rel=“canonical”
href=“https://www.culturekings.com.au/products/vans-vans-old-
skool-mono-bumper-burgundy-white” />
DUPLICATE #1
DUPLICATE #2
DUPLICATE #3
CANONICAL VERSION
overdose.digital // @jasonmun // #smssyd18
/products/vans-vans-old-skool-mono-bumper-burgundy-white
CANONICAL VERSION
Canonical
overdose.digital // @jasonmun // #smssyd18
/products/vans-vans-old-skool-mono-bumper-burgundy-white
CANONICAL VERSION
Canonical
overdose.digital // @jasonmun // #smssyd18
/products/vans-vans-old-skool-mono-bumper-burgundy-white
CANONICAL VERSION
overdose.digital // @jasonmun // #smssyd18
/products/vans-vans-old-skool-mono-bumper-burgundy-white
CANONICAL VERSION
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
• Common on all E-commerce websites
• Instead of showing all of your products at once, split it
across multiple pages
• Most of the time, these elements remain consistent:
Title Tag, Meta Description, H1, Text content
• Hint: Duplicates…Near Duplicates…??
overdose.digital // @jasonmun // #smssyd18
• Google launched the support of pagination tags –
rel=“next” and rel=“prev” in 2011
• It indicates to Google that “a collection of pages” are
part of the same paginated series
• Strong hint to Google to consolidate indexing properties
such as links
https://support.google.com/webmasters/answer/1663744?hl=en
overdose.digital // @jasonmun // #smssyd18
NEXT
PREV
NEXT
PREV
NEXT
PREV
/shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4
<link rel=”next” href=”https://site.com/shoes.htm?p=2”>
<link rel=”prev” href=”https://site.com/shoes.htm”>
<link rel=”next” href=”https://site.com/shoes.htm?p=3”>
<link rel=”prev” href=”https://site.com/shoes.htm?p=2”>
<link rel=”next” href=”https://site.com/shoes.htm?p=4”>
<link rel=”prev” href=”https://site.com/shoes.htm?p=3”>
overdose.digital // @jasonmun // #smssyd18
NEXT
PREV
NEXT
PREV
NEXT
PREV
/shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”next” href=”https://site.com/shoes.htm?p=2” />
<link rel=“canonical” href=“https://site.com/shoes.htm?p=2” />
<link rel=”prev” href=”https://site.com/shoes.htm” />
<link rel=”next” href=”https://site.com/shoes.htm?p=3” />
<link rel=“canonical” href=“https://site.com/shoes.htm?p=3” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=2” />
<link rel=”next” href=”https://site.com/shoes.htm?p=4” />
<link rel=“canonical” href=“https://site.com/shoes.htm?p=4” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=3” />
Self Canonical Self Canonical Self Canonical Self Canonical
overdose.digital // @jasonmun // #smssyd18
NEXT
PREV
NEXT
PREV
NEXT
PREV
/shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”next” href=”https://site.com/shoes.htm?p=2” />
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”prev” href=”https://site.com/shoes.htm” />
<link rel=”next” href=”https://site.com/shoes.htm?p=3” />
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=2” />
<link rel=”next” href=”https://site.com/shoes.htm?p=4” />
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=3” />
• Canonicalising back to page 1 throughout the paginated series
• Confuses Google, breaks the chain, only page 1 gets indexed
overdose.digital // @jasonmun // #smssyd18
NEXT
PREV
NEXT
PREV
NEXT
PREV
/shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”next” href=”https://site.com/shoes.htm?p=2” />
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=1” />
<link rel=”next” href=”https://site.com/shoes.htm?p=3” />
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=2” />
<link rel=”next” href=”https://site.com/shoes.htm?p=4” />
<link rel=“canonical” href=“https://site.com/shoes.htm” />
<link rel=”prev” href=”https://site.com/shoes.htm?p=3” />
• Page 2 rel=“prev” pointing to non-canonical version of page 1
• Confuses Google and breaks the chain
overdose.digital // @jasonmun // #smssyd18
Page 1
https://www.theathletesfoot.com.au/category-mens/mens-
run.html
Page 2
https://www.theathletesfoot.com.au/category-mens/mens-
run.html
Page 3
https://www.theathletesfoot.com.au/category-mens/mens-
run.html
Click to load more Click to load more
overdose.digital // @jasonmun // #smssyd18
Page 1
https://www.theathletesfoot.com.au/category-mens/mens-
run.html
Page 2
https://www.theathletesfoot.com.au/category-mens/mens-
run.html
Page 3
https://www.theathletesfoot.com.au/category-mens/mens-
run.html
Click to load more Click to load more
overdose.digital // @jasonmun // #smssyd18
Disable Javascript in your browser, if NO pagination links are
available – it is problem
Check source code for pagination tags
rel=“next” or rel=“prev”. If missing, it is a problem
overdose.digital // @jasonmun // #smssyd18
https://webmasters.googleblog.com/2014/02/infinite-scroll-search-friendly.html John Mueller’s example - http://scrollsample.appspot.com/items
overdose.digital // @jasonmun // #smssyd18
John Mueller’s example - http://scrollsample.appspot.com/items
• Chunk your content up in to pages (eg, 16 products per
page)
• Each chunk/page contains a full URL (eg, /shoes?page=2)
• Implement pagination tags in the <head>
• Implement replaceState/pushState on infinite scroll
page – URL changes as the user scrolls down for more
products
• Works with and without Javascript – users and bots are
happy!
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
awesomesauce.com.au awesomesauce.co.nz awesomesauce.co.uk
awesomesauce.com
awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/
overdose.digital // @jasonmun // #smssyd18
awesomesauce.com
awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/
Default website catering for “other” countries
Catered for AU users, unique
content and currency
Catered for NZ users, unique
content and currency
Catered for UK users, unique
content and currency
overdose.digital // @jasonmun // #smssyd18
awesomesauce.com
awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/
overdose.digital // @jasonmun // #smssyd18
awesomesauce.com
awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/
4
8 8 8
Google typically crawl from US
Google can only crawl the default website
Google CANNOT crawl these country
specific websites
Google CAN’T index what it CAN’T crawl
overdose.digital // @jasonmun // #smssyd18
• Google can only rank the website that it can crawl
• Country specific websites will struggle to rank
• VERY little traffic and low indexation
.com .com/au/
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
https://support.google.com/webmasters/answer/1061943?hl=en
• Exclude search engines from the redirect rule
• Make an exception based on user agents
• This will allow Googlebot to crawl and index all country
specific websites
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
https://webmasters.googleblog.com/2018/01/using-page-speed-in-mobile-search.html
overdose.digital // @jasonmun // #smssyd18
https://webmasters.googleblog.com/2018/01/using-page-speed-in-mobile-search.html
overdose.digital // @jasonmun // #smssyd18
https://developers.google.com/speed/pagespeed/insights/ https://gtmetrix.com/
overdose.digital // @jasonmun // #smssyd18
https://developers.google.com/web/tools/lighthouse/
overdose.digital // @jasonmun // #smssyd18
https://developers.google.com/speed/pagespeed/insights/ https://gtmetrix.com/
overdose.digital // @jasonmun // #smssyd18
Before – 907KB
After – 481KB
overdose.digital // @jasonmun // #smssyd18
Before – 907KB
After – 481KB
overdose.digital // @jasonmun // #smssyd18
We all know the best practices:
1. Choose the correct file type (jpg vs png vs gif)
2. “Save for Web” in Photoshop
3. Use lossless optimisation for JPG product images
4. Save images to reasonable dimensions (for responsive
scaling, etc)
Yet, so many e-commerce businesses fail to ensure images
are optimised…WHY?
Source: http://httparchive.org/
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
https://imagekit.io/ https://cloudinary.com/
• Optimise images at scale
• Future proof image optimisation moving forward
• Plus the power of a content delivery network for speed
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
Chrome > Developer Tools > Sources > Coverage
https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage
98% of this CSS file is
unused!
overdose.digital // @jasonmun // #smssyd18
Sitebulb.com
Check code coverage at scale while crawling the website
Export data for
developers
overdose.digital // @jasonmun // #smssyd18
BEFORE: AFTER:
overdose.digital // @jasonmun // #smssyd18
overdose.digital // @jasonmun // #smssyd18
• Spider Traps – faceted navigation + filters + pagination combo
• Control what bots consume on your website
• Internal duplicate content triggered by product pages
• Pagination tags – cannot break the chain
• Infinite scroll using pushState & pagination tags
• Avoid automatic IP redirect – exclude bots if required
• Improving PageSpeed
overdose.digital // @jasonmun // #smssyd18
Overdose Digital // Digital Commerce Agency
@jasonmun / jasonmun.com
https://overdose.digital
http://au.linkedin.com/in/jason-mun-8698a13
overdose.digital // @jasonmun // #smssyd18

Technical SEO for Ecommerce Websites

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    overdose.digital // @jasonmun// #smssyd18 Overdose Digital // Digital Commerce Agency @jasonmun / jasonmun.com https://overdose.digital http://au.linkedin.com/in/jason-mun-8698a13
  • 9.
  • 10.
  • 11.
  • 12.
    overdose.digital // @jasonmun// #smssyd18 https://www.petstock.com.au/dog/food-1/dry-food https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586 https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464 https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482 https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482/sort/name-a-to-z https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482/sort/best-selling https://www.petstock.com.au/dog/food-1/dry-food/filter/balanced-life-b-3586/bonnie-b-1464/canidae-b-1482/sort/name-z-to-a https://www.petstock.com.au/dog/food-1/dry-food/sort/name-z-to-a/page/2 https://www.petstock.com.au/dog/food-1/dry-food/sort/price-low/page/5 https://www.petstock.com.au/dog/food-1/dry-food/sort/best-selling/page/3 FacetedNavFiltersPagination
  • 13.
    overdose.digital // @jasonmun// #smssyd18 • 108 different faceted options = 1,170,505,728 combos • 7 sorting/filtering options • 8 pages of products 1,170,505,728 x 7 x 8 = 65 billion URL combinations This is only one product category!
  • 14.
    overdose.digital // @jasonmun// #smssyd18 • NO canonical tags • NO proper meta robots tag • NO robots.txt blocks • Impacts SEO performance
  • 15.
  • 16.
    overdose.digital // @jasonmun// #smssyd18 • Every website is allocated a set (finite) amount of crawl budget • Allocated based on technical capacity and popularity of the site • You want Google to crawl your important pages more frequently – not crappy duplicated/thin pages https://webmasters.googleblog.com/2017/01/what-crawl-budget-means-for-googlebot.html
  • 17.
    overdose.digital // @jasonmun// #smssyd18 • Identify URL patterns for faceted navigation and filters • Use robots.txt to control crawling Disallow: /*/sort/* Disallow: /*/filter/* Disallow: /*mode=* Disallow: /*manufacturer=* • Use meta robots tag to control indexing <meta name=”robots” content=”noindex,follow” /> https://www.contentkingapp.com/academy/control-crawl-indexing/
  • 18.
  • 19.
    overdose.digital // @jasonmun// #smssyd18 Homepage Category Sub-Category Faceted / Filtering Internal Search Result Pages 4 84 4 8 Crawl & Index Crawl & Index Crawl & Index DO NOT Crawl & Index DO NOT Crawl & Index
  • 20.
  • 21.
  • 22.
    overdose.digital // @jasonmun// #smssyd18 /collections/mens-footwear/products/vans- vans-old-skool-mono-bumper-burgundy-white /products/vans-vans-old-skool-mono-bumper-burgundy-white/collections/mens-footwear-lows/products/vans-vans-old- skool-mono-bumper-burgundy-white • Same product categorised in to multiple categories • Unique URLs depending on click/crawl path • Content is identical
  • 23.
    overdose.digital // @jasonmun// #smssyd18 /au/clothing/shirts/botany-downs- shirt/005359.html?dwvar_005359_color=VIOLET &cgid=clothing-shirts#start=3 /au/clothing/shirts/botany-downs-shirt/005359-02.html/au/clothing/shirts/botany-downs-shirt/005359.html • One product with multiple SKU options • Every SKU option generates a unique URL • Content is mostly identical except for colour swatch selection
  • 24.
    overdose.digital // @jasonmun// #smssyd18 • It confuses the hell out of the bots • No control over which version gets indexed and displayed in SERPs • If you are checking your SERPs in Google and notice the message below, chances are you have some internal duplicate content issue: Source: Moz.com
  • 25.
    overdose.digital // @jasonmun// #smssyd18 • Using advanced Google search queries • Cherry pick a few product pages and run these queries site:yourdomain.com.au inurl:product-url-key OR site:yourdomain.com.au intitle:product name OR site:yourdomain.com.au “snippet of content”
  • 26.
    overdose.digital // @jasonmun// #smssyd18 GSC > Search Appearance > HTML Improvements > Duplicate Title Tags
  • 27.
    overdose.digital // @jasonmun// #smssyd18 Deepcrawl.co.uk
  • 28.
    overdose.digital // @jasonmun// #smssyd18 Screamingfrog.co.uk
  • 29.
    overdose.digital // @jasonmun// #smssyd18 Sitebulb.com
  • 30.
    overdose.digital // @jasonmun// #smssyd18 /products/vans-vans-old-skool-mono-bumper-burgundy-white /collections/mens-footwear/products/vans-vans-old-skool-mono- bumper-burgundy-white /collections/mens-footwear-lows/products/vans-vans-old-skool- mono-bumper-burgundy-white /collections/sales/products/vans-vans-old-skool-mono-bumper- burgundy-white <link rel=“canonical” href=“https://www.culturekings.com.au/products/vans-vans-old- skool-mono-bumper-burgundy-white” /> <link rel=“canonical” href=“https://www.culturekings.com.au/products/vans-vans-old- skool-mono-bumper-burgundy-white” /> <link rel=“canonical” href=“https://www.culturekings.com.au/products/vans-vans-old- skool-mono-bumper-burgundy-white” /> DUPLICATE #1 DUPLICATE #2 DUPLICATE #3 CANONICAL VERSION
  • 31.
    overdose.digital // @jasonmun// #smssyd18 /products/vans-vans-old-skool-mono-bumper-burgundy-white /collections/mens-footwear/products/vans-vans-old-skool-mono- bumper-burgundy-white /collections/mens-footwear-lows/products/vans-vans-old-skool- mono-bumper-burgundy-white /collections/sales/products/vans-vans-old-skool-mono-bumper- burgundy-white <link rel=“canonical” href=“https://www.culturekings.com.au/products/vans-vans-old- skool-mono-bumper-burgundy-white” /> <link rel=“canonical” href=“https://www.culturekings.com.au/products/vans-vans-old- skool-mono-bumper-burgundy-white” /> <link rel=“canonical” href=“https://www.culturekings.com.au/products/vans-vans-old- skool-mono-bumper-burgundy-white” /> DUPLICATE #1 DUPLICATE #2 DUPLICATE #3 CANONICAL VERSION
  • 32.
    overdose.digital // @jasonmun// #smssyd18 /products/vans-vans-old-skool-mono-bumper-burgundy-white CANONICAL VERSION Canonical
  • 33.
    overdose.digital // @jasonmun// #smssyd18 /products/vans-vans-old-skool-mono-bumper-burgundy-white CANONICAL VERSION Canonical
  • 34.
    overdose.digital // @jasonmun// #smssyd18 /products/vans-vans-old-skool-mono-bumper-burgundy-white CANONICAL VERSION
  • 35.
    overdose.digital // @jasonmun// #smssyd18 /products/vans-vans-old-skool-mono-bumper-burgundy-white CANONICAL VERSION
  • 36.
  • 37.
    overdose.digital // @jasonmun// #smssyd18 • Common on all E-commerce websites • Instead of showing all of your products at once, split it across multiple pages • Most of the time, these elements remain consistent: Title Tag, Meta Description, H1, Text content • Hint: Duplicates…Near Duplicates…??
  • 38.
    overdose.digital // @jasonmun// #smssyd18 • Google launched the support of pagination tags – rel=“next” and rel=“prev” in 2011 • It indicates to Google that “a collection of pages” are part of the same paginated series • Strong hint to Google to consolidate indexing properties such as links https://support.google.com/webmasters/answer/1663744?hl=en
  • 39.
    overdose.digital // @jasonmun// #smssyd18 NEXT PREV NEXT PREV NEXT PREV /shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4 <link rel=”next” href=”https://site.com/shoes.htm?p=2”> <link rel=”prev” href=”https://site.com/shoes.htm”> <link rel=”next” href=”https://site.com/shoes.htm?p=3”> <link rel=”prev” href=”https://site.com/shoes.htm?p=2”> <link rel=”next” href=”https://site.com/shoes.htm?p=4”> <link rel=”prev” href=”https://site.com/shoes.htm?p=3”>
  • 40.
    overdose.digital // @jasonmun// #smssyd18 NEXT PREV NEXT PREV NEXT PREV /shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4 <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”next” href=”https://site.com/shoes.htm?p=2” /> <link rel=“canonical” href=“https://site.com/shoes.htm?p=2” /> <link rel=”prev” href=”https://site.com/shoes.htm” /> <link rel=”next” href=”https://site.com/shoes.htm?p=3” /> <link rel=“canonical” href=“https://site.com/shoes.htm?p=3” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=2” /> <link rel=”next” href=”https://site.com/shoes.htm?p=4” /> <link rel=“canonical” href=“https://site.com/shoes.htm?p=4” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=3” /> Self Canonical Self Canonical Self Canonical Self Canonical
  • 41.
    overdose.digital // @jasonmun// #smssyd18 NEXT PREV NEXT PREV NEXT PREV /shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4 <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”next” href=”https://site.com/shoes.htm?p=2” /> <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”prev” href=”https://site.com/shoes.htm” /> <link rel=”next” href=”https://site.com/shoes.htm?p=3” /> <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=2” /> <link rel=”next” href=”https://site.com/shoes.htm?p=4” /> <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=3” /> • Canonicalising back to page 1 throughout the paginated series • Confuses Google, breaks the chain, only page 1 gets indexed
  • 42.
    overdose.digital // @jasonmun// #smssyd18 NEXT PREV NEXT PREV NEXT PREV /shoes.htm /shoes.htm?p=2 /shoes.htm?p=3 /shoes.htm?p=4 <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”next” href=”https://site.com/shoes.htm?p=2” /> <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=1” /> <link rel=”next” href=”https://site.com/shoes.htm?p=3” /> <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=2” /> <link rel=”next” href=”https://site.com/shoes.htm?p=4” /> <link rel=“canonical” href=“https://site.com/shoes.htm” /> <link rel=”prev” href=”https://site.com/shoes.htm?p=3” /> • Page 2 rel=“prev” pointing to non-canonical version of page 1 • Confuses Google and breaks the chain
  • 43.
    overdose.digital // @jasonmun// #smssyd18 Page 1 https://www.theathletesfoot.com.au/category-mens/mens- run.html Page 2 https://www.theathletesfoot.com.au/category-mens/mens- run.html Page 3 https://www.theathletesfoot.com.au/category-mens/mens- run.html Click to load more Click to load more
  • 44.
    overdose.digital // @jasonmun// #smssyd18 Page 1 https://www.theathletesfoot.com.au/category-mens/mens- run.html Page 2 https://www.theathletesfoot.com.au/category-mens/mens- run.html Page 3 https://www.theathletesfoot.com.au/category-mens/mens- run.html Click to load more Click to load more
  • 45.
    overdose.digital // @jasonmun// #smssyd18 Disable Javascript in your browser, if NO pagination links are available – it is problem Check source code for pagination tags rel=“next” or rel=“prev”. If missing, it is a problem
  • 46.
    overdose.digital // @jasonmun// #smssyd18 https://webmasters.googleblog.com/2014/02/infinite-scroll-search-friendly.html John Mueller’s example - http://scrollsample.appspot.com/items
  • 47.
    overdose.digital // @jasonmun// #smssyd18 John Mueller’s example - http://scrollsample.appspot.com/items • Chunk your content up in to pages (eg, 16 products per page) • Each chunk/page contains a full URL (eg, /shoes?page=2) • Implement pagination tags in the <head> • Implement replaceState/pushState on infinite scroll page – URL changes as the user scrolls down for more products • Works with and without Javascript – users and bots are happy!
  • 48.
  • 49.
  • 50.
    overdose.digital // @jasonmun// #smssyd18 awesomesauce.com.au awesomesauce.co.nz awesomesauce.co.uk awesomesauce.com awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/
  • 51.
    overdose.digital // @jasonmun// #smssyd18 awesomesauce.com awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/ Default website catering for “other” countries Catered for AU users, unique content and currency Catered for NZ users, unique content and currency Catered for UK users, unique content and currency
  • 52.
    overdose.digital // @jasonmun// #smssyd18 awesomesauce.com awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/
  • 53.
    overdose.digital // @jasonmun// #smssyd18 awesomesauce.com awesomesauce.com/au/ awesomesauce.com/nz/ awesomesauce.com/uk/ 4 8 8 8 Google typically crawl from US Google can only crawl the default website Google CANNOT crawl these country specific websites Google CAN’T index what it CAN’T crawl
  • 54.
    overdose.digital // @jasonmun// #smssyd18 • Google can only rank the website that it can crawl • Country specific websites will struggle to rank • VERY little traffic and low indexation .com .com/au/
  • 55.
  • 56.
  • 57.
    overdose.digital // @jasonmun// #smssyd18 https://support.google.com/webmasters/answer/1061943?hl=en • Exclude search engines from the redirect rule • Make an exception based on user agents • This will allow Googlebot to crawl and index all country specific websites
  • 58.
  • 59.
  • 60.
    overdose.digital // @jasonmun// #smssyd18 https://webmasters.googleblog.com/2018/01/using-page-speed-in-mobile-search.html
  • 61.
    overdose.digital // @jasonmun// #smssyd18 https://webmasters.googleblog.com/2018/01/using-page-speed-in-mobile-search.html
  • 62.
    overdose.digital // @jasonmun// #smssyd18 https://developers.google.com/speed/pagespeed/insights/ https://gtmetrix.com/
  • 63.
    overdose.digital // @jasonmun// #smssyd18 https://developers.google.com/web/tools/lighthouse/
  • 64.
    overdose.digital // @jasonmun// #smssyd18 https://developers.google.com/speed/pagespeed/insights/ https://gtmetrix.com/
  • 65.
    overdose.digital // @jasonmun// #smssyd18 Before – 907KB After – 481KB
  • 66.
    overdose.digital // @jasonmun// #smssyd18 Before – 907KB After – 481KB
  • 67.
    overdose.digital // @jasonmun// #smssyd18 We all know the best practices: 1. Choose the correct file type (jpg vs png vs gif) 2. “Save for Web” in Photoshop 3. Use lossless optimisation for JPG product images 4. Save images to reasonable dimensions (for responsive scaling, etc) Yet, so many e-commerce businesses fail to ensure images are optimised…WHY? Source: http://httparchive.org/
  • 68.
  • 69.
    overdose.digital // @jasonmun// #smssyd18 https://imagekit.io/ https://cloudinary.com/ • Optimise images at scale • Future proof image optimisation moving forward • Plus the power of a content delivery network for speed
  • 70.
  • 71.
    overdose.digital // @jasonmun// #smssyd18 Chrome > Developer Tools > Sources > Coverage https://developers.google.com/web/updates/2017/04/devtools-release-notes#coverage 98% of this CSS file is unused!
  • 72.
    overdose.digital // @jasonmun// #smssyd18 Sitebulb.com Check code coverage at scale while crawling the website Export data for developers
  • 73.
    overdose.digital // @jasonmun// #smssyd18 BEFORE: AFTER:
  • 74.
  • 75.
    overdose.digital // @jasonmun// #smssyd18 • Spider Traps – faceted navigation + filters + pagination combo • Control what bots consume on your website • Internal duplicate content triggered by product pages • Pagination tags – cannot break the chain • Infinite scroll using pushState & pagination tags • Avoid automatic IP redirect – exclude bots if required • Improving PageSpeed
  • 76.
    overdose.digital // @jasonmun// #smssyd18 Overdose Digital // Digital Commerce Agency @jasonmun / jasonmun.com https://overdose.digital http://au.linkedin.com/in/jason-mun-8698a13
  • 77.