SlideShare a Scribd company logo
MAKE YOUR 
OWN DAMN 
SEO TOOLS 
Cheat Sheet: ranktank.org/damntools/ 
@seanmalseed
Why? 
• How many hours have you spent 
trying to find that one tool 
that did that one thing that 
you need? 
• How many hours do you spend 
fiddling with multiple exports 
from three tools trying to eek 
out some information? 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
“but i dont know how to code and im really 
not that technical…” 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
If you’re sitting in this room right now, 
you’ve got a little technical in you. 
Give yourself a little credit. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Talkin’ Bout some GDocs 
Google built some really powerful commands 
into Sheets. 
• ImportXML and 
ImportDATA can 
automagically pull 
and parse data from 
an API or web pages. 
• ImportHTML can pull 
web page source 
elements 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
ImportDATA 
• PowerPoint can get a little 
boring, so let’s build a tool 
right now. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Multi-Page Change Monitor 
• The “Have they updated their website 
or code yet?” tool. 
• Formula used: ImportDATA 
• Google Doc with Example 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Setting Up the Sheet 
• Column A is for the URLs you’ll 
be checking 
• Column B is for the live pages 
pulled from the site 
• Column C is for the original 
pages to compare against 
• Column D performs the “Has it 
changed?” check! 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic Formula 
• Column B is where the real 
magic happens, pulling live 
data for each page you put in 
column A using importDATA 
• Let’s build that formula 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic Formula 
=importdata(A2) 
This call uses the URL in cell A2 and pulls all of the page source. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic Formula 
=concatenate(importdata(A2)) 
Concatenate joins an array together. In this case, it forces all of the code into 
a single string of data in one cell. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic Formula 
=substitute(concatenate(importdata 
(A2)), char(10), “”) 
Some pages still have line breaks which cause the sheet to get all weird and stuff. 
Stop this weirdness by using SUBSTITUTE to replace line breaks Char(10) with nothing “” 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic Formula 
=if(A2)=“”,””, 
substitute(concatenate(importdata(A2)), 
char(10), “”)) 
Finally, to keep the sheet clean, we need to check and see if something is actually in cell A2. 
If nothing is there, we’ll leave B2 blank too. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic Formula 
If the value in A2 = empty Make this cell (B2) empty 
=if(A2)=“”,””, 
Otherwise, do the thing! 
substitute(concatenate(importdata(A2)), 
char(10), “”)) 
Finally, to keep the sheet clean, we need to check and see if something is actually in cell A2. 
If nothing is there, we’ll leave B2 blank too. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Column D for Detection! 
=if(B2=C2,”Nope”,”Yep”) 
Compare the live data in B2 to the baseline data in C2. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Column D for Detection! 
=if(C2=“”,””,if(B2=C2,”Yep”,”Nope”)) 
Cleaning this up a bit: if we didn’t put baseline data in C2, there’s no reason to do 
the comparison! We’ll leave the cell blank instead. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Using an API 
• The “I just need effing keyword 
search volumes in bulk but SEMrush 
doesn’t do that” tool. 
• API used: SEMrush 
• API call used: phrase_this 
• Formula used: ImportDATA 
• Google Doc with Example 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
SEMrush API Format 
Looks complicated, but it’s not. 
http://us.api.semrush.com/?action=report&type=phrase_this& 
key=YOUR_API_KEY&display_limit=1&export=api&export_columns 
=Nq&phrase=KEYWORD 
Using the API is literally just calling a URL with your API key in it. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
SEMrush API Format 
Let’s break it into multiple lines 
and examine it. 
http://us.api.semrush.com/?action=report <- Required, specify country 
&type=phrase_this <- This specifies the type of call you’re making 
&key=YOUR_API_KEY <- Your API key goes here 
&display_limit=1 <- How many lines of data to get. We only need one! 
&export=api <- Required 
&export_columns=Nq <- What metrics do we want? Nq means Search Volume 
&phrase=KEYWORD <- The keyword to check. Pretty important to include… 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Making the Call 
We’ve already learned how to use 
importDATA! 
=importdata(http://us.api.semrush.com/?actio 
n=report&type=phrase_this&key=YOUR_API_KEY&d 
isplay_limit=1&export=api&export_columns=Nq& 
phrase=KEYWORD) 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Making the Call 
=importdata("http://us.api.semrush.com/?acti 
on=report&type=phrase_this&key=YOUR_API_KEY& 
display_limit=1&export=api&export_columns=Nq 
&phrase=“ & A2) 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Uh-oh… 
API column header 
The actual data we want 
The API returns TWO lines of data, when we only want one! It gives us a column 
header AND the data we want, which wind up taking two rows. This won’t work 
if we want to check multiple lines of keywords! 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The Magic of QUERY 
Google built a function called “QUERY” into 
Sheets, and it’s basically effing magic. 
QUERY let’s you perform an SQL query on 
data, such as a range of cells or returned 
data. 
SQL stands for Structured Query Language, 
but it might as well mean Simple Query 
Language because it’s simple as sh*t. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Let’s QUERY 
We’re gonna perform this “QUERY” on the data 
the SEMrush API sends us: 
SELECT Col1 LABEL Col1 ‘’ 
It’s going to SELECT column 1 and LABEL 
column 1 with ‘’ (meaning blank). BOOM the 
header is GONE BABY! 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
ImportDATA + Query 
=query(importdata("http://us.api.semrush.com/?action 
=report&type=phrase_this&key=5311a58529cc0bbadf7e277 
555e9d83b&display_limit=1&export=api&export_columns= 
Nq&phrase=" & A2),"SELECT Col1 LABEL Col1 ''") 
Boy oh boy, is that easy to do. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Gettin’ International 
=query(importdata("http://” & $E$2 & 
“.api.semrush.com/?action=report&type=phrase_this&key=5311 
a58529cc0bbadf7e277555e9d83b&display_limit=1&export=api&ex 
port_columns=Nq&phrase=" & A2),"SELECT Col1 LABEL Col1 
''") 
Cell E2 will hold the country code, and using the $ 
(as $E$2) means the cell position will never change, 
even when the formula is pasted or filled-down. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Using XPath 
• The “I need to check all of the meta 
descriptions and page titles” tool. 
• Formula used: ImportXML 
• Google Doc with Example 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
XPath 
• Xpath confuses everyone. 
Including me. 
• It’s basically a way to point to 
a specific HTML element, or a 
bunch of elements. 
• We’ll look at a super simple way 
to use it. Maybe you’ll want to 
go learn more about it. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
ImportXML 
• importXML lets you specify a 
URL and Xpath to perform on the 
returned source: 
Column C: 
=ImportXML(A2, "//title") 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
ImportXML 
• Column C was easy. Column B is 
a bit more challenging: 
=substitute(ImportXML(A2, 
"//meta[@name='description']/@content"),char(10),"") 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
Xpath is a Roadmap 
Painting a path to a specific 
element in code: 
"//meta[@name='description']/@content” 
It’s in the meta Its name is ‘description’ Give me the content 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
The “OH SH*T” Moment 
The moment when 
you’ll realize how 
freaking powerful 
ImportXML with 
Xpath is. 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
BRB, Parsing Google 
You can use ImportXML and Xpath to parse Google SERPs. 
It even uses a Google internal IP address instead of 
yours, so your office won’t get stuck in CAPTCHA hell. 
=importxml("https://www.google.com/search?n 
um=100&q=query","//h3[@class='r']/a/@href") 
Yes. Oh sh*t indeed. 
Xpath to grab just the search result URLs 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed
And on that bombshell… 
RankTank.org 
CircleRank.com 
I do “the Twitter” 
@seanmalseed 
Cheat Sheet: ranktank.org/damntools/ @seanmalseed

More Related Content

What's hot

Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008
Rob
 
Application Programming Interfaces
Application Programming InterfacesApplication Programming Interfaces
Application Programming Interfaces
Cindy Royal
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Baruch Sadogursky
 
FQL Overview
FQL OverviewFQL Overview
FQL Overview
Craig Saila
 
Getting More Traffic From Search Advanced Seo For Developers Presentation
Getting More Traffic From Search  Advanced Seo For Developers PresentationGetting More Traffic From Search  Advanced Seo For Developers Presentation
Getting More Traffic From Search Advanced Seo For Developers Presentation
Seo Indonesia
 
Yahoo - Open Applied
Yahoo - Open AppliedYahoo - Open Applied
Yahoo - Open Applied
Carsonified Team
 
FOWA 09 - Open Strategy Applied
FOWA 09 - Open Strategy AppliedFOWA 09 - Open Strategy Applied
FOWA 09 - Open Strategy Applied
Dan Theurer
 
Using Wordpress with Reclaim Hosting
Using Wordpress with Reclaim HostingUsing Wordpress with Reclaim Hosting
Using Wordpress with Reclaim Hosting
Cindy Royal
 
Open Power Template 2 presentation
Open Power Template 2 presentationOpen Power Template 2 presentation
Open Power Template 2 presentation
Tomasz Jędrzejewski
 
Extreme APIs for a better tomorrow
Extreme APIs for a better tomorrowExtreme APIs for a better tomorrow
Extreme APIs for a better tomorrow
Aaron Maturen
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Mike Schinkel
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017
Baruch Sadogursky
 
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
Andrew Collier
 
Advanced SEO for Web Developers
Advanced SEO for Web DevelopersAdvanced SEO for Web Developers
Advanced SEO for Web Developers
Nathan Buggia
 
Building Excel Tools - Utah DMC 2018 - Amy Bishop
Building Excel Tools - Utah DMC 2018 - Amy BishopBuilding Excel Tools - Utah DMC 2018 - Amy Bishop
Building Excel Tools - Utah DMC 2018 - Amy Bishop
Amy Bishop
 
Make Everyone a Tester: Natural Language Acceptance Testing
Make Everyone a Tester: Natural Language Acceptance TestingMake Everyone a Tester: Natural Language Acceptance Testing
Make Everyone a Tester: Natural Language Acceptance Testing
Viget Labs
 
Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018
Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018
Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018
Utah Digital Marketing Collective
 
Demystifying Keyword Driven Using Watir
Demystifying Keyword Driven Using WatirDemystifying Keyword Driven Using Watir
Demystifying Keyword Driven Using Watir
Hirday Lamba
 
Using the Google Analytics API to make most popular pages widgets for your we...
Using the Google Analytics API to make most popular pages widgets for your we...Using the Google Analytics API to make most popular pages widgets for your we...
Using the Google Analytics API to make most popular pages widgets for your we...
Dean Peters
 
Class 1 handout (2) html exercises
Class 1 handout (2) html exercisesClass 1 handout (2) html exercises
Class 1 handout (2) html exercises
Erin M. Kidwell
 

What's hot (20)

Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008Rugalytics | Ruby Manor Nov 2008
Rugalytics | Ruby Manor Nov 2008
 
Application Programming Interfaces
Application Programming InterfacesApplication Programming Interfaces
Application Programming Interfaces
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at Devoxx US 2017
 
FQL Overview
FQL OverviewFQL Overview
FQL Overview
 
Getting More Traffic From Search Advanced Seo For Developers Presentation
Getting More Traffic From Search  Advanced Seo For Developers PresentationGetting More Traffic From Search  Advanced Seo For Developers Presentation
Getting More Traffic From Search Advanced Seo For Developers Presentation
 
Yahoo - Open Applied
Yahoo - Open AppliedYahoo - Open Applied
Yahoo - Open Applied
 
FOWA 09 - Open Strategy Applied
FOWA 09 - Open Strategy AppliedFOWA 09 - Open Strategy Applied
FOWA 09 - Open Strategy Applied
 
Using Wordpress with Reclaim Hosting
Using Wordpress with Reclaim HostingUsing Wordpress with Reclaim Hosting
Using Wordpress with Reclaim Hosting
 
Open Power Template 2 presentation
Open Power Template 2 presentationOpen Power Template 2 presentation
Open Power Template 2 presentation
 
Extreme APIs for a better tomorrow
Extreme APIs for a better tomorrowExtreme APIs for a better tomorrow
Extreme APIs for a better tomorrow
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014
 
Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017
Java Puzzlers NG S02: Down the Rabbit Hole as presented at DevNexus 2017
 
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking[PyConZA 2017] Web Scraping: Unleash your Internet Viking
[PyConZA 2017] Web Scraping: Unleash your Internet Viking
 
Advanced SEO for Web Developers
Advanced SEO for Web DevelopersAdvanced SEO for Web Developers
Advanced SEO for Web Developers
 
Building Excel Tools - Utah DMC 2018 - Amy Bishop
Building Excel Tools - Utah DMC 2018 - Amy BishopBuilding Excel Tools - Utah DMC 2018 - Amy Bishop
Building Excel Tools - Utah DMC 2018 - Amy Bishop
 
Make Everyone a Tester: Natural Language Acceptance Testing
Make Everyone a Tester: Natural Language Acceptance TestingMake Everyone a Tester: Natural Language Acceptance Testing
Make Everyone a Tester: Natural Language Acceptance Testing
 
Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018
Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018
Advanced Excel: DIY SEM Tools: Amy Bishop #UtahDMC 2018
 
Demystifying Keyword Driven Using Watir
Demystifying Keyword Driven Using WatirDemystifying Keyword Driven Using Watir
Demystifying Keyword Driven Using Watir
 
Using the Google Analytics API to make most popular pages widgets for your we...
Using the Google Analytics API to make most popular pages widgets for your we...Using the Google Analytics API to make most popular pages widgets for your we...
Using the Google Analytics API to make most popular pages widgets for your we...
 
Class 1 handout (2) html exercises
Class 1 handout (2) html exercisesClass 1 handout (2) html exercises
Class 1 handout (2) html exercises
 

Similar to Make-Damn-SEO-Tools

The Django Book - Chapter 5: Models
The Django Book - Chapter 5: ModelsThe Django Book - Chapter 5: Models
The Django Book - Chapter 5: Models
Sharon Chen
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
Patrick Schroeder
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalyst
dwm042
 
SPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePointSPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePoint
Mark Rackley
 
Using Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case StudyUsing Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case Study
David Keener
 
BD-ACA Week6
BD-ACA Week6BD-ACA Week6
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Codemotion
 
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Codemotion
 
Ui path web data extraction
Ui path web data extractionUi path web data extraction
Ui path web data extraction
Adrian Dorache
 
Cloud Computing Project
Cloud Computing ProjectCloud Computing Project
Cloud Computing Project
Devendra Singh Parmar
 
Compass Framework
Compass FrameworkCompass Framework
Compass Framework
Lukas Vlcek
 
ASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And Representation
Randy Connolly
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
Mark Rackley
 
How we improved performance at Mixbook
How we improved performance at MixbookHow we improved performance at Mixbook
How we improved performance at Mixbook
Anton Astashov
 
03 integrate webapisignalr
03 integrate webapisignalr03 integrate webapisignalr
03 integrate webapisignalr
Erhwen Kuo
 
Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best Practices
Sriram Krishnan
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
John Quaglia
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
John Brunswick
 
An Introduction to Dashing and Smashing
An Introduction to Dashing and SmashingAn Introduction to Dashing and Smashing
An Introduction to Dashing and Smashing
Kunal Saha
 
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Holden Karau
 

Similar to Make-Damn-SEO-Tools (20)

The Django Book - Chapter 5: Models
The Django Book - Chapter 5: ModelsThe Django Book - Chapter 5: Models
The Django Book - Chapter 5: Models
 
Angular 2 Essential Training
Angular 2 Essential Training Angular 2 Essential Training
Angular 2 Essential Training
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalyst
 
SPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePointSPTechCon 2014 How to develop and debug client side code in SharePoint
SPTechCon 2014 How to develop and debug client side code in SharePoint
 
Using Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case StudyUsing Rails to Create an Enterprise App: A Real-Life Case Study
Using Rails to Create an Enterprise App: A Real-Life Case Study
 
BD-ACA Week6
BD-ACA Week6BD-ACA Week6
BD-ACA Week6
 
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
 
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
Michelle Garrett - Build the API you want to see in the world (with GraphQL) ...
 
Ui path web data extraction
Ui path web data extractionUi path web data extraction
Ui path web data extraction
 
Cloud Computing Project
Cloud Computing ProjectCloud Computing Project
Cloud Computing Project
 
Compass Framework
Compass FrameworkCompass Framework
Compass Framework
 
ASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And RepresentationASP.NET 08 - Data Binding And Representation
ASP.NET 08 - Data Binding And Representation
 
SharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentialsSharePoint Cincy 2012 - jQuery essentials
SharePoint Cincy 2012 - jQuery essentials
 
How we improved performance at Mixbook
How we improved performance at MixbookHow we improved performance at Mixbook
How we improved performance at Mixbook
 
03 integrate webapisignalr
03 integrate webapisignalr03 integrate webapisignalr
03 integrate webapisignalr
 
Windows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best PracticesWindows Azure - Cloud Service Development Best Practices
Windows Azure - Cloud Service Development Best Practices
 
I Feel Pretty
I Feel PrettyI Feel Pretty
I Feel Pretty
 
Boston Computing Review - Java Server Pages
Boston Computing Review - Java Server PagesBoston Computing Review - Java Server Pages
Boston Computing Review - Java Server Pages
 
An Introduction to Dashing and Smashing
An Introduction to Dashing and SmashingAn Introduction to Dashing and Smashing
An Introduction to Dashing and Smashing
 
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
Apache Spark Structured Streaming for Machine Learning - StrataConf 2016
 

Make-Damn-SEO-Tools

  • 1. MAKE YOUR OWN DAMN SEO TOOLS Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 2. Why? • How many hours have you spent trying to find that one tool that did that one thing that you need? • How many hours do you spend fiddling with multiple exports from three tools trying to eek out some information? Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 3. “but i dont know how to code and im really not that technical…” Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 4. If you’re sitting in this room right now, you’ve got a little technical in you. Give yourself a little credit. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 5. Talkin’ Bout some GDocs Google built some really powerful commands into Sheets. • ImportXML and ImportDATA can automagically pull and parse data from an API or web pages. • ImportHTML can pull web page source elements Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 6. ImportDATA • PowerPoint can get a little boring, so let’s build a tool right now. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 7. Multi-Page Change Monitor • The “Have they updated their website or code yet?” tool. • Formula used: ImportDATA • Google Doc with Example Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 8. Setting Up the Sheet • Column A is for the URLs you’ll be checking • Column B is for the live pages pulled from the site • Column C is for the original pages to compare against • Column D performs the “Has it changed?” check! Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 9. The Magic Formula • Column B is where the real magic happens, pulling live data for each page you put in column A using importDATA • Let’s build that formula Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 10. The Magic Formula =importdata(A2) This call uses the URL in cell A2 and pulls all of the page source. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 11. The Magic Formula =concatenate(importdata(A2)) Concatenate joins an array together. In this case, it forces all of the code into a single string of data in one cell. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 12. The Magic Formula =substitute(concatenate(importdata (A2)), char(10), “”) Some pages still have line breaks which cause the sheet to get all weird and stuff. Stop this weirdness by using SUBSTITUTE to replace line breaks Char(10) with nothing “” Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 13. The Magic Formula =if(A2)=“”,””, substitute(concatenate(importdata(A2)), char(10), “”)) Finally, to keep the sheet clean, we need to check and see if something is actually in cell A2. If nothing is there, we’ll leave B2 blank too. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 14. The Magic Formula If the value in A2 = empty Make this cell (B2) empty =if(A2)=“”,””, Otherwise, do the thing! substitute(concatenate(importdata(A2)), char(10), “”)) Finally, to keep the sheet clean, we need to check and see if something is actually in cell A2. If nothing is there, we’ll leave B2 blank too. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 15. Column D for Detection! =if(B2=C2,”Nope”,”Yep”) Compare the live data in B2 to the baseline data in C2. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 16. Column D for Detection! =if(C2=“”,””,if(B2=C2,”Yep”,”Nope”)) Cleaning this up a bit: if we didn’t put baseline data in C2, there’s no reason to do the comparison! We’ll leave the cell blank instead. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 17. Using an API • The “I just need effing keyword search volumes in bulk but SEMrush doesn’t do that” tool. • API used: SEMrush • API call used: phrase_this • Formula used: ImportDATA • Google Doc with Example Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 18. SEMrush API Format Looks complicated, but it’s not. http://us.api.semrush.com/?action=report&type=phrase_this& key=YOUR_API_KEY&display_limit=1&export=api&export_columns =Nq&phrase=KEYWORD Using the API is literally just calling a URL with your API key in it. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 19. SEMrush API Format Let’s break it into multiple lines and examine it. http://us.api.semrush.com/?action=report <- Required, specify country &type=phrase_this <- This specifies the type of call you’re making &key=YOUR_API_KEY <- Your API key goes here &display_limit=1 <- How many lines of data to get. We only need one! &export=api <- Required &export_columns=Nq <- What metrics do we want? Nq means Search Volume &phrase=KEYWORD <- The keyword to check. Pretty important to include… Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 20. Making the Call We’ve already learned how to use importDATA! =importdata(http://us.api.semrush.com/?actio n=report&type=phrase_this&key=YOUR_API_KEY&d isplay_limit=1&export=api&export_columns=Nq& phrase=KEYWORD) Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 21. Making the Call =importdata("http://us.api.semrush.com/?acti on=report&type=phrase_this&key=YOUR_API_KEY& display_limit=1&export=api&export_columns=Nq &phrase=“ & A2) Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 22. Uh-oh… API column header The actual data we want The API returns TWO lines of data, when we only want one! It gives us a column header AND the data we want, which wind up taking two rows. This won’t work if we want to check multiple lines of keywords! Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 23. The Magic of QUERY Google built a function called “QUERY” into Sheets, and it’s basically effing magic. QUERY let’s you perform an SQL query on data, such as a range of cells or returned data. SQL stands for Structured Query Language, but it might as well mean Simple Query Language because it’s simple as sh*t. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 24. Let’s QUERY We’re gonna perform this “QUERY” on the data the SEMrush API sends us: SELECT Col1 LABEL Col1 ‘’ It’s going to SELECT column 1 and LABEL column 1 with ‘’ (meaning blank). BOOM the header is GONE BABY! Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 25. ImportDATA + Query =query(importdata("http://us.api.semrush.com/?action =report&type=phrase_this&key=5311a58529cc0bbadf7e277 555e9d83b&display_limit=1&export=api&export_columns= Nq&phrase=" & A2),"SELECT Col1 LABEL Col1 ''") Boy oh boy, is that easy to do. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 26. Gettin’ International =query(importdata("http://” & $E$2 & “.api.semrush.com/?action=report&type=phrase_this&key=5311 a58529cc0bbadf7e277555e9d83b&display_limit=1&export=api&ex port_columns=Nq&phrase=" & A2),"SELECT Col1 LABEL Col1 ''") Cell E2 will hold the country code, and using the $ (as $E$2) means the cell position will never change, even when the formula is pasted or filled-down. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 27. Using XPath • The “I need to check all of the meta descriptions and page titles” tool. • Formula used: ImportXML • Google Doc with Example Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 28. XPath • Xpath confuses everyone. Including me. • It’s basically a way to point to a specific HTML element, or a bunch of elements. • We’ll look at a super simple way to use it. Maybe you’ll want to go learn more about it. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 29. ImportXML • importXML lets you specify a URL and Xpath to perform on the returned source: Column C: =ImportXML(A2, "//title") Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 30. ImportXML • Column C was easy. Column B is a bit more challenging: =substitute(ImportXML(A2, "//meta[@name='description']/@content"),char(10),"") Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 31. Xpath is a Roadmap Painting a path to a specific element in code: "//meta[@name='description']/@content” It’s in the meta Its name is ‘description’ Give me the content Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 32. The “OH SH*T” Moment The moment when you’ll realize how freaking powerful ImportXML with Xpath is. Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 33. BRB, Parsing Google You can use ImportXML and Xpath to parse Google SERPs. It even uses a Google internal IP address instead of yours, so your office won’t get stuck in CAPTCHA hell. =importxml("https://www.google.com/search?n um=100&q=query","//h3[@class='r']/a/@href") Yes. Oh sh*t indeed. Xpath to grab just the search result URLs Cheat Sheet: ranktank.org/damntools/ @seanmalseed
  • 34. And on that bombshell… RankTank.org CircleRank.com I do “the Twitter” @seanmalseed Cheat Sheet: ranktank.org/damntools/ @seanmalseed

Editor's Notes

  1. I’m using the SEMrush API for these examples because a) I used to work there and I handled API integrations, so I’m just a weeee bit familiar with it. b) Their data is amazing and trusted by top agencies c) I’m still really good friends with them, and when I told them what I was going to do with these tools I’m making, they gave me a promo to give out with a completely free month of full Pro service, with a full working API key included… convenient, eh?
  2. Before we can parse the API data, we need to understand its format. Good thing it’s super simple. Using the API is literally just calling a URL with your API key in it. You could actually put the API call into the URL field of your web browser, and it would pull back the data just like a web page. SOOO simple! Woot.
  3. In the first section of the call, you can change “us” to other countries, like “ca” for Canada – there’s a full list at semrush.com/api.html “phrase_this” is the SEMrush API call for metrics on a single keyword
  4. We can call and parse the API automagically with IMPORTDATA, just like we did with web pages! It works the same way!
  5. We can call and parse the API automagically with IMPORTDATA, just like we did with web pages! It works the same way!
  6. We can call and parse the API automagically with IMPORTDATA, just like we did with web pages! It works the same way!
  7. We can call and parse the API automagically with IMPORTDATA, just like we did with web pages! It works the same way!
  8. We can call and parse the API automagically with IMPORTDATA, just like we did with web pages! It works the same way!
  9. We can call and parse the API automagically with IMPORTDATA, just like we did with web pages! It works the same way!
  10. I’m using the SEMrush API for these examples because a) I used to work there and I handled API integrations, so I’m just a weeee bit familiar with it. b) Their data is amazing and trusted by top agencies c) I’m still really good friends with them, and when I told them what I was going to do with these tools I’m making, they gave me a promo to give out with a completely free month of full Pro service, with a full working API key included… convenient, eh?
  11. Did you notice the “OH SH*T” tab in Example 3?
  12. Did you notice the “OH SH*T” tab in Example 3?