Google Chrome SEO Without A Plugin

This post tries to cover many SEO items that can be handled via plain vanilla Google Chrome without any tools

There are numerous add-ons for Chrome that handle many SEO data gathering tasks, but those are not covered here. For those that are unsure about the security of those add-ons, or whether they are mining Litecoin in the background and eating up your CPU cycles, this post is for you. But more over, it is just a reason to play around with Google searches, Chrome Developer Tools, and the Console.

Google Searches

In this section we cover a few common Google search operators used in SEO. Please let me know what I missed.

Canonical content check



On-page internal link candidates

site:{domain} {keyword} "googlebot"

Bonus Points: Also the way to see if the correct page is ranking for a particular query.

Pages that haven't moved to https

site:{domain} -inurl:https -inurl:https

If your page is cached by Google



Useful parameters in Google searches

  • nearby={city}: Filters search results to nearby city.

  • filter=0: Remove personalization from Google results.

  • num=100: Display 100 Google results.

Most of the above provided by Victor Pan. Thanks for the idea for this post Victor. Please follow him on Twitter.

In this section we cover using the Console in Developer Tools to get data from Google and your pages in Chrome.

$$('h3 a').join('\n')

Scrape Google Images

var imgs=$$('a'); var out = [];
for (i in imgs){

Hat tip to Peter Nikolow. Read more at his blog here (Bulgarian).

Count links on a page


See the page title


Bonus Points:


See the page description


Bonus Points:


See the robots meta


See the canonical


Easter eggs in Google Search


Edit a page live

document.designMode = "on"

Get Important N-Grams from Google search results

var stopwords = [
'about', 'after', 'all', 'also', 'am', 'an', 'and', 'another', 'any', 'are', 'as', 'at', 'be',
'because', 'been', 'before', 'being', 'between', 'both', 'but', 'by', 'came', 'can',
'come', 'could', 'did', 'do', 'each', 'for', 'from', 'get', 'got', 'has', 'had',
'he', 'have', 'her', 'here', 'him', 'himself', 'his', 'how', 'if', 'in', 'into',
'is', 'it', 'like', 'make', 'many', 'me', 'might', 'more', 'most', 'much', 'must',
'my', 'never', 'now', 'of', 'on', 'only', 'or', 'other', 'our', 'out', 'over',
'said', 'same', 'see', 'should', 'since', 'some', 'still', 'such', 'take', 'than',
'that', 'the', 'their', 'them', 'then', 'there', 'these', 'they', 'this', 'those',
'through', 'to', 'too', 'under', 'up', 'very', 'was', 'way', 'we', 'well', 'were',
'what', 'where', 'which', 'while', 'who', 'with', 'would', 'you', 'your', 'a', 'i', 's']
function nGrams(sentence, limit) {
ns = [1,2,3,4]; var grams = {};
var words = sentence.replace(/(?:https?|ftp):\/\/[\n\S]+/g, '').toLowerCase().split(/\W+/).filter(function (value) {return stopwords.indexOf(value.toLowerCase()) === -1})
for (n of ns){
var total = words.length - n;
for(var i = 0; i <= total; i++) {
var seq = '';
for (var j = i; j < i + n; j++) { seq += words[j] + ' ';}
if (seq.trim().length < 3) {continue;}else{seq = seq.trim()}
grams[seq] = seq in grams ? grams[seq] + 1 : 1;
var sort = Object.keys(grams).sort(function(a,b){return grams[b]-grams[a]});
for (s of sort){ if (grams[s] < limit){break;} console.log(s, ':', grams[s]);}
var gtext =
var ng = nGrams(gtext, 3)

Get Google Analytics info

for (const [key, value] of Object.entries(ga.getAll()[0] ) {
if (typeof value === 'string'){
console.log('%s: %s', key.replace(':',''), value);

Bonus Points: Check the hit count for your profiles


See what Google is storing to the google object on search result pages

for (k of Object.keys(google)){
if (typeof google[k] !== 'function') {console.log(k,google[k])}

Get load timings from PerformanceTiming

for (t in window.performance.timing){
var tAll = window.performance.timing; var t0 = tAll['navigationStart'];
if (tAll[t] !== "undefined" && (tAll[t]- t0) > 10){
console.log(t,':', (tAll[t]- t0)/1000, 'secs')

This section covers some of the best Developer Tools tabs.


In developer tools. Look for the Security tab to ensure your page and loaded resources are secure.


Use the built-in Lighthouse audits to test your webpage for:

  • Speed

  • PWA implementation

  • Accessibility

  • Best Practices

  • SEO

You have to get the Chrome canary build for the SEO audit portion to be available through Developer Tools. Otherwise, use the Chrome plugin for Lighthouse.


I most often find myself using the network view for a couple things. First, it is great for verifying redirect chaining as long as you have "Preserve log" checked.

It is also great for looking at time-to-first-byte (TTFB), the time it took a server to respond to you. Also content download timings for image assets, scripts etc. There is also a nice filmstrip view in the latest canary version which quickly shows rendering progression to time.


In responsive view in Developer Tools, it is easy to add additional devices for Googlebot using the user-agent strings found here, and window sizes found here. This gives you the ability to browse as Googlebot and can uncover strange issues where a particular website either serves bots from different servers or handles those sessions differently. Not a good thing generally.


In addition to the above, you can use the More Tools > Sensors portion of Developer Tools to set the latitude and longitude to appear from in Google searches. There are many services that give you the lat/lon information but I generally rely on Google (Google Maps Api). This option has been glitchy for me in the past. Was brought up by Victor Pan, confirmed working by Dan Hinckley

Shortcuts: Full Size Screenshots

This is a great tip from Anthony Nelson.

One of my fave Chrome tips: on Console tab, hit Command+Shift+P to bring up shortcuts. Then type in "screenshot" and select "Capture Full Size Screenshot" - super easy way to get full sized png of a long page.

More Amazing Chrome SEO Tips

That's all I have. If you have anything to add, please comment below or hit me up on Twitter.