Connect with us

SEO

Essential Functions For SEO Data Analysis

Published

on

Essential Functions For SEO Data Analysis

Learning to code, whether with PythonJavaScript, or another programming language, has a whole host of benefits, including the ability to work with larger datasets and automate repetitive tasks.

But despite the benefits, many SEO professionals are yet to make the transition – and I completely understand why! It isn’t an essential skill for SEO, and we’re all busy people.

If you’re pressed for time, and you already know how to accomplish a task within Excel or Google Sheets, then changing tack can feel like reinventing the wheel.

When I first started coding, I initially only used Python for tasks that I couldn’t accomplish in Excel – and it’s taken several years to get to the point where it’s my defacto choice for data processing.

Looking back, I’m incredibly glad that I persisted, but at times it was a frustrating experience, with many an hour spent scanning threads on Stack Overflow.

Advertisement

This post is designed to spare other SEO pros the same fate.

Within it, we’ll cover the Python equivalents of the most commonly used Excel formulas and features for SEO data analysis – all of which are available within a Google Colab notebook linked in the summary.

Specifically, you’ll learn the equivalents of:

  • LEN.
  • Drop Duplicates.
  • Text to Columns.
  • SEARCH/FIND.
  • CONCATENATE.
  • Find and Replace.
  • LEFT/MID/RIGHT.
  • IF.
  • IFS.
  • VLOOKUP.
  • COUNTIF/SUMIF/AVERAGEIF.
  • Pivot Tables.

Amazingly, to accomplish all of this, we’ll primarily be using a singular library – Pandas – with a little help in places from its big brother, NumPy.

Prerequisites

For the sake of brevity, there are a few things we won’t be covering today, including:

  • Installing Python.
  • Basic Pandas, like importing CSVs, filtering, and previewing dataframes.

If you’re unsure about any of this, then Hamlet’s guide on Python data analysis for SEO is the perfect primer.

Now, without further ado, let’s jump in.

LEN

LEN provides a count of the number of characters within a string of text.

Advertisement

For SEO specifically, a common use case is to measure the length of title tags or meta descriptions to determine whether they’ll be truncated in search results.

Within Excel, if we wanted to count the second cell of column A, we’d enter:

=LEN(A2)
Screenshot from Microsoft Excel, November 2022

Python isn’t too dissimilar, as we can rely on the inbuilt len function, which can be combined with Pandas’ loc[] to access a specific row of data within a column:

len(df['Title'].loc[0])

In this example, we’re getting the length of the first row in the “Title” column of our dataframe.

len function python
Screenshot of VS Code, November, 2022

Finding the length of a cell isn’t that useful for SEO, though. Normally, we’d want to apply a function to an entire column!

In Excel, this would be achieved by selecting the formula cell on the bottom right-hand corner and either dragging it down or double-clicking.

When working with a Pandas dataframe, we can use str.len to calculate the length of rows within a series, then store the results in a new column:

df['Length'] = df['Title'].str.len()

Str.len is a ‘vectorized’ operation, which is designed to be applied simultaneously to a series of values. We’ll use these operations extensively throughout this article, as they almost universally end up being faster than a loop.

Advertisement

Another common application of LEN is to combine it with SUBSTITUTE to count the number of words in a cell:

=LEN(TRIM(A2))-LEN(SUBSTITUTE(A2," ",""))+1

In Pandas, we can achieve this by combining the str.split and str.len functions together:

df['No. Words'] = df['Title'].str.split().str.len()

We’ll cover str.split in more detail later, but essentially, what we’re doing is splitting our data based upon whitespaces within the string, then counting the number of component parts.

word count PythonScreenshot from VS Code, November 2022

Dropping Duplicates

Excel’s ‘Remove Duplicates’ feature provides an easy way to remove duplicate values within a dataset, either by deleting entirely duplicate rows (when all columns are selected) or removing rows with the same values in specific columns.

Excel drop duplicatesScreenshot from Microsoft Excel, November 2022

In Pandas, this functionality is provided by drop_duplicates.

To drop duplicate rows within a dataframe type:

df.drop_duplicates(inplace=True)

To drop rows based on duplicates within a singular column, include the subset parameter:

df.drop_duplicates(subset="column", inplace=True)

Or specify multiple columns within a list:

Advertisement
df.drop_duplicates(subset=['column','column2'], inplace=True)

One addition above that’s worth calling out is the presence of the inplace parameter. Including inplace=True allows us to overwrite our existing dataframe without needing to create a new one.

There are, of course, times when we want to preserve our raw data. In this case, we can assign our deduped dataframe to a different variable:

df2 = df.drop_duplicates(subset="column")

Text To Columns

Another everyday essential, the ‘text to columns’ feature can be used to split a text string based on a delimiter, such as a slash, comma, or whitespace.

As an example, splitting a URL into its domain and individual subfolders.

Excel drop duplicatesScreenshot from Microsoft Excel, November 2022

When dealing with a dataframe, we can use the str.split function, which creates a list for each entry within a series. This can be converted into multiple columns by setting the expand parameter to True:

df['URL'].str.split(pat="/", expand=True)
str split PythonScreenshot from VS Code, November 2022

As is often the case, our URLs in the image above have been broken up into inconsistent columns, because they don’t feature the same number of folders.

This can make things tricky when we want to save our data within an existing dataframe.

Specifying the n parameter limits the number of splits, allowing us to create a specific number of columns:

Advertisement
df[['Domain', 'Folder1', 'Folder2', 'Folder3']] = df['URL'].str.split(pat="/", expand=True, n=3)

Another option is to use pop to remove your column from the dataframe, perform the split, and then re-add it with the join function:

df = df.join(df.pop('Split').str.split(pat="/", expand=True))

Duplicating the URL to a new column before the split allows us to preserve the full URL. We can then rename the new columns:🐆

df['Split'] = df['URL']

df = df.join(df.pop('Split').str.split(pat="/", expand=True))

df.rename(columns = {0:'Domain', 1:'Folder1', 2:'Folder2', 3:'Folder3', 4:'Parameter'}, inplace=True)
Split pop join functions PythonScreenshot from VS Code, November 2022

CONCATENATE

The CONCAT function allows users to combine multiple strings of text, such as when generating a list of keywords by adding different modifiers.

In this case, we’re adding “mens” and whitespace to column A’s list of product types:

=CONCAT($F$1," ",A2)
concat Excel
Screenshot from Microsoft Excel, November 2022

Assuming we’re dealing with strings, the same can be achieved in Python using the arithmetic operator:

df['Combined] = 'mens' + ' ' + df['Keyword']

Or specify multiple columns of data:

df['Combined'] = df['Subdomain'] + df['URL']
concat PythonScreenshot from VS Code, November 2022

Pandas has a dedicated concat function, but this is more useful when trying to combine multiple dataframes with the same columns.

For instance, if we had multiple exports from our favorite link analysis tool:

df = pd.read_csv('data.csv')
df2 = pd.read_csv('data2.csv')
df3 = pd.read_csv('data3.csv')

dflist = [df, df2, df3]

df = pd.concat(dflist, ignore_index=True)

SEARCH/FIND

The SEARCH and FIND formulas provide a way of locating a substring within a text string.

Advertisement

These commands are commonly combined with ISNUMBER to create a Boolean column that helps filter down a dataset, which can be extremely helpful when performing tasks like log file analysis, as explained in this guide. E.g.:

=ISNUMBER(SEARCH("searchthis",A2)
isnumber search ExcelScreenshot from Microsoft Excel, November 2022

The difference between SEARCH and FIND is that find is case-sensitive.

The equivalent Pandas function, str.contains, is case-sensitive by default:

df['Journal'] = df['URL'].str.contains('engine', na=False)

Case insensitivity can be enabled by setting the case parameter to False:

df['Journal'] = df['URL'].str.contains('engine', case=False, na=False)

In either scenario, including na=False will prevent null values from being returned within the Boolean column.

One massive advantage of using Pandas here is that, unlike Excel, regex is natively supported by this function – as it is in Google sheets via REGEXMATCH.

Chain together multiple substrings by using the pipe character, also known as the OR operator:

Advertisement
df['Journal'] = df['URL'].str.contains('engine|search', na=False)

Find And Replace

Excel’s “Find and Replace” feature provides an easy way to individually or bulk replace one substring with another.

find replace ExcelScreenshot from Microsoft Excel, November 2022

When processing data for SEO, we’re most likely to select an entire column and “Replace All.”

The SUBSTITUTE formula provides another option here and is useful if you don’t want to overwrite the existing column.

As an example, we can change the protocol of a URL from HTTP to HTTPS, or remove it by replacing it with nothing.

When working with dataframes in Python, we can use str.replace:

df['URL'] = df['URL'].str.replace('http://', 'https://')

Or:

df['URL'] = df['URL'].str.replace('http://', '') # replace with nothing

Again, unlike Excel, regex can be used – like with Google Sheets’ REGEXREPLACE:

Advertisement
df['URL'] = df['URL'].str.replace('http://|https://', '')

Alternatively, if you want to replace multiple substrings with different values, you can use Python’s replace method and provide a list.

This prevents you from having to chain multiple str.replace functions:

df['URL'] = df['URL'].replace(['http://', ' https://'], ['https://www.', 'https://www.’], regex=True)

LEFT/MID/RIGHT

Extracting a substring within Excel requires the usage of the LEFT, MID, or RIGHT functions, depending on where the substring is located within a cell.

Let’s say we want to extract the root domain and subdomain from a URL:

=MID(A2,FIND(":",A2,4)+3,FIND("/",A2,9)-FIND(":",A2,4)-3)
left mid right ExcelScreenshot from Microsoft Excel, November 2022

Using a combination of MID and multiple FIND functions, this formula is ugly, to say the least – and things get a lot worse for more complex extractions.

Again, Google Sheets does this better than Excel, because it has REGEXEXTRACT.

What a shame that when you feed it larger datasets, it melts faster than a Babybel on a hot radiator.

Advertisement

Thankfully, Pandas offers str.extract, which works in a similar way:

df['Domain'] = df['URL'].str.extract('.*://?([^/]+)')
str extract PythonScreenshot from VS Code, November 2022

Combine with fillna to prevent null values, as you would in Excel with IFERROR:

df['Domain'] = df['URL'].str.extract('.*://?([^/]+)').fillna('-')

If

IF statements allow you to return different values, depending on whether or not a condition is met.

To illustrate, suppose that we want to create a label for keywords that are ranking within the top three positions.

Excel IFScreenshot from Microsoft Excel, November 2022

Rather than using Pandas in this instance, we can lean on NumPy and the where function (remember to import NumPy, if you haven’t already):

df['Top 3'] = np.where(df['Position'] <= 3, 'Top 3', 'Not Top 3')

Multiple conditions can be used for the same evaluation by using the AND/OR operators, and enclosing the individual criteria within round brackets:

df['Top 3'] = np.where((df['Position'] <= 3) & (df['Position'] != 0), 'Top 3', 'Not Top 3')

In the above, we’re returning “Top 3” for any keywords with a ranking less than or equal to three, excluding any keywords ranking in position zero.

IFS

Sometimes, rather than specifying multiple conditions for the same evaluation, you may want multiple conditions that return different values.

Advertisement

In this case, the best solution is using IFS:

=IFS(B2<=3,"Top 3",B2<=10,"Top 10",B2<=20,"Top 20")
IFS ExcelScreenshot from Microsoft Excel, November 2022

Again, NumPy provides us with the best solution when working with dataframes, via its select function.

With select, we can create a list of conditions, choices, and an optional value for when all of the conditions are false:

conditions = [df['Position'] <= 3, df['Position'] <= 10, df['Position'] <=20]

choices = ['Top 3', 'Top 10', 'Top 20']

df['Rank'] = np.select(conditions, choices, 'Not Top 20')

It’s also possible to have multiple conditions for each of the evaluations.

Let’s say we’re working with an ecommerce retailer with product listing pages (PLPs) and product display pages (PDPs), and we want to label the type of branded pages ranking within the top 10 results.

The easiest solution here is to look for specific URL patterns, such as a subfolder or extension, but what if competitors have similar patterns?

In this scenario, we could do something like this:

Advertisement
conditions = [(df['URL'].str.contains('/category/')) & (df['Brand Rank'] > 0),
(df['URL'].str.contains('/product/')) & (df['Brand Rank'] > 0),
(~df['URL'].str.contains('/product/')) & (~df['URL'].str.contains('/category/')) & (df['Brand Rank'] > 0)]

choices = ['PLP', 'PDP', 'Other']

df['Brand Page Type'] = np.select(conditions, choices, None)

Above, we’re using str.contains to evaluate whether or not a URL in the top 10 matches our brand’s pattern, then using the “Brand Rank” column to exclude any competitors.

In this example, the tilde sign (~) indicates a negative match. In other words, we’re saying we want every brand URL that doesn’t match the pattern for a “PDP” or “PLP” to match the criteria for ‘Other.’

Lastly, None is included because we want non-brand results to return a null value.

np select PythonScreenshot from VS Code, November 2022

VLOOKUP

VLOOKUP is an essential tool for joining together two distinct datasets on a common column.

In this case, adding the URLs within column N to the keyword, position, and search volume data in columns A-C, using the shared “Keyword” column:

=VLOOKUP(A2,M:N,2,FALSE)
vlookup ExcelScreenshot from Microsoft Excel, November 2022

To do something similar with Pandas, we can use merge.

Replicating the functionality of an SQL join, merge is an incredibly powerful function that supports a variety of different join types.

For our purposes, we want to use a left join, which will maintain our first dataframe and only merge in matching values from our second dataframe:

Advertisement
mergeddf = df.merge(df2, how='left', on='Keyword')

One added advantage of performing a merge over a VLOOKUP, is that you don’t have to have the shared data in the first column of the second dataset, as with the newer XLOOKUP.

It will also pull in multiple rows of data rather than the first match in finds.

One common issue when using the function is for unwanted columns to be duplicated. This occurs when multiple shared columns exist, but you attempt to match using one.

To prevent this – and improve the accuracy of your matches – you can specify a list of columns:

mergeddf = df.merge(df2, how='left', on=['Keyword', 'Search Volume'])

In certain scenarios, you may actively want these columns to be included. For instance, when attempting to merge multiple monthly ranking reports:

mergeddf = df.merge(df2, on='Keyword', how='left', suffixes=('', '_october'))
    .merge(df3, on='Keyword', how='left', suffixes=('', '_september'))

The above code snippet executes two merges to join together three dataframes with the same columns – which are our rankings for November, October, and September.

Advertisement

By labeling the months within the suffix parameters, we end up with a much cleaner dataframe that clearly displays the month, as opposed to the defaults of _x and _y seen in the earlier example.

multi merge PythonScreenshot from VS Code, November 2022

COUNTIF/SUMIF/AVERAGEIF

In Excel, if you want to perform a statistical function based on a condition, you’re likely to use either COUNTIF, SUMIF, or AVERAGEIF.

Commonly, COUNTIF is used to determine how many times a specific string appears within a dataset, such as a URL.

We can accomplish this by declaring the ‘URL’ column as our range, then the URL within an individual cell as our criteria:

=COUNTIF(D:D,D2)
Excel countifScreenshot from Microsoft Excel, November 2022

In Pandas, we can achieve the same outcome by using the groupby function:

df.groupby('URL')['URL'].count()
Python groupbyScreenshot from VS Code, November 2022

Here, the column declared within the round brackets indicates the individual groups, and the column listed in the square brackets is where the aggregation (i.e., the count) is performed.

The output we’re receiving isn’t perfect for this use case, though, because it’s consolidated the data.

Typically, when using Excel, we’d have the URL count inline within our dataset. Then we can use it to filter to the most frequently listed URLs.

To do this, use transform and store the output in a column:

Advertisement
df['URL Count'] = df.groupby('URL')['URL'].transform('count')
Python groupby transformScreenshot from VS Code, November 2022

You can also apply custom functions to groups of data by using a lambda (anonymous) function:

df['Google Count'] = df.groupby(['URL'])['URL'].transform(lambda x: x[x.str.contains('google')].count())

In our examples so far, we’ve been using the same column for our grouping and aggregations, but we don’t have to. Similarly to COUNTIFS/SUMIFS/AVERAGEIFS in Excel, it’s possible to group using one column, then apply our statistical function to another.

Going back to the earlier search engine results page (SERP) example, we may want to count all ranking PDPs on a per-keyword basis and return this number alongside our existing data:

df['PDP Count'] = df.groupby(['Keyword'])['URL'].transform(lambda x: x[x.str.contains('/product/|/prd/|/pd/')].count())
Python groupby countifsScreenshot from VS Code, November 2022

Which in Excel parlance, would look something like this:

=SUM(COUNTIFS(A:A,[@Keyword],D:D,{"*/product/*","*/prd/*","*/pd/*"}))

Pivot Tables

Last, but by no means least, it’s time to talk pivot tables.

In Excel, a pivot table is likely to be our first port of call if we want to summarise a large dataset.

For instance, when working with ranking data, we may want to identify which URLs appear most frequently, and their average ranking position.

pivot table ExcelScreenshot from Microsoft Excel, November 2022

Again, Pandas has its own pivot tables equivalent – but if all you want is a count of unique values within a column, this can be accomplished using the value_counts function:

count = df['URL'].value_counts()

Using groupby is also an option.

Advertisement

Earlier in the article, performing a groupby that aggregated our data wasn’t what we wanted – but it’s precisely what’s required here:

grouped = df.groupby('URL').agg(
     url_frequency=('Keyword', 'count'),
     avg_position=('Position', 'mean'),
     )

grouped.reset_index(inplace=True)
groupby-pivot PythonScreenshot from VS Code, November 2022

Two aggregate functions have been applied in the example above, but this could easily be expanded upon, and 13 different types are available.

There are, of course, times when we do want to use pivot_table, such as when performing multi-dimensional operations.

To illustrate what this means, let’s reuse the ranking groupings we made using conditional statements and attempt to display the number of times a URL ranks within each group.

ranking_groupings = df.groupby(['URL', 'Grouping']).agg(
     url_frequency=('Keyword', 'count'),
     )
python groupby groupingScreenshot from VS Code, November 2022

This isn’t the best format to use, as multiple rows have been created for each URL.

Instead, we can use pivot_table, which will display the data in different columns:

pivot = pd.pivot_table(df,
index=['URL'],
columns=['Grouping'],
aggfunc="size",
fill_value=0,
)
pivot table PythonScreenshot from VS Code, November 2022

Final Thoughts

Whether you’re looking for inspiration to start learning Python, or are already leveraging it in your SEO workflows, I hope that the above examples help you along on your journey.

As promised, you can find a Google Colab notebook with all of the code snippets here.

In truth, we’ve barely scratched the surface of what’s possible, but understanding the basics of Python data analysis will give you a solid base upon which to build.

Advertisement

More resources:


Featured Image: mapo_japan/Shutterstock



Source link

Keep an eye on what we are doing
Be the first to get latest updates and exclusive content straight to your email inbox.
We promise not to spam you. You can unsubscribe at any time.
Invalid email address

SEO

Top Priorities, Challenges, And Opportunities

Published

on

By

Top Priorities, Challenges, And Opportunities

The world of search has seen massive change recently. Whether you’re still in the planning stages for this year or underway with your 2024 strategy, you need to know the new SEO trends to stay ahead of seismic search industry shifts.

It’s time to chart a course for SEO success in this changing landscape.

Watch this on-demand webinar as we explore exclusive survey data from today’s top SEO professionals and digital marketers to inform your strategy this year. You’ll also learn how to navigate SEO in the era of AI, and how to gain an advantage with these new tools.

You’ll hear:

  • The top SEO priorities and challenges for 2024.
  • The role of AI in SEO – how to get ahead of the anticipated disruption of SGE and AI overall, plus SGE-specific SEO priorities.
  • Winning SEO resourcing strategies and reporting insights to fuel success.

With Shannon Vize and Ryan Maloney, we’ll take a deep dive into the top trends, priorities, and challenges shaping the future of SEO.

Discover timely insights and unlock new SEO growth potential in 2024.

Advertisement

View the slides below or check out the full webinar for all the details.

Join Us For Our Next Webinar!

10 Successful Ways To Improve Your SERP Rankings [With Ahrefs]

Reserve your spot and discover 10 quick and easy SEO wins to boost your site’s rankings.

Source link

Keep an eye on what we are doing
Be the first to get latest updates and exclusive content straight to your email inbox.
We promise not to spam you. You can unsubscribe at any time.
Invalid email address
Continue Reading

SEO

E-E-A-T’s Google Ranking Influence Decoded

Published

on

By

E-E-A-T's Google Ranking Influence Decoded

The idea that something is not a ranking factor that nevertheless plays a role in ranking websites seems to be logically irreconcilable. Despite seeming like a paradox that cancels itself out, SearchLiaison recently tweeted some comments that go a long way to understanding how to think about E-E-A-T and apply it to SEO.

What A Googler Said About E-E-A-T

Marie Haynes published a video excerpt on YouTube from an event at which a Googler spoke, essentially doubling down on the importance of E-A-T.

This is what he said:

“You know this hasn’t always been there in Google and it’s something that we developed about ten to twelve or thirteen years ago. And it really is there to make sure that along the lines of what we talked about earlier is that it really is there to ensure that the content that people consume is going to be… it’s not going to be harmful and it’s going to be useful to the user. These are principles that we live by every single day.

And E-A-T, that template of how we rate an individual site based off of Expertise, Authoritativeness and Trustworthiness, we do it to every single query and every single result. So it’s actually very pervasive throughout everything that we do .

I will say that the YMYL queries, the Your Money or Your Life Queries, such as you know when I’m looking for a mortgage or when I’m looking for the local ER,  those we have a particular eye on and we pay a bit more attention to those queries because clearly they’re some of the most important decisions that people can make.

Advertisement

So I would say that E-A-T has a bit more of an impact there but again, I will say that E-A-T applies to everything, every single query that we actually look at.”

How can something be a part of every single search query and not be a ranking factor, right?

Background, Experience & Expertise In Google Circa 2012

Something to consider is that in 2012 Google’s senior engineer at the time, Matt Cutts, said that experience and expertise brings a measure of quality to content and makes it worthy of ranking.

Matt Cutts’ remarks on experience and expertise were made in an interview with Eric Enge.

Discussing whether the website of a hypothetical person named “Jane” deserves to rank with articles that are original variations of what’s already in the SERPs.

Matt Cutts observed:

Advertisement

“While they’re not duplicates they bring nothing new to the table.

Google would seek to detect that there is no real differentiation between these results and show only one of them so we could offer users different types of sites in the other search results.

They need to ask themselves what really is their value add? …they need to figure out what… makes them special.

…if Jane is just churning out 500 words about a topic where she doesn’t have any background, experience or expertise, a searcher might not be as interested in her opinion.”

Matt then cites the example of Pulitzer Prize-Winning movie reviewer Roger Ebert as a person with the background, experience and expertise that makes his opinion valuable to readers and the content worthy of ranking.

Matt didn’t say that a webpage author’s background, experience and expertise were ranking factors. But he did say that these are the kinds of things that can differentiate one webpage from another and align it to what Google wants to rank.

He specifically said that Google’s algorithm detects if there is something different about it that makes it stand out. That was in 2012 but not much has changed because Google’s John Mueller says the same thing.

Advertisement

For example, in 2020 John Mueller said that differentiation and being compelling is important for getting Google to notice and rank a webpage.

“So with that in mind, if you’re focused on kind of this small amount of content that is the same as everyone else then I would try to find ways to significantly differentiate yourselves to really make it clear that what you have on your website is significantly different than all of those other millions of ringtone websites that have kind of the same content.

…And that’s the same recommendation I would have for any kind of website that offers essentially the same thing as lots of other web sites do.

You really need to make sure that what you’re providing is unique and compelling and high quality so that our systems and users in general will say, I want to go to this particular website because they offer me something that is unique on the web and I don’t just want to go to any random other website.”

In 2021, in regard to getting Google to index a webpage, Mueller also said:

“Is it something the web has been waiting for? Or is it just another red widget?”

This thing about being compelling and different than other sites, it’s something that’s been a part of Google’s algorithm awhile, just like the Googler in the video said, just like Matt Cutts said and exactly like what Mueller has said as well.

Are they talking about signals?

Advertisement

E-EA-T Algorithm Signals

We know there’s something in the algorithm that relates to someone’s expertise and background that Google’s looking for. The table is set and we can dig into the next step of what it all means.

A while back back I remember reading something that Marie Haynes said about E-A-T, she called it a framework. And I thought, now that’s an interesting thing she just did, she’s conceptualizing E-A-T.

When SEOs discussed E-A-T it was always in the context of what to do in order to demonstrate E-A-T. So they looked at the Quality Raters Guide for guidance, which kind of makes sense since it’s a guide, right?

But what I’m proposing is that the answer isn’t really in the guidelines or anything that the quality raters are looking for.

The best way to explain it is to ask you to think about the biggest part of Google’s algorithm, relevance.

What’s relevance? Is it something you have to do? It used to be about keywords and that’s easy for SEOs to understand. But it’s not about keywords anymore because Google’s algorithm has natural language understanding (NLU). NLU is what enables machines to understand language in the way that it’s actually spoken (natural language).

Advertisement

So, relevance is just something that’s related or connected to something else. So, if I ask, how do I satiate my thirst? The answer can be water, because water quenches the thirst.

How is a site relevant to the search query: “how do I satiate my thirst?”

An SEO would answer the problem of relevance by saying that the webpage has to have the keywords that match the search query, which would be the words “satiate” and “thirst.”

The next step the SEO would take is to extract the related entities for “satiate” and “thirst” because every SEO “knows” they need to do entity research to understand how to make a webpage that answers the search query, “How do I satiate my thirst?”

Hypothetical Related entities:

  • Thirst: Water, dehydration, drink,
  • Satiate: Food, satisfaction, quench, fulfillment, appease

Now that the SEO has their entities and their keywords they put it all together and write a 600 word essay that uses all their keywords and entities so that their webpage is relevant for the search query, “How do I satiate my thirst?”

I think we can stop now and see how silly that is, right? If someone asked you, “How do I satiate my thirst?” You’d answer, “With water” or “a cold refreshing beer” because that’s what it means to be relevant.

Advertisement

Relevance is just a concept. It doesn’t have anything to do with entities or keywords in today’s search algorithms because the machine is understanding search queries as natural language, even more so with AI search engines.

Similarly, E-E-A-T is also just a concept. It doesn’t have anything to do with author bios, LinkedIn profiles, it doesn’t have anything at all to do with making your content say that you handled the product that’s being reviewed.

Here’s what SearchLiaison recently said about an E-E-A-T, SEO and Ranking:

“….just making a claim and talking about a ‘rigorous testing process’ and following an ‘E-E-A-T checklist’ doesn’t guarantee a top ranking or somehow automatically cause a page to do better.”

Here’s the part where SearchLiaison ties a bow around the gift of E-E-A-T knowledge:

“We talk about E-E-A-T because it’s a concept that aligns with how we try to rank good content.”

E-E-A-T Can’t Be Itemized On A Checklist

Remember how we established that relevance is a concept and not a bunch of keywords and entities? Relevance is just answering the question.

E-E-A-T is the same thing. It’s not something that you do. It’s closer to something that you are.

Advertisement

SearchLiaison elaborated:

“…our automated systems don’t look at a page and see a claim like “I tested this!” and think it’s better just because of that. Rather, the things we talk about with E-E-A-T are related to what people find useful in content. Doing things generally for people is what our automated systems seek to reward, using different signals.”

A Better Understanding Of E-E-A-T

I think it’s clear now how E-E-A-T isn’t something that’s added to a webpage or is something that is demonstrated on the webpage. It’s a concept, just like relevance.

A good way to think o fit is if someone asks you a question about your family and you answer it. Most people are pretty expert and experienced enough to answer that question. That’s what E-E-A-T is and how it should be treated when publishing content, regardless if it’s YMYL content or a product review, the expertise is just like answering a question about your family, it’s just a concept.

Featured Image by Shutterstock/Roman Samborskyi

Source link

Keep an eye on what we are doing
Be the first to get latest updates and exclusive content straight to your email inbox.
We promise not to spam you. You can unsubscribe at any time.
Invalid email address
Continue Reading

SEO

Google Announces A New Carousel Rich Result

Published

on

By

Google Announces A New Carousel Rich Result

Google announced a new carousel rich result that can be used for local businesses, products, and events which will show a scrolling horizontal carousel displaying all of the items in the list. It’s very flexible and can even be used to create a top things to do in a city list that combines hotels, restaurants, and events. This new feature is in beta, which means it’s being tested.

The new carousel rich result is for displaying lists in a carousel format. According to the announcement the rich results is limited to the following types:

LocalBusiness and its subtypes, for example:
– Restaurant
– Hotel
– VacationRental
– Product
– Event

An example of subtypes is Lodgings, which is a subset of LocalBusiness.

Here is the Schema.org hierarchical structure that shows the LodgingBusiness type as being a subset of the LocalBusiness type.

  • Thing > Organization > LocalBusiness > LodgingBusiness
  • Thing > Place > LocalBusiness > LodgingBusiness

ItemList Structured Data

The carousel displays “tiles” that contain information from the webpage that’s about the price, ratings and images. The order of what’s in the ItemList structured data is the order that they will be displayed in the carousel.

Advertisement

Publishers must use the ItemList structured data in order to become eligible for the new rich result

All information in the ItemList structured data must be on the webpage. Just like any other structured data, you can’t stuff the structured data with information that is not visible on the webpage itself.

There are two important rules when using this structured data:

  1. 1. The ItemList type must be the top level container for the structured data.
  2. 2. All the URLs of in the list must point to different webpages on the same domain.

The part about the ItemList being the top level container means that the structured data cannot be merged together with another structured data where the top-level container is something other than ItemList.

For example, the structured data must begin like this:

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "ItemList", "itemListElement": [ { "@type": "ListItem", "position": 1,

A useful quality of this new carousel rich result is that publishers can mix and match the different entities as long as they’re within the eligible structured data types.

Eligible Structured Data Types

Advertisement
  • LocalBusiness and its subtypes
  • Product
  • Event

Google’s announcement explains how to mix and match the different structured data types:

“You can mix and match different types of entities (for example, hotels, restaurants), if needed for your scenario. For example, if you have a page that has both local events and local businesses.”

Here is an example of a ListItem structured data that can be used in a webpage about Things To Do In Paris.

The following structured data is for two events and a local business (the Eiffel Tower):

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "ItemList", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@type": "Event", "name": "Paris Seine River Dinner Cruise", "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ], "offers": { "@type": "Offer", "price": 45.00, "priceCurrency": "EUR" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.2, "reviewCount": 690 }, "url": "https://www.example.com/event-location1" } }, { "@type": "ListItem", "position": 2, "item": { "@type": "LocalBusiness", "name": "Notre-Dame Cathedral", "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ], "priceRange": "$", "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.8, "reviewCount": 4220 }, "url": "https://www.example.com/localbusiness-location" } }, { "@type": "ListItem", "position": 3, "item": { "@type": "Event", "name": "Eiffel Tower With Host Summit Tour", "image": [ "https://example.com/photos/1x1/photo.jpg", "https://example.com/photos/4x3/photo.jpg", "https://example.com/photos/16x9/photo.jpg" ], "offers": { "@type": "Offer", "price": 59.00, "priceCurrency": "EUR" }, "aggregateRating": { "@type": "AggregateRating", "ratingValue": 4.9, "reviewCount": 652 }, "url": "https://www.example.com/event-location2" } } ] } </script>

Be As Specific As Possible

Google’s guidelines recommends being as specific as possible but that if there isn’t a structured data type that closely matches with the type of business then it’s okay to use the more generic LocalBusiness structured data type.

“Depending on your scenario, you may choose the best type to use. For example, if you have a list of hotels and vacation rentals on your page, use both Hotel and VacationRental types. While it’s ideal to use the type that’s closest to your scenario, you can choose to use a more generic type (for example, LocalBusiness).”

Can Be Used For Products

A super interesting use case for this structured data is for displaying a list of products in a carousel rich result.

Advertisement

The structured data for that begins as a ItemList structured data type like this:

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "ItemList", "itemListElement": [ { "@type": "ListItem", "position": 1, "item": { "@type": "Product",

The structured data can list images, ratings, reviewCount, and currency just like any other product listing, but doing it like this will make the webpage eligible for the carousel rich results.

Google has a list of recommended recommended properties that can be used with the Products version, such as offers, offers.highPrice, and offers.lowPrice.

Good For Local Businesses and Merchants

This new structured data is a good opportunity for local businesses and publishers that list events, restaurants and lodgings to get in on a new kind of rich result.

Using this structured data doesn’t guarantee that it will display as a rich result, it only makes it eligible for it.

This new feature is in beta, meaning that it’s a test.

Advertisement

Read the new developer page for this new rich result type:

Structured data carousels (beta)

Featured Image by Shutterstock/RYO Alexandre

Source link

Keep an eye on what we are doing
Be the first to get latest updates and exclusive content straight to your email inbox.
We promise not to spam you. You can unsubscribe at any time.
Invalid email address
Continue Reading

Trending

Follow by Email
RSS