@Rob Bertholf
Technical SEO __
@Rob on...
@Rob Bertholf
WiFi Access
Login:
________
Password:
________
@Rob Bertholf
@Rob
HELLOmy name is
@Rob Bertholf
@Rob’s Experience
@Rob Bertholf
@Rob’s Geek Cred
@Rob
WordPress
Plugin
Developer
<>
#IRC Operator
@Zeppo
Former
Board of
Directors
Information Management
Staff Sergeant
US Air Force
Software as a Service
Architect / Growth Hacker
CC Creative
Commons
Contributor
Wikipedia
Editor
PATENT APPLICATION
#US20060294199
Systems &
Methods for a
Standard Web
Platform
@Rob Bertholf
Search Engine Optimization Expert
Google Search Engine Optimization Expert
@Rob Bertholf | Search Engine Optimization Expert
rob.bertholf.com
Hi, I’m @Rob on Twitter. California guy living in
Honolulu, Hawaii the last 10 years. I teach at
University of Hawaii’s PNM program and I am
passionate about Development, Social Marketing
Strategy, Web Analytics & Conversion optimization.
Search engine optimization - Wikipedia
en.wikipedia.org/wiki/Search_engine_optimization
About 22,500,000 Results
@Rob Bertholf
Get Social! #UHPNM
Pacific New Media
@pacificnewmedia
Follow @PacificNewMedia
Excited to speak at #Clarity15
on #SEO #KPI’s & Reporting!
Rob Bertholf
@Rob
Follow @Rob
Excited to speak at #UHPNM
on #SEO & #ContentMarketing!
@Rob Bertholf
Introductions
:)
HELLOyour name is
1) Name
2) Industry
3) Takeaway
@Rob Bertholf
● How can we improve the search experience for
our visitors while serving up our content in the
most effective way for a search engine to
consume it
● What are the technical aspects search engines
look at
Desired Takeaways
@Rob Bertholf
Search Engine
Codependency
Meeting mutually beneficial needs
@Rob Bertholf
Google - Browser
http://www.google.com
Search Engine
Google
@Rob Bertholf
Search Engines
Query their Index for
Search Results
Google
@Rob Bertholf
The Index is the
result of Spiders
“Crawling” the Internet
@Rob Bertholf
cache:cat.html
Cat Page - Chrome
cat.html
Meow.
Cat Page - Chrome
cat.jpg
Meow.
Cat
Spiders SeeHumans See
Cached View
@Rob Bertholf
view-source:cat.html
Cat Page - Chrome
cat.html
Meow.
Cat Page - Chrome
cat.jpg
<html>
<head>
<title>Cat Page</title>
</head>
<body>
<h1>Meow.</h1>
<img src=”cat.jpg” alt=”Cat” />
</body>
</html>
Humans See Spiders See
HTML Source
@Rob Bertholf
HTML:
Hypertext
Markup
Language
<html>
<head>
<title>My Page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
mypage.html
@Rob Bertholf
Anatomy of an HTML Document
<!DOCTYPE>
<html>
<head>
<title>Cat Page</title>
<meta />
<script></script>
</head>
<body>
<h1>Meow.</h1>
<img src=”cat.jpg” />
</body>
</html>
Cat Page - Chrome
cat.html
Meow.
@Rob Bertholf
My Page - Browser
mypage.html
Hello World!
Click Here for Cats!
Hyperlinks are
fundamental
to HTML
& the web
@Rob Bertholf
cat.html
My Page - Browser
mypage.html
Hello World!
Click Here for Cats!
Meow.
Cats - Browser
cat.jpg
Hyperlink
Spiders Crawl Hyperlinks
@Rob Bertholf
Likely to be indexed
Likely to be indexed
NOT likely to be indexed
About
Products
Homepage
Contact
Internal
Linking
@Rob Bertholf
Likely to be indexed
Likely to be indexed
NOT likely to be indexed
About
Products
Homepage
Contact
<a href=”cars.html” title=”Page about Cars”>Cars</a>
Internal Linking
@Rob Bertholf
Spiders must
see (& trust)
your content
to index it!
Avoid:
● Frames / iframes
● AJAX single page sites
● Unparsable javascript
● Flash, java or plugins
● Text in Images
@Rob Bertholf
HTML Sitemaps
Good for Humans
Great for Robots
@Rob Bertholf
Good for Humans
Great for Robots
HTML Sitemaps
@Rob Bertholf
XML Sitemaps
@Rob Bertholf
XML Sitemaps
@Rob Bertholf
Sitemaps and Sitemap Indexes
Sitemap files can contain up to 50,000 URLs in
each sitemap. For large sites you need to break
URLs up over several sitemaps.
If you have more than one sitemap, you will need
a sitemap index.
@Rob Bertholf
XML Sitemap (Index)
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>
http://www.domain.com/pages.xml
</loc>
<lastmod>2015-07-19</lastmod>
</sitemap>
<sitemap>
<loc>
http://www.domain.com/products.xml
</loc>
<lastmod>2015-07-19</lastmod>
</sitemap>
@Rob Bertholf
XML Sitemap
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>
http://www.domain.com/some-page/
</loc>
<lastmod>2015-07-19</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
@Rob Bertholf
Homepage
About
Services
Hidden
Please DO
NOT INDEX
What about
intentionally
hidden pages?
@Rob Bertholf
Tells User Agents how to treat the page
<meta name="robots" content="NOINDEX">
...or manage multiple rules in the robots.txt file
Meta NoIndex
@Rob Bertholf
The Robots
Whisperer
Control crawl via robots.txt
@Rob Bertholf
Robots.txt
@Rob Bertholf
Robots.txt
Tells User Agents how to treat the site.
Allow
Disallow
@Rob Bertholf
Robots.txt
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
@Rob Bertholf
Mozilla/5.0 (compatible; Googlebot/2.1;
+http://www.google.com/bot.html)
User Agents
User-Agent: Googlebot
Allow: /
@Rob Bertholf
Google’s User Agents
Googlebot
Googlebot-News
Googlebot-Images
Googlebot-Mobile
Mediapartners-Google
AdsBot-Google
@Rob Bertholf
International User Agents
Do we need international search engines crawling
and indexing our site?
@Rob Bertholf
Server Response
Codes
@Rob Bertholf
Server Codes
● 1xx: Information
● 2xx: Successful
● 3xx: Redirect
● 4xx: Client Error
● 5xx: Server Error
@Rob Bertholf
Server Request: OK
200 Code
@Rob Bertholf
Permanent Redirect
301 Code
@Rob Bertholf
Temporary Redirect
302 Code
@Rob Bertholf
Not Found
404 Code
?
@Rob Bertholf
Internal Server Error
500 Code
WT@#$%
@Rob Bertholf
Gateway Timeout
504 Code
?
@Rob Bertholf
Crawl Time is
Limited
@Rob Bertholf
Broken Links &
Images Slow
The Crawl
404 Error
@Rob Bertholf
Website Cleanup
Billy, clean your room!
@Rob Bertholf
1. Manually Finding Missing Pages
In Google just type “site:yourdomain.com” to
return a list of pages in your website that Google
has in their index.
Check for pages which are no longer valid or that
should not appear publicly.
site:yourdomain.comGoogle Search
@Rob Bertholf
2. Use Google Search Console
Cat Page - Chrome
https://www.google.com/webmasters/tools/crawl-errors
Google Search Console
URL Errors Desktop Smartphone Feature Phone
Server Error Soft 404 Not Found OtherNot Followed
@Rob Bertholf
3. Run a Crawl Report w/
URL
Long
URL
Dynamic
URL
4XX
Error
5XX
Error
301
Code
302
Code
Meta
Refresh
No
follow
Block
robots
Block
meta-
robots
/ (Homepage) FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/help/shipping FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
/policies-and-programs FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/help/policy FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
/tonneau-covers/10A50174.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/brakes/10A50530.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/seat-covers/10A52289.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/suspension-systems/10A504... FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
@Rob Bertholf
Redirecting Pages
Why redirect a page?
@Rob Bertholf
Fixing Broken Link on Website
/old-page.html /new-page/
404 Error
Add to your .htaccess file:
Redirect 301 /old-page.html http://yourdomain.com/new-page/
@Rob Bertholf
Redirecting to or from http://WWW.
http://mydomain.com http://www.mydomain.com
WWW.
Add to your .htaccess file:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
@Rob Bertholf
Redirecting to new domain
http://olddomain.com http://newdomain.com
Add to your .htaccess file:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^olddomain.com$ [NC]
RewriteRule ^(.*)$ http://newdomain.com/$1 [R=301,L]
@Rob Bertholf
WordPress Rewrites
index.php?id=2 /my-path/
Add to your .htaccess file:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
@Rob Bertholf
Other Types of Redirects
Note: There are other ways to redirect pages using
Javascript, ASP, PHP, etc.
THESE ARE NOT RECOMMENDED!
They feel spammy to the search engines.
Use 301 Redirects in your HTACCESS file (If on
Apache).
@Rob Bertholf
Editing your
HTACCESS file
@Rob Bertholf
What is HTACCESS?
.htaccess files (or “distributed configuration files”) provide
a way to make configuration changes on a per-directory
basis. A file, containing one or more configuration
directives, is placed in a particular document directory,
and the directives apply to that directory, and all
subdirectories thereof.
- via Apache
@Rob Bertholf
What is HTACCESS?
The file you edit to manage redirects (and how page paths
are handled).
@Rob Bertholf
Find or Create the File
You will want to edit it with a plain text editor
(notepad or similar, I like “Sublime Text” editor).
If the file is not there you can create one. Just
name it: “.htaccess”
@Rob Bertholf
WordPress “Redirection” Plugin
If you are using WordPress you can use a plugin
to manage your redirects. This is not as powerful
but is easier to use.
https://wordpress.org/plugins/redirection/
@Rob Bertholf
RegEx
(Regular Expression)
Working Smarter not Harder with
Pattern Matching
@Rob Bertholf
Character Classes
. any character except newline
w d s word, digit, whitespace
W D S not word, digit, whitespace
[abc] any of a, b, or c
[^abc] not a, b, or c
[a-g] character between a & g
@Rob Bertholf
Anchors
^abc$ start / end of the string
b word boundary
@Rob Bertholf
Escaped Characters
. *  escaped special characters
t n r tab, linefeed, carriage return
u00A9 unicode escaped ©
@Rob Bertholf
Groups & Lookaround
(abc) capture group
1 backreference to group #1
(?:abc) non-capturing group
(?=abc) positive lookahead
(?!abc) negative lookahead
@Rob Bertholf
Quantifiers & Alternation
a* a+ a? 0 or more, 1 or more, 0 or 1
a{5} a{2,} exactly five, two or more
a{1,3} between one & three
a+? a{2,}? match as few as possible
ab|cd match ab or cd
@Rob Bertholf
Site is clean…
now how to
determine Context &
Authority
@Rob Bertholf
The role of the
Technical SEO is to
make it easy to crawl
the site & also provide
contextual info
@Rob Bertholf
How to
determine
context?
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nunc viverra velit ex, nec placerat lorem suscipit et.
Pellentesque condimentum lectus at venenatis tincidunt.
Donec at ex nec ante pharetra suscipit a non nunc.
Curabitur velit quam, pharetra sed convallis non, volutpat
mattis urna. Sed et urna suscipit, sagittis libero nec, viverra
metus. Fusce congue massa in dapibus bibendum. Proin
bibendum augue et nulla iaculis, non porta lorem tempus.
Suspendisse vitae elementum nisi, vel tempus lorem. In
luctus orci sed finibus viverra. Etiam semper sit amet ante
eu ullamcorper. Sed tempus, elit ac convallis suscipit,
metus elit iaculis ante, sit amet pellentesque turpis justo sit
amet mauris. Sed fermentum condimentum turpis id
ultrices.
@Rob Bertholf
Context
applied
from
<tags>
<h1>Lorem ipsum</h1>
Dlor sit amet, consectetur adipiscing elit. Nunc viverra velit ex,
nec placerat lorem suscipit et. Pellentesque condimentum
lectus at venenatis tincidunt. Donec at ex nec ante pharetra
suscipit a non nunc.
<h2>Curabitur velit quam</h2>
Paretra sed convallis non, volutpat mattis urna. Sed et urna
suscipit, sagittis libero nec, viverra metus. Fusce congue massa
in dapibus bibendum.
<h2>Proin bibendum augue</h2>
Et nulla iaculis, non porta lorem tempus. Suspendisse suscipit,
metus elit iaculis ante, sit amet pellentesque elementum
nisi, <strong>tempus lorem</strong> In luctus orci sed
finibus viverra. Etiam semper sit amet ante eu ullamcorper. Sed
tempus, elit ac convallis turpis justo sit amet mauris. Sed
fermentum condimentum turpis id ultrices.
@Rob Bertholf
HTML Tags
● Heading <h1> <h2> <h3> <h4> <h5> <h6>
● Bold <strong>
● Image Alternate <img alt=”value”>
● Link Title <a title=”value”>
@Rob Bertholf
Context
from
Page Title
<title>Lorem ipsum</title>
Lorem Ipsum - Chrome
cat.html
Meow.
<!DOCTYPE>
<html>
<head>
@Rob Bertholf
Page Title
● Keep the page title less than 65 characters
● Ensure the title grabs your attention
Home
domain1.com
This is a description of the page.
Search Term - Free Shipping!
domain2.com
This is a description of the page.
@Rob Bertholf
Lorem Ipsum - Chrome
http://distraction.com/pets/cat.html
Meow.
Context
from
URL
domain.tld/sub-folder/page
@Rob Bertholf
Search Friendly URLs
Keyword in Domain Relevant Keyword
in Subfolder
Keyword in page name
separated by hyphen
www.distraction.com/pets/playful-cats.html
@Rob Bertholf
UN-Search Friendly URLs
Unnecessary
Subdomain
Dynamic URLs (especially
with more than 2 parameters)
Not readable URL string
123xyz.distr-action.com/a?q=abc&x=yxz&p=1
@Rob Bertholf
Lorem Ipsum - Chrome
cat.html
Learn about Cats
Context
from
referring
Hypertext
<a href=”page.html”
title=”Page about
Cats”>Cats</a>
@Rob Bertholf
Hypertext
<a href=”page.html”>Click Here</a> for Cats
Click Here for <a href=”page.html”>Cats</a>
@Rob Bertholf
NOT SEO Factors
● Meta Keywords
● Meta Description
<meta name="keywords" content="Obsolete">
<meta name="keywords" content="This is only
used to customize what appears in the
search engine results page for your listing.">
@Rob Bertholf
Pruning Content
(Not all content should
be indexed)
@Rob Bertholf
Duplicate Content
Identifies Duplicate Content
Determine Original Version
<link rel=”canonical”
href=”http://site.com/url.html” />
@Rob Bertholf
rel=”canonical”
Copied Version
partnersite.com/article
Canonical Version
yoursite.com/article
Duplicate Version
yoursite.com/article?mode=print
@Rob Bertholf
rel=”prev/next”
Page 3
Page 2
yoursite.com/article?page=2
Page 1
yoursite.com/article?page=1 yoursite.com/article?page=3
<link rel="prev" href="http://yoursite.com/article?page=1" />
<link rel="next" href="http://yoursite.com/article?page=3" />
@Rob Bertholf
Link Sculpting
Website
About
Services
Privacy
Policy
External
Link
@Rob Bertholf
Link Sculpting
Overall, this is a tactic which is no longer a tactic.
Still useful on Privacy Policy / Terms of Use which
should not be followed or indexed by the search
engines.
<a href="/login" rel="nofollow">Login</a>
@Rob Bertholf
Link Sculpting: NoFollow
Google recommends Rel=NoFollow on any paid
links or external links going to untrusted sites.
<a href="http://externalsite.com"
rel="nofollow">Sponsored Link</a>
@Rob Bertholf
Other Link Directives
noarchive: Don’t show a "Cached" link in search results.
nosnippet: Don’t show a snippet in the search results for this page
noodp: Don’t use metadata from Open Directory project for titles or snippets.
notranslate: Don’t offer translation of this page in search results.
noimageindex: Don’t index images on this page.
unavailable_after: Don’t show this page after the specified date/time.
@Rob Bertholf
Let’s Get Back
to Context
@Rob Bertholf
Web 1.0
Article Person
Song Book
Portal
@Rob Bertholf
Article Person
Song
Book
Collaborate
Connect & Share
Review
Discuss
Collaboration
Web 2.0
@Rob Bertholf
Article Person
Song Book
written by
is loved by
references
inspired by
isreading
discussed
in
Context
Web 3.0
@Rob Bertholf
Semantic Web User Interface & Applications
Trust
Crypto
URI / IRI
XML
Data Interchange:RDF
Rules:
RIF
RDF-S
Unifying Logic
Ontology: OWLQuery:
SPARQL
Proof
Unicode
@Rob Bertholf
JSON Markup: Organization
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"url": "http://www.yourdomain.com",
"logo": "http://yourdomain.com/somelogo.png",
"contactPoint" : [
{ "@type" : "ContactPoint",
"telephone" : "+1-800-123-4567",
"contactType" : ["Sales","Customer Service"],
"contactOption" : "TollFree",
"areaServed" : "US",
"availableLanguage" : ["English", "Spanish"]
} ],
@Rob Bertholf
JSON Markup: Organization
"sameAs" : [
"https://www.facebook.com/yourbrand",
"https://twitter.com/yourbrand",
"http://plus.google.com/+yourbrand",
"https://www.youtube.com/user/yourbrand",
"https://www.pinterest.com/yourbrand/",
"https://instagram.com/yourbrand/",
"http://en.wikipedia.org/wiki/yourbrand",
"https://www.linkedin.com/company/yourbrand"
]
}
</script>
@Rob Bertholf
JSON Markup: Website
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "http://www.domain.com",
“name”: “Your Brand”,
"potentialAction": {
"@type": "SearchAction",
"target": "http://www.domain.com/shop/{search_term_string}",
"query-input": "required name=search_term_string"
}
}
</script>
@Rob Bertholf
Product Schema
<div itemscope itemtype="http://schema.org/Product">
<span itemprop="brand">{{Product Manufacturer}}</span>
<span itemprop="name">{{Product Name}}</span>
<img itemprop="image" src="{{Product Image Filename}}" alt="{{Product Name}}"
/>
<span itemprop="description">{{ProductDescription}}</span>
Product #: <span itemprop="mpn">{{Product ID}}</span>
<span itemprop="aggregateRating" itemscope
itemtype="http://schema.org/AggregateRating">
<span itemprop="ratingValue">{{Review Rating|4.4}}</span> stars,
based on <span itemprop="reviewCount">{{Review Count|89}}</span> reviews
</span>
</div>
@Rob Bertholf
Rating Schema
<div itemscope itemtype="http://schema.org/Review">
<div itemprop="itemReviewed" itemscope itemtype="http://schema.org/Product">
<span itemprop="name">{{Product Name}}</span>
</div>
<span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
<meta itemprop="bestRating" content="{{Review Rating|5}}" />
<meta itemprop="worstRating" content="{{Review Rating|1}}" />
<span itemprop="ratingValue">{{Review Rating|4}}</span>
</span> stars
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
<span itemprop="name">{{First L}}</span>
</span>
<b>"<span itemprop="name">{{Review Title}}</span>" </b>
<span itemprop="reviewBody">{{Review Text}}</span>
<meta itemprop="datePublished" content="2015-03-31T08:06:00" />
</div>
@Rob Bertholf
Breadcrumb Markup
<ul class="breadcrumb inline clearfix">
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a title="Home" href="/" itemprop="url"><span itemprop="title">Home</span></a>
</li>
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="/store" itemprop="url"><span itemprop="title">Store</span></a>
</li>
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="/store/shoes" itemprop="url"><span itemprop="title">Shoes</span></a>
</li>
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<span itemprop="title">Running Shoe</span>
</li>
</ul>
@Rob Bertholf
https://developers.google.com/structured-data/testing-tool/
@Rob Bertholf
Tools __
@Rob Bertholf
What I Pay For
● Currently
○ Moz (https://moz.com/)
○ AHREFs (https://ahrefs.com/)
○ Screaming Frog (http://www.screamingfrog.co.uk/seo-spider/)
○ Link Assistant’s Rank Tracker (http://www.link-assistant.com/rank-tracker/)
● Previously
○ seoClarity, MagesticSEO, WebCEO,
LinkResearchTools
@Rob Bertholf
Webmaster Tools
@Rob Bertholf
Test drive… vroom.
Google Webmaster
Tools Search Console
@Rob Bertholf
+ Google Search Console Data
Google Search Console - Chrome
https://www.google.com/webmasters/tools/crawl-errors
Google Search Console
URL Errors Desktop Smartphone Feature Phone
Server Error Soft 404 Not Found OtherNot Followed
@Rob Bertholf
Test drive… vroom.
Bing Webmaster
Tools
@Rob Bertholf
+ Crawl Data via
URL
Long
URL
Dynamic
URL
4XX
Error
5XX
Error
301
Code
302
Code
Meta
Refresh
No
follow
Block
robots
Block
meta-
robots
/ (Homepage) FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/help/shipping FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
/policies-and-programs FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/help/policy FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
/tonneau-covers/10A50174.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/brakes/10A50530.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/seat-covers/10A52289.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
/suspension-systems/10A504... FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
@Rob Bertholf
Noticeably Absent
● International / Multilingual Tactics
● Mobile Sitemap & Canonical, Viewport
● Social Integration (FB: OG, etc.)
@Rob Bertholf
Questions?
@Rob
Rob@Bertholf.com
@Rob Bertholf
Recap __
@Rob Bertholf
Questions?
@Rob Bertholf
Thank you!
@rob
rob@bertholf.com
@Rob Bertholf
What were your thoughts?
Please tweet:
“Just finished #SEO course with @Rob.
It was _________”

Technical SEO Factors

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
    @Rob Bertholf @Rob’s GeekCred @Rob WordPress Plugin Developer <> #IRC Operator @Zeppo Former Board of Directors Information Management Staff Sergeant US Air Force Software as a Service Architect / Growth Hacker CC Creative Commons Contributor Wikipedia Editor PATENT APPLICATION #US20060294199 Systems & Methods for a Standard Web Platform
  • 6.
    @Rob Bertholf Search EngineOptimization Expert Google Search Engine Optimization Expert @Rob Bertholf | Search Engine Optimization Expert rob.bertholf.com Hi, I’m @Rob on Twitter. California guy living in Honolulu, Hawaii the last 10 years. I teach at University of Hawaii’s PNM program and I am passionate about Development, Social Marketing Strategy, Web Analytics & Conversion optimization. Search engine optimization - Wikipedia en.wikipedia.org/wiki/Search_engine_optimization About 22,500,000 Results
  • 7.
    @Rob Bertholf Get Social!#UHPNM Pacific New Media @pacificnewmedia Follow @PacificNewMedia Excited to speak at #Clarity15 on #SEO #KPI’s & Reporting! Rob Bertholf @Rob Follow @Rob Excited to speak at #UHPNM on #SEO & #ContentMarketing!
  • 8.
    @Rob Bertholf Introductions :) HELLOyour nameis 1) Name 2) Industry 3) Takeaway
  • 9.
    @Rob Bertholf ● Howcan we improve the search experience for our visitors while serving up our content in the most effective way for a search engine to consume it ● What are the technical aspects search engines look at Desired Takeaways
  • 10.
  • 11.
    @Rob Bertholf Google -Browser http://www.google.com Search Engine Google
  • 12.
    @Rob Bertholf Search Engines Querytheir Index for Search Results Google
  • 13.
    @Rob Bertholf The Indexis the result of Spiders “Crawling” the Internet
  • 14.
    @Rob Bertholf cache:cat.html Cat Page- Chrome cat.html Meow. Cat Page - Chrome cat.jpg Meow. Cat Spiders SeeHumans See Cached View
  • 15.
    @Rob Bertholf view-source:cat.html Cat Page- Chrome cat.html Meow. Cat Page - Chrome cat.jpg <html> <head> <title>Cat Page</title> </head> <body> <h1>Meow.</h1> <img src=”cat.jpg” alt=”Cat” /> </body> </html> Humans See Spiders See HTML Source
  • 16.
  • 17.
    @Rob Bertholf Anatomy ofan HTML Document <!DOCTYPE> <html> <head> <title>Cat Page</title> <meta /> <script></script> </head> <body> <h1>Meow.</h1> <img src=”cat.jpg” /> </body> </html> Cat Page - Chrome cat.html Meow.
  • 18.
    @Rob Bertholf My Page- Browser mypage.html Hello World! Click Here for Cats! Hyperlinks are fundamental to HTML & the web
  • 19.
    @Rob Bertholf cat.html My Page- Browser mypage.html Hello World! Click Here for Cats! Meow. Cats - Browser cat.jpg Hyperlink Spiders Crawl Hyperlinks
  • 20.
    @Rob Bertholf Likely tobe indexed Likely to be indexed NOT likely to be indexed About Products Homepage Contact Internal Linking
  • 21.
    @Rob Bertholf Likely tobe indexed Likely to be indexed NOT likely to be indexed About Products Homepage Contact <a href=”cars.html” title=”Page about Cars”>Cars</a> Internal Linking
  • 22.
    @Rob Bertholf Spiders must see(& trust) your content to index it! Avoid: ● Frames / iframes ● AJAX single page sites ● Unparsable javascript ● Flash, java or plugins ● Text in Images
  • 23.
    @Rob Bertholf HTML Sitemaps Goodfor Humans Great for Robots
  • 24.
    @Rob Bertholf Good forHumans Great for Robots HTML Sitemaps
  • 25.
  • 26.
  • 27.
    @Rob Bertholf Sitemaps andSitemap Indexes Sitemap files can contain up to 50,000 URLs in each sitemap. For large sites you need to break URLs up over several sitemaps. If you have more than one sitemap, you will need a sitemap index.
  • 28.
    @Rob Bertholf XML Sitemap(Index) <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc> http://www.domain.com/pages.xml </loc> <lastmod>2015-07-19</lastmod> </sitemap> <sitemap> <loc> http://www.domain.com/products.xml </loc> <lastmod>2015-07-19</lastmod> </sitemap>
  • 29.
    @Rob Bertholf XML Sitemap <urlsetxmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc> http://www.domain.com/some-page/ </loc> <lastmod>2015-07-19</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url>
  • 30.
    @Rob Bertholf Homepage About Services Hidden Please DO NOTINDEX What about intentionally hidden pages?
  • 31.
    @Rob Bertholf Tells UserAgents how to treat the page <meta name="robots" content="NOINDEX"> ...or manage multiple rules in the robots.txt file Meta NoIndex
  • 32.
  • 33.
  • 34.
    @Rob Bertholf Robots.txt Tells UserAgents how to treat the site. Allow Disallow
  • 35.
    @Rob Bertholf Robots.txt User-agent: * Disallow:/wp-admin/ Disallow: /wp-includes/
  • 36.
    @Rob Bertholf Mozilla/5.0 (compatible;Googlebot/2.1; +http://www.google.com/bot.html) User Agents User-Agent: Googlebot Allow: /
  • 37.
    @Rob Bertholf Google’s UserAgents Googlebot Googlebot-News Googlebot-Images Googlebot-Mobile Mediapartners-Google AdsBot-Google
  • 38.
    @Rob Bertholf International UserAgents Do we need international search engines crawling and indexing our site?
  • 39.
  • 40.
    @Rob Bertholf Server Codes ●1xx: Information ● 2xx: Successful ● 3xx: Redirect ● 4xx: Client Error ● 5xx: Server Error
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
    @Rob Bertholf Internal ServerError 500 Code WT@#$%
  • 46.
  • 47.
  • 48.
    @Rob Bertholf Broken Links& Images Slow The Crawl 404 Error
  • 49.
  • 50.
    @Rob Bertholf 1. ManuallyFinding Missing Pages In Google just type “site:yourdomain.com” to return a list of pages in your website that Google has in their index. Check for pages which are no longer valid or that should not appear publicly. site:yourdomain.comGoogle Search
  • 51.
    @Rob Bertholf 2. UseGoogle Search Console Cat Page - Chrome https://www.google.com/webmasters/tools/crawl-errors Google Search Console URL Errors Desktop Smartphone Feature Phone Server Error Soft 404 Not Found OtherNot Followed
  • 52.
    @Rob Bertholf 3. Runa Crawl Report w/ URL Long URL Dynamic URL 4XX Error 5XX Error 301 Code 302 Code Meta Refresh No follow Block robots Block meta- robots / (Homepage) FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /help/shipping FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE /policies-and-programs FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /help/policy FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE /tonneau-covers/10A50174.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /brakes/10A50530.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /seat-covers/10A52289.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /suspension-systems/10A504... FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • 53.
  • 54.
    @Rob Bertholf Fixing BrokenLink on Website /old-page.html /new-page/ 404 Error Add to your .htaccess file: Redirect 301 /old-page.html http://yourdomain.com/new-page/
  • 55.
    @Rob Bertholf Redirecting toor from http://WWW. http://mydomain.com http://www.mydomain.com WWW. Add to your .htaccess file: RewriteEngine on RewriteCond %{HTTP_HOST} !^www.domain.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]
  • 56.
    @Rob Bertholf Redirecting tonew domain http://olddomain.com http://newdomain.com Add to your .htaccess file: RewriteEngine on RewriteCond %{HTTP_HOST} ^olddomain.com$ [NC] RewriteRule ^(.*)$ http://newdomain.com/$1 [R=301,L]
  • 57.
    @Rob Bertholf WordPress Rewrites index.php?id=2/my-path/ Add to your .htaccess file: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule>
  • 58.
    @Rob Bertholf Other Typesof Redirects Note: There are other ways to redirect pages using Javascript, ASP, PHP, etc. THESE ARE NOT RECOMMENDED! They feel spammy to the search engines. Use 301 Redirects in your HTACCESS file (If on Apache).
  • 59.
  • 60.
    @Rob Bertholf What isHTACCESS? .htaccess files (or “distributed configuration files”) provide a way to make configuration changes on a per-directory basis. A file, containing one or more configuration directives, is placed in a particular document directory, and the directives apply to that directory, and all subdirectories thereof. - via Apache
  • 61.
    @Rob Bertholf What isHTACCESS? The file you edit to manage redirects (and how page paths are handled).
  • 62.
    @Rob Bertholf Find orCreate the File You will want to edit it with a plain text editor (notepad or similar, I like “Sublime Text” editor). If the file is not there you can create one. Just name it: “.htaccess”
  • 63.
    @Rob Bertholf WordPress “Redirection”Plugin If you are using WordPress you can use a plugin to manage your redirects. This is not as powerful but is easier to use. https://wordpress.org/plugins/redirection/
  • 64.
    @Rob Bertholf RegEx (Regular Expression) WorkingSmarter not Harder with Pattern Matching
  • 65.
    @Rob Bertholf Character Classes .any character except newline w d s word, digit, whitespace W D S not word, digit, whitespace [abc] any of a, b, or c [^abc] not a, b, or c [a-g] character between a & g
  • 66.
    @Rob Bertholf Anchors ^abc$ start/ end of the string b word boundary
  • 67.
    @Rob Bertholf Escaped Characters .* escaped special characters t n r tab, linefeed, carriage return u00A9 unicode escaped ©
  • 68.
    @Rob Bertholf Groups &Lookaround (abc) capture group 1 backreference to group #1 (?:abc) non-capturing group (?=abc) positive lookahead (?!abc) negative lookahead
  • 69.
    @Rob Bertholf Quantifiers &Alternation a* a+ a? 0 or more, 1 or more, 0 or 1 a{5} a{2,} exactly five, two or more a{1,3} between one & three a+? a{2,}? match as few as possible ab|cd match ab or cd
  • 70.
    @Rob Bertholf Site isclean… now how to determine Context & Authority
  • 71.
    @Rob Bertholf The roleof the Technical SEO is to make it easy to crawl the site & also provide contextual info
  • 72.
    @Rob Bertholf How to determine context? Loremipsum dolor sit amet, consectetur adipiscing elit. Nunc viverra velit ex, nec placerat lorem suscipit et. Pellentesque condimentum lectus at venenatis tincidunt. Donec at ex nec ante pharetra suscipit a non nunc. Curabitur velit quam, pharetra sed convallis non, volutpat mattis urna. Sed et urna suscipit, sagittis libero nec, viverra metus. Fusce congue massa in dapibus bibendum. Proin bibendum augue et nulla iaculis, non porta lorem tempus. Suspendisse vitae elementum nisi, vel tempus lorem. In luctus orci sed finibus viverra. Etiam semper sit amet ante eu ullamcorper. Sed tempus, elit ac convallis suscipit, metus elit iaculis ante, sit amet pellentesque turpis justo sit amet mauris. Sed fermentum condimentum turpis id ultrices.
  • 73.
    @Rob Bertholf Context applied from <tags> <h1>Lorem ipsum</h1> Dlorsit amet, consectetur adipiscing elit. Nunc viverra velit ex, nec placerat lorem suscipit et. Pellentesque condimentum lectus at venenatis tincidunt. Donec at ex nec ante pharetra suscipit a non nunc. <h2>Curabitur velit quam</h2> Paretra sed convallis non, volutpat mattis urna. Sed et urna suscipit, sagittis libero nec, viverra metus. Fusce congue massa in dapibus bibendum. <h2>Proin bibendum augue</h2> Et nulla iaculis, non porta lorem tempus. Suspendisse suscipit, metus elit iaculis ante, sit amet pellentesque elementum nisi, <strong>tempus lorem</strong> In luctus orci sed finibus viverra. Etiam semper sit amet ante eu ullamcorper. Sed tempus, elit ac convallis turpis justo sit amet mauris. Sed fermentum condimentum turpis id ultrices.
  • 74.
    @Rob Bertholf HTML Tags ●Heading <h1> <h2> <h3> <h4> <h5> <h6> ● Bold <strong> ● Image Alternate <img alt=”value”> ● Link Title <a title=”value”>
  • 75.
    @Rob Bertholf Context from Page Title <title>Loremipsum</title> Lorem Ipsum - Chrome cat.html Meow. <!DOCTYPE> <html> <head>
  • 76.
    @Rob Bertholf Page Title ●Keep the page title less than 65 characters ● Ensure the title grabs your attention Home domain1.com This is a description of the page. Search Term - Free Shipping! domain2.com This is a description of the page.
  • 77.
    @Rob Bertholf Lorem Ipsum- Chrome http://distraction.com/pets/cat.html Meow. Context from URL domain.tld/sub-folder/page
  • 78.
    @Rob Bertholf Search FriendlyURLs Keyword in Domain Relevant Keyword in Subfolder Keyword in page name separated by hyphen www.distraction.com/pets/playful-cats.html
  • 79.
    @Rob Bertholf UN-Search FriendlyURLs Unnecessary Subdomain Dynamic URLs (especially with more than 2 parameters) Not readable URL string 123xyz.distr-action.com/a?q=abc&x=yxz&p=1
  • 80.
    @Rob Bertholf Lorem Ipsum- Chrome cat.html Learn about Cats Context from referring Hypertext <a href=”page.html” title=”Page about Cats”>Cats</a>
  • 81.
    @Rob Bertholf Hypertext <a href=”page.html”>ClickHere</a> for Cats Click Here for <a href=”page.html”>Cats</a>
  • 82.
    @Rob Bertholf NOT SEOFactors ● Meta Keywords ● Meta Description <meta name="keywords" content="Obsolete"> <meta name="keywords" content="This is only used to customize what appears in the search engine results page for your listing.">
  • 83.
    @Rob Bertholf Pruning Content (Notall content should be indexed)
  • 84.
    @Rob Bertholf Duplicate Content IdentifiesDuplicate Content Determine Original Version <link rel=”canonical” href=”http://site.com/url.html” />
  • 85.
    @Rob Bertholf rel=”canonical” Copied Version partnersite.com/article CanonicalVersion yoursite.com/article Duplicate Version yoursite.com/article?mode=print
  • 86.
    @Rob Bertholf rel=”prev/next” Page 3 Page2 yoursite.com/article?page=2 Page 1 yoursite.com/article?page=1 yoursite.com/article?page=3 <link rel="prev" href="http://yoursite.com/article?page=1" /> <link rel="next" href="http://yoursite.com/article?page=3" />
  • 87.
  • 88.
    @Rob Bertholf Link Sculpting Overall,this is a tactic which is no longer a tactic. Still useful on Privacy Policy / Terms of Use which should not be followed or indexed by the search engines. <a href="/login" rel="nofollow">Login</a>
  • 89.
    @Rob Bertholf Link Sculpting:NoFollow Google recommends Rel=NoFollow on any paid links or external links going to untrusted sites. <a href="http://externalsite.com" rel="nofollow">Sponsored Link</a>
  • 90.
    @Rob Bertholf Other LinkDirectives noarchive: Don’t show a "Cached" link in search results. nosnippet: Don’t show a snippet in the search results for this page noodp: Don’t use metadata from Open Directory project for titles or snippets. notranslate: Don’t offer translation of this page in search results. noimageindex: Don’t index images on this page. unavailable_after: Don’t show this page after the specified date/time.
  • 91.
  • 92.
    @Rob Bertholf Web 1.0 ArticlePerson Song Book Portal
  • 93.
    @Rob Bertholf Article Person Song Book Collaborate Connect& Share Review Discuss Collaboration Web 2.0
  • 94.
    @Rob Bertholf Article Person SongBook written by is loved by references inspired by isreading discussed in Context Web 3.0
  • 95.
    @Rob Bertholf Semantic WebUser Interface & Applications Trust Crypto URI / IRI XML Data Interchange:RDF Rules: RIF RDF-S Unifying Logic Ontology: OWLQuery: SPARQL Proof Unicode
  • 96.
    @Rob Bertholf JSON Markup:Organization <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Organization", "url": "http://www.yourdomain.com", "logo": "http://yourdomain.com/somelogo.png", "contactPoint" : [ { "@type" : "ContactPoint", "telephone" : "+1-800-123-4567", "contactType" : ["Sales","Customer Service"], "contactOption" : "TollFree", "areaServed" : "US", "availableLanguage" : ["English", "Spanish"] } ],
  • 97.
    @Rob Bertholf JSON Markup:Organization "sameAs" : [ "https://www.facebook.com/yourbrand", "https://twitter.com/yourbrand", "http://plus.google.com/+yourbrand", "https://www.youtube.com/user/yourbrand", "https://www.pinterest.com/yourbrand/", "https://instagram.com/yourbrand/", "http://en.wikipedia.org/wiki/yourbrand", "https://www.linkedin.com/company/yourbrand" ] } </script>
  • 98.
    @Rob Bertholf JSON Markup:Website <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "WebSite", "url": "http://www.domain.com", “name”: “Your Brand”, "potentialAction": { "@type": "SearchAction", "target": "http://www.domain.com/shop/{search_term_string}", "query-input": "required name=search_term_string" } } </script>
  • 99.
    @Rob Bertholf Product Schema <divitemscope itemtype="http://schema.org/Product"> <span itemprop="brand">{{Product Manufacturer}}</span> <span itemprop="name">{{Product Name}}</span> <img itemprop="image" src="{{Product Image Filename}}" alt="{{Product Name}}" /> <span itemprop="description">{{ProductDescription}}</span> Product #: <span itemprop="mpn">{{Product ID}}</span> <span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"> <span itemprop="ratingValue">{{Review Rating|4.4}}</span> stars, based on <span itemprop="reviewCount">{{Review Count|89}}</span> reviews </span> </div>
  • 100.
    @Rob Bertholf Rating Schema <divitemscope itemtype="http://schema.org/Review"> <div itemprop="itemReviewed" itemscope itemtype="http://schema.org/Product"> <span itemprop="name">{{Product Name}}</span> </div> <span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"> <meta itemprop="bestRating" content="{{Review Rating|5}}" /> <meta itemprop="worstRating" content="{{Review Rating|1}}" /> <span itemprop="ratingValue">{{Review Rating|4}}</span> </span> stars <span itemprop="author" itemscope itemtype="http://schema.org/Person"> <span itemprop="name">{{First L}}</span> </span> <b>"<span itemprop="name">{{Review Title}}</span>" </b> <span itemprop="reviewBody">{{Review Text}}</span> <meta itemprop="datePublished" content="2015-03-31T08:06:00" /> </div>
  • 101.
    @Rob Bertholf Breadcrumb Markup <ulclass="breadcrumb inline clearfix"> <li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a title="Home" href="/" itemprop="url"><span itemprop="title">Home</span></a> </li> <li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="/store" itemprop="url"><span itemprop="title">Store</span></a> </li> <li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <a href="/store/shoes" itemprop="url"><span itemprop="title">Shoes</span></a> </li> <li itemscope itemtype="http://data-vocabulary.org/Breadcrumb"> <span itemprop="title">Running Shoe</span> </li> </ul>
  • 102.
  • 103.
  • 104.
    @Rob Bertholf What IPay For ● Currently ○ Moz (https://moz.com/) ○ AHREFs (https://ahrefs.com/) ○ Screaming Frog (http://www.screamingfrog.co.uk/seo-spider/) ○ Link Assistant’s Rank Tracker (http://www.link-assistant.com/rank-tracker/) ● Previously ○ seoClarity, MagesticSEO, WebCEO, LinkResearchTools
  • 105.
  • 106.
    @Rob Bertholf Test drive…vroom. Google Webmaster Tools Search Console
  • 107.
    @Rob Bertholf + GoogleSearch Console Data Google Search Console - Chrome https://www.google.com/webmasters/tools/crawl-errors Google Search Console URL Errors Desktop Smartphone Feature Phone Server Error Soft 404 Not Found OtherNot Followed
  • 108.
    @Rob Bertholf Test drive…vroom. Bing Webmaster Tools
  • 109.
    @Rob Bertholf + CrawlData via URL Long URL Dynamic URL 4XX Error 5XX Error 301 Code 302 Code Meta Refresh No follow Block robots Block meta- robots / (Homepage) FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /help/shipping FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE /policies-and-programs FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /help/policy FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE /tonneau-covers/10A50174.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /brakes/10A50530.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /seat-covers/10A52289.aspx FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE /suspension-systems/10A504... FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
  • 110.
    @Rob Bertholf Noticeably Absent ●International / Multilingual Tactics ● Mobile Sitemap & Canonical, Viewport ● Social Integration (FB: OG, etc.)
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
    @Rob Bertholf What wereyour thoughts? Please tweet: “Just finished #SEO course with @Rob. It was _________”