SEO
Visualizing Hot Topics Using Python To Analyze News Sitemaps

News sitemaps use different and unique sitemap protocols to provide more information for the news search engines.
A news sitemap contains the news published in the last 48 hours.
News sitemap tags include the news publication’s title, language, name, genre, publication date, keywords, and even stock tickers.
How can you use these sitemaps to your advantage for content research and competitive analysis?
In this Python tutorial, you’ll learn a 10-step process for analyzing news sitemaps and visualizing topical trends discovered therein.
Housekeeping Notes To Get Us Started
This tutorial was written during Russia’s invasion of Ukraine.
Using machine learning, we can even label news sources and articles according to which news source is “objective” and which news source is “sarcastic.”
But to keep things simple, we will focus on topics with frequency analysis.
We will use more than 10 global news sources across the U.S. and U.K.
Note: We would like to include Russian news sources, but they do not have a proper news sitemap. Even if they had, they block the external requests.
Comparing the word occurrence of “invasion” and “liberation” from Western and Eastern news sources shows the benefit of distributional frequency text analysis methods.
What You Need To Analyze News Content With Python
The related Python libraries for auditing a news sitemap to understand the news source’s content strategy are listed below:
- Advertools.
- Pandas.
- Plotly Express, Subplots, and Graph Objects.
- Re (Regex).
- String.
- NLTK (Corpus, Stopwords, Ngrams).
- Unicodedata.
- Matplotlib.
- Basic Python Syntax Understanding.
10 Steps For News Sitemap Analysis With Python
All set up? Let’s get to it.
1. Take The News URLs From News Sitemap
We chose the “The Guardian,” “New York Times,” “Washington Post,” “Daily Mail,” “Sky News,” “BBC,” and “CNN” to examine the News URLs from the News Sitemaps.
df_guardian = adv.sitemap_to_df("http://www.theguardian.com/sitemaps/news.xml") df_nyt = adv.sitemap_to_df("https://www.nytimes.com/sitemaps/new/news.xml.gz") df_wp = adv.sitemap_to_df("https://www.washingtonpost.com/arcio/news-sitemap/") df_bbc = adv.sitemap_to_df("https://www.bbc.com/sitemaps/https-index-com-news.xml") df_dailymail = adv.sitemap_to_df("https://www.dailymail.co.uk/google-news-sitemap.xml") df_skynews = adv.sitemap_to_df("https://news.sky.com/sitemap-index.xml") df_cnn = adv.sitemap_to_df("https://edition.cnn.com/sitemaps/cnn/news.xml")
2. Examine An Example News Sitemap With Python
I have used BBC as an example to demonstrate what we just extracted from these news sitemaps.
df_bbc
The BBC Sitemap has the columns below.
df_bbc.columns

The general data structures of these columns are below.
df_bbc.info()

The BBC doesn’t use the “news_publication” column and others.
3. Find The Most Used Words In URLs From News Publications
To see the most used words in the news sites’ URLs, we need to use “str,” “explode”, and “split” methods.
df_dailymail["loc"].str.split("/").str[5].str.split("-").explode().value_counts().to_frame()
loc |
|
---|---|
article |
176 |
Russian |
50 |
Ukraine |
50 |
says |
38 |
reveals |
38 |
... |
... |
readers |
1 |
Red |
1 |
Cross |
1 |
provide |
1 |
weekend.html |
1 |
5445 rows × 1 column
We see that for the “Daily Mail,” “Russia and Ukraine” are the main topic.
4. Find The Most Used Language In News Publications
The URL structure or the “language” section of the news publication can be used to see the most used languages in news publications.
In this sample, we used “BBC” to see their language prioritization.
df_bbc["publication_language"].head(20).value_counts().to_frame()
publication_language | |
en |
698 |
fa |
52 |
sr |
52 |
ar |
47 |
mr |
43 |
hi |
43 |
gu |
41 |
ur |
35 |
pt |
33 |
te |
31 |
ta |
31 |
cy |
30 |
ha |
29 |
tr |
28 |
es |
25 |
sw |
22 |
cpe |
22 |
ne |
21 |
pa |
21 |
yo |
20 |
20 rows × 1 column
To reach out to the Russian population via Google News, every western news source should use the Russian language.
Some international news institutions started to perform this perspective.
If you are a news SEO, it’s helpful to watch Russian language publications from competitors to distribute the objective news to Russia and compete within the news industry.
5. Audit The News Titles For Frequency Of Words
We used BBC to see the “news titles” and which words are more frequent.
df_bbc["news_title"].str.split(" ").explode().value_counts().to_frame()
news_title |
|
---|---|
to |
232 |
in |
181 |
- |
141 |
of |
140 |
for |
138 |
... |
... |
ፊልም |
1 |
ብላክ |
1 |
ባንኪ |
1 |
ጕሒላ |
1 |
niile |
1 |
11916 rows × 1 columns
The problem here is that we have “every type of word in the news titles,” such as “contextless stop words.”
We need to clean these types of non-categorical terms to understand their focus better.
from nltk.corpus import stopwords stop = stopwords.words('english') df_bbc_news_title_most_used_words = df_bbc["news_title"].str.split(" ").explode().value_counts().to_frame() pat = r'b(?:{})b'.format('|'.join(stop)) df_bbc_news_title_most_used_words.reset_index(drop=True, inplace=True) df_bbc_news_title_most_used_words["without_stop_words"] = df_bbc_news_title_most_used_words["words"].str.replace(pat,"") df_bbc_news_title_most_used_words.drop(df_bbc_news_title_most_used_words.loc[df_bbc_news_title_most_used_words["without_stop_words"]==""].index, inplace=True) df_bbc_news_title_most_used_words

We have removed most of the stop words with the help of the “regex” and “replace” method of Pandas.
The second concern is removing the “punctuations.”
For that, we will use the “string” module of Python.
import string df_bbc_news_title_most_used_words["without_stop_word_and_punctation"] = df_bbc_news_title_most_used_words['without_stop_words'].str.replace('[{}]'.format(string.punctuation), '') df_bbc_news_title_most_used_words.drop(df_bbc_news_title_most_used_words.loc[df_bbc_news_title_most_used_words["without_stop_word_and_punctation"]==""].index, inplace=True) df_bbc_news_title_most_used_words.drop(["without_stop_words", "words"], axis=1, inplace=True) df_bbc_news_title_most_used_words
news_title |
without_stop_word_and_punctation |
|
---|---|---|
Ukraine |
110 |
Ukraine |
v |
83 |
v |
de |
61 |
de |
Ukraine: |
60 |
Ukraine |
da |
51 |
da |
... |
... |
... |
ፊልም |
1 |
ፊልም |
ብላክ |
1 |
ብላክ |
ባንኪ |
1 |
ባንኪ |
ጕሒላ |
1 |
ጕሒላ |
niile |
1 |
niile |
11767 rows × 2 columns
Or, use “df_bbc_news_title_most_used_words[“news_title”].to_frame()” to take a more clear picture of data.
news_title |
|
---|---|
Ukraine |
110 |
v |
83 |
de |
61 |
Ukraine: |
60 |
da |
51 |
... |
... |
ፊልም |
1 |
ብላክ |
1 |
ባንኪ |
1 |
ጕሒላ |
1 |
niile |
1 |
11767 rows × 1 columns
We see 11,767 unique words in the URLs of the BBC, and Ukraine is the most popular, with 110 occurrences.
There are different Ukraine-related phrases from the data frame, such as “Ukraine:.”
The “NLTK Tokenize” can be used to unite these types of different variations.
The next section will use a different method to unite them.
Note: If you want to make things easier, use Advertools as below.
adv.word_frequency(df_bbc["news_title"],phrase_len=2, rm_words=adv.stopwords.keys())
The result is below.

“adv.word_frequency” has the attributes “phrase_len” and “rm_words” to determine the length of the phrase occurrence and remove the stop words.
You may tell me, why didn’t I use it in the first place?
I wanted to show you an educational example with “regex, NLTK, and the string” so that you can understand what’s happening behind the scenes.
6. Visualize The Most Used Words In News Titles
To visualize the most used words in the news titles, you can use the code block below.
df_bbc_news_title_most_used_words["news_title"] = df_bbc_news_title_most_used_words["news_title"].astype(int) df_bbc_news_title_most_used_words["without_stop_word_and_punctation"] = df_bbc_news_title_most_used_words["without_stop_word_and_punctation"].astype(str) df_bbc_news_title_most_used_words.index = df_bbc_news_title_most_used_words["without_stop_word_and_punctation"] df_bbc_news_title_most_used_words["news_title"].head(20).plot(title="The Most Used Words in BBC News Titles")

You realize that there is a “broken line.”
Do you remember the “Ukraine” and “Ukraine:” in the data frame?
When we remove the “punctuation,” the second and first values become the same.
That’s why the line graph says that Ukraine appeared 60 times and 110 times separately.
To prevent such a data discrepancy, use the code block below.
df_bbc_news_title_most_used_words_1 = df_bbc_news_title_most_used_words.drop_duplicates().groupby('without_stop_word_and_punctation', sort=False, as_index=True).sum() df_bbc_news_title_most_used_words_1
news_title |
|
---|---|
without_stop_word_and_punctation |
|
Ukraine |
175 |
v |
83 |
de |
61 |
da |
51 |
и |
41 |
... |
... |
ፊልም |
1 |
ብላክ |
1 |
ባንኪ |
1 |
ጕሒላ |
1 |
niile |
1 |
11109 rows × 1 columns
The duplicated rows are dropped, and their values are summed together.
Now, let’s visualize it again.
7. Extract Most Popular N-Grams From News Titles
Extracting n-grams from the news titles or normalizing the URL words and forming n-grams for understanding the overall topicality is useful to understand which news publication approaches which topic. Here’s how.
import nltk import unicodedata import re def text_clean(content):
lemmetizer = nltk.stem.WordNetLemmatizer() stopwords = nltk.corpus.stopwords.words('english') content = (unicodedata.normalize('NFKD', content) .encode('ascii', 'ignore') .decode('utf-8', 'ignore') .lower()) words = re.sub(r'[^ws]', '', content).split() return [lemmetizer.lemmatize(word) for word in words if word not in stopwords]
raw_words = text_clean(''.join(str(df_bbc['news_title'].tolist())))
raw_words[:10]
OUTPUT>>> ['oneminute', 'world', 'news', 'best', 'generation', 'make', 'agyarkos', 'dream', 'fight', 'card']
The output shows we have “lemmatized” all the words in the news titles and put them in a list.
The list comprehension provides a quick shortcut for filtering every stop word easily.
Using “nltk.corpus.stopwords.words(“english”)” provides all the stop words in English.
But you can add extra stop words to the list to expand the exclusion of words.
The “unicodedata” is to canonicalize the characters.
The characters that we see are actually Unicode bytes like “U+2160 ROMAN NUMERAL ONE” and the Roman Character “U+0049 LATIN CAPITAL LETTER I” are actually the same.
The “unicodedata.normalize” distinguishes the character differences so that the lemmatizer can differentiate the different words with similar characters from each other.
pd.set_option("display.max_colwidth",90) bbc_bigrams = (pd.Series(ngrams(words, n = 2)).value_counts())[:15].sort_values(ascending=False).to_frame() bbc_trigrams = (pd.Series(ngrams(words, n = 3)).value_counts())[:15].sort_values(ascending=False).to_frame()
Below, you will see the most popular “n-grams” from BBC News.

To simply visualize the most popular n-grams of a news source, use the code block below.
bbc_bigrams.plot.barh(color="red", width=.8,figsize=(10 , 7))
“Ukraine, war” is the trending news.
You can also filter the n-grams for “Ukraine” and create an “entity-attribute” pair.

Crawling these URLs and recognizing the “person type entities” can give you an idea about how BBC approaches newsworthy situations.
But it is beyond “news sitemaps.” Thus, it is for another day.
To visualize the popular n-grams from news source’s sitemaps, you can create a custom python function as below.
def ngram_visualize(dataframe:pd.DataFrame, color:str="blue") -> pd.DataFrame.plot: dataframe.plot.barh(color=color, width=.8,figsize=(10 ,7)) ngram_visualize(ngram_extractor(df_dailymail))
The result is below.

To make it interactive, add an extra parameter as below.
def ngram_visualize(dataframe:pd.DataFrame, backend:str, color:str="blue", ) -> pd.DataFrame.plot: if backend=="plotly": pd.options.plotting.backend=backend return dataframe.plot.bar() else: return dataframe.plot.barh(color=color, width=.8,figsize=(10 ,7))
ngram_visualize(ngram_extractor(df_dailymail), backend="plotly")
As a quick example, check below.
8. Create Your Own Custom Functions To Analyze The News Source Sitemaps
When you audit news sitemaps repeatedly, there will be a need for a small Python package.
Below, you can find four different quick Python function chain that uses every previous function as a callback.
To clean a textual content item, use the function below.
def text_clean(content): lemmetizer = nltk.stem.WordNetLemmatizer() stopwords = nltk.corpus.stopwords.words('english') content = (unicodedata.normalize('NFKD', content) .encode('ascii', 'ignore') .decode('utf-8', 'ignore') .lower()) words = re.sub(r'[^ws]', '', content).split() return [lemmetizer.lemmatize(word) for word in words if word not in stopwords]
To extract the n-grams from a specific news website’s sitemap’s news titles, use the function below.
def ngram_extractor(dataframe:pd.DataFrame|pd.Series): if "news_title" in dataframe.columns: return dataframe_ngram_extractor(dataframe, ngram=3, first=10)
Use the function below to turn the extracted n-grams into a data frame.
def dataframe_ngram_extractor(dataframe:pd.DataFrame|pd.Series, ngram:int, first:int): raw_words = text_clean(''.join(str(dataframe['news_title'].tolist()))) return (pd.Series(ngrams(raw_words, n = ngram)).value_counts())[:first].sort_values(ascending=False).to_frame()
To extract multiple news websites’ sitemaps, use the function below.
def ngram_df_constructor(df_1:pd.DataFrame, df_2:pd.DataFrame): df_1_bigrams = dataframe_ngram_extractor(df_1, ngram=2, first=500) df_1_trigrams = dataframe_ngram_extractor(df_1, ngram=3, first=500) df_2_bigrams = dataframe_ngram_extractor(df_2, ngram=2, first=500) df_2_trigrams = dataframe_ngram_extractor(df_2, ngram=3, first=500) ngrams_df = { "df_1_bigrams":df_1_bigrams.index, "df_1_trigrams": df_1_trigrams.index, "df_2_bigrams":df_2_bigrams.index, "df_2_trigrams": df_2_trigrams.index, } dict_df = (pd.DataFrame({ key:pd.Series(value) for key, value in ngrams_df.items() }).reset_index(drop=True) .rename(columns={"df_1_bigrams":adv.url_to_df(df_1["loc"])["netloc"][1].split("www.")[1].split(".")[0] + "_bigrams", "df_1_trigrams":adv.url_to_df(df_1["loc"])["netloc"][1].split("www.")[1].split(".")[0] + "_trigrams", "df_2_bigrams": adv.url_to_df(df_2["loc"])["netloc"][1].split("www.")[1].split(".")[0] + "_bigrams", "df_2_trigrams": adv.url_to_df(df_2["loc"])["netloc"][1].split("www.")[1].split(".")[0] + "_trigrams"})) return dict_df
Below, you can see an example use case.
ngram_df_constructor(df_bbc, df_guardian)

Only with these nested four custom python functions can you do the things below.
- Easily, you can visualize these n-grams and the news website counts to check.
- You can see the focus of the news websites for the same topic or different topics.
- You can compare their wording or the vocabulary for the same topics.
- You can see how many different sub-topics from the same topics or entities are processed in a comparative way.
I didn’t put the numbers for the frequencies of the n-grams.
But, the first ranked ones are the most popular ones from that specific news source.
To examine the next 500 rows, click here.
9. Extract The Most Used News Keywords From News Sitemaps
When it comes to news keywords, they are surprisingly still active on Google.
For example, Microsoft Bing and Google do not think that “meta keywords” are a useful signal anymore, unlike Yandex.
But, news keywords from the news sitemaps are still used.
Among all these news sources, only The Guardian uses the news keywords.
And understanding how they use news keywords to provide relevance is useful.
df_guardian["news_keywords"].str.split().explode().value_counts().to_frame().rename(columns={"news_keywords":"news_keyword_occurence"})
You can see the most used words in the news keywords for The Guardian.
news_keyword_occurence |
|
---|---|
news, |
250 |
World |
142 |
and |
142 |
Ukraine, |
127 |
UK |
116 |
... |
... |
Cumberbatch, |
1 |
Dune |
1 |
Saracens |
1 |
Pearson, |
1 |
Thailand |
1 |
1409 rows × 1 column
The visualization is below.
(df_guardian["news_keywords"].str.split().explode().value_counts() .to_frame().rename(columns={"news_keywords":"news_keyword_occurence"}) .head(25).plot.barh(figsize=(10,8), title="The Guardian Most Used Words in News Keywords", xlabel="News Keywords", legend=False, ylabel="Count of News Keyword"))

The “,” at the end of the news keywords represent whether it is a separate value or part of another.
I suggest you not remove the “punctuations” or “stop words” from news keywords so that you can see their news keyword usage style better.
For a different analysis, you can use “,” as a separator.
df_guardian["news_keywords"].str.split(",").explode().value_counts().to_frame().rename(columns={"news_keywords":"news_keyword_occurence"})
The result difference is below.
news_keyword_occurence |
|
---|---|
World news |
134 |
Europe |
116 |
UK news |
111 |
Sport |
109 |
Russia |
90 |
... |
... |
Women's shoes |
1 |
Men's shoes |
1 |
Body image |
1 |
Kae Tempest |
1 |
Thailand |
1 |
1080 rows × 1 column
Focus on the “split(“,”).”
(df_guardian["news_keywords"].str.split(",").explode().value_counts() .to_frame().rename(columns={"news_keywords":"news_keyword_occurence"}) .head(25).plot.barh(figsize=(10,8), title="The Guardian Most Used Words in News Keywords", xlabel="News Keywords", legend=False, ylabel="Count of News Keyword"))
You can see the result difference for visualization below.

From “Chelsea” to “Vladamir Putin” or “Ukraine War” and “Roman Abramovich,” most of these phrases align with the early days of Russia’s Invasion of Ukraine.
Use the code block below to visualize two different news website sitemaps’ news keywords interactively.
df_1 = df_guardian["news_keywords"].str.split(",").explode().value_counts().to_frame().rename(columns={"news_keywords":"news_keyword_occurence"}) df_2 = df_nyt["news_keywords"].str.split(",").explode().value_counts().to_frame().rename(columns={"news_keywords":"news_keyword_occurence"}) fig = make_subplots(rows = 1, cols = 2) fig.add_trace( go.Bar(y = df_1["news_keyword_occurence"][:6].index, x = df_1["news_keyword_occurence"], orientation="h", name="The Guardian News Keywords"), row=1, col=2 ) fig.add_trace( go.Bar(y = df_2["news_keyword_occurence"][:6].index, x = df_2["news_keyword_occurence"], orientation="h", name="New York Times News Keywords"), row=1, col=1 ) fig.update_layout(height = 800, width = 1200, title_text="Side by Side Popular News Keywords") fig.show() fig.write_html("news_keywords.html")
You can see the result below.
To interact with the live chart, click here.
In the next section, you will find two different subplot samples to compare the n-grams of the news websites.
10. Create Subplots For Comparing News Sources
Use the code block below to put the news sources’ most popular n-grams from the news titles to a sub-plot.
import matplotlib.pyplot as plt import pandas as pd df1 = ngram_extractor(df_bbc) df2 = ngram_extractor(df_skynews) df3 = ngram_extractor(df_dailymail) df4 = ngram_extractor(df_guardian) df5 = ngram_extractor(df_nyt) df6 = ngram_extractor(df_cnn) nrow=3 ncol=2 df_list = [df1 ,df2, df3, df4, df5, df6] #df6 titles = ["BBC News Trigrams", "Skynews Trigrams", "Dailymail Trigrams", "The Guardian Trigrams", "New York Times Trigrams", "CNN News Ngrams"] fig, axes = plt.subplots(nrow, ncol, figsize=(25,32)) count=0 i = 0 for r in range(nrow): for c in range(ncol): (df_list[count].plot.barh(ax = axes[r,c], figsize = (40, 28), title = titles[i], fontsize = 10, legend = False, xlabel = "Trigrams", ylabel = "Count")) count+=1 i += 1
You can see the result below.

The example data visualization above is entirely static and doesn’t provide any interactivity.
Lately, Elias Dabbas, creator of Advertools, has shared a new script to take the article count, n-grams, and their counts from the news sources.
Check here for a better, more detailed, and interactive data dashboard.
The example above is from Elias Dabbas, and he demonstrates how to take the total article count, most frequent words, and n-grams from news websites in an interactive way.
Final Thoughts On News Sitemap Analysis With Python
This tutorial was designed to provide an educational Python coding session to take the keywords, n-grams, phrase patterns, languages, and other kinds of SEO-related information from news websites.
News SEO heavily relies on quick reflexes and always-on article creation.
Tracking your competitors’ angles and methods for covering a topic shows how the competitors have quick reflexes for the search trends.
Creating a Google Trends Dashboard and News Source Ngram Tracker for a comparative and complementary news SEO analysis would be better.
In this article, from time to time, I have put custom functions or advanced for loops, and sometimes, I have kept things simple.
Beginners to advanced Python practitioners can benefit from it to improve their tracking, reporting, and analyzing methodologies for news SEO and beyond.
More resources:
Featured Image: BestForBest/Shutterstock
SEO
Google Updating Cryptocurrency Advertising Policy For 2024

Google published an announcement of upcoming changes to their cryptocurrency advertising policies and advises advertisers to make themselves aware of the changes and prepare to be in compliance with the new requirements.
The upcoming updates are to Google’s Cryptocurrencies and related products policy for the advertisement of Cryptocurrency Coin Trusts. The changes are set to take effect on January 29th, 2024.
Cryptocurrency Coin Trusts are financial products that enable investors to trade shares in trusts holding substantial amounts of digital currency. These trusts provide investors with equity in cryptocurrencies without having direct ownership. They are also an option for creating a more diversified portfolio.
The policy updates by Google that are coming in 2024 aim to describe the scope and requirements for the advertisement of Cryptocurrency Coin Trusts. Advertisers targeting the United States will be able to promote these products and services as long as they abide by specific policies outlined in the updated requirements and that they also obtain certification from Google.
The updated policy changes are not limited to the United States. They will apply globally to all accounts advertising Cryptocurrency Coin Trusts.
Google’s announcement also reminded advertisers of their obligation for compliance to local laws in the areas where the ads are targeted.
Google’s approach for violations of the new policy will be to first give a warning before imposing an account suspension.
Advertisers that fail to comply with the updated policy will receive a warning at least seven days before a potential account suspension. This time period provides advertisers with an opportunity to fix non-compliance issues and to get back into compliance with the revised guidelines.
Advertisers are encouraged to refer to Google’s documentation on “About restricted financial products certification.”
The deadline for the change in policy is January 29th, 2024. Cryptocurrency Coin Trusts advertisers will need to pay close attention to the updated policies in order to ensure compliance.
Read Google’s announcement:
Updates to Cryptocurrencies and related products policy (December 2023)
SEO
SEO Trends You Can’t Ignore In 2024

Most SEO trends fade quickly. But some of them stick and deserve your attention.
Let’s explore what those are and how to take advantage of them.
If you give ChatGPT a title and ask it to write a blog post, it will—in seconds.
This is super impressive, but there are a couple of issues:
- Everyone else using ChatGPT is creating the same content. It’s the same for users of other GPT-powered AI writing tools, too—which is basically all of them.
- The content is extremely dull. Sure, you can ask ChatGPT to “make it more entertaining,” but it usually overcompensates and hands back a cringe version of the same boring content.
In the words of Gael Breton:
How to take advantage of this SEO trend
Don’t use AI to write entire articles. They’ll be boring as heck. Instead, use it as a creative sparring partner to help you write better content and automate monotonous tasks.
For example, you can ask ChatGPT To write an outline from a working title and a list of keywords (which you can pull from Ahrefs)—and it does a pretty decent job.
Prompt:
Create an outline for a post entitled “[working title]” based on these keywords: [list]
Result:


When you’ve written your draft, you can ask to polish it in seconds by asking ChatGPT to proofread it.


Then you can automate the boring stuff, like creating more enticing title tags…


… and writing a meta description:


If you notice a few months down the line that your content ranks well but hasn’t won the featured snippet, ChatGPT can help with that, too.
For example, Ahrefs tells us we rank in position 3 for “affiliate marketing” but don’t own the snippet.


If we check Google, the snippet is a definition. Asking ChatGPT to simplify our definition may solve this problem.


In short, there are a near-infinite number of ways to use ChatGPT (and other AI writing tools) to create better content. And all of them buck the trend of asking it to write boring, boilerplate articles from scratch.
Programmatic SEO refers to the creation of keyword-targeted pages in an automatic (or near automatic) way.
Nomadlist’s location pages are a perfect example:


Each page focuses on a specific city and shares the same core information—internet speeds, cost, temperature, etc. All of this information is pulled programmatically from a database and the site gets an estimated 46k monthly search visits in total.


Programmatic SEO is nothing new. It’s been around forever. It’s just the hot thing right now because AI tools like ChatGPT make it easier and more accessible than ever before.
The problem? As John Mueller pointed out on Twitter X, much of it is spam:
I love fire, but also programmatic SEO is often a fancy banner for spam.
— I am John – ⭐ Say no to cookies – biscuits only ⭐ (@JohnMu) July 25, 2023
How to take advantage of this SEO trend
Don’t use programmatic SEO to publish insane amounts of spam that’ll probably get hit in the next Google update. Use it to scale valuable content that will stand the test of time.
For example, Wise’s currency conversion pages currently get an estimated 31.7M monthly search visits:


This is because the content is actually useful. Each page features an interactive tool showing the live exchange rate for any amount…


… the exchange rate over time…


… a handy email notification option when the exchange rates exceed a certain amount…


… handy conversion charts for popular amounts…


… and a comparison of the cheapest ways to send money abroad in your chosen currency:


It doesn’t matter that all of these pages use the same template. The data is exactly what you want to see when you search [currency 1] to [currency 2]
.
That’s probably why Wise ranks in the top 10 for over 66,000 of these keywords:


Looking to take advantage of programmatic content in 2024 like Wise? Check out the guide below.
People love ChatGPT because it answers questions fast and succinctly, so it’s no surprise that generative AI is already making its way into search.
For example, if you ask Bing for a definition or how to do something basic, AI will generate an answer on the fly right there in the search results.




In other words, thanks to AI, users no longer have to click on a search result for answers to simple questions. It’s like featured snippets on steroids.
This might not be a huge deal right now, but when Google’s version of this (Search Generative Experience) comes out of beta, many websites will see clicks fall off a cliff.
How to take advantage of this SEO trend
Don’t invest too much in topics that generative AI can easily answer. You’ll only lose clicks like crazy to AI in the long run. Instead, start prioritizing topics that AI will struggle to answer.
How do you know which topics it will struggle to answer? Try asking ChatGPT. If it gives a good and concise answer, it’s clearly an easy question.
For example, there are hundreds of searches for how to calculate a percentage in Google Sheets every month in the US:


If you ask ChatGPT for the solution, it gives you a perfect answer in about fifty words.


This is the perfect example of a topic where generative AI will remove the need to click on a search result for many.
That’s probably not going to be the case for a topic like this:


Sure. Generative AI might be able to tell you how to create a template—but it can’t make one for you. And even if it can in the future, it will never be a personal finance expert with experience. You’ll always have to click on a search result for a template created by that person.
These are the kinds of topics to prioritize in 2024 and beyond.
Sidenote.
None of this means you should stop targeting “simple” topics altogether. You’ll always be able to get some traffic from them. My point is not to be obsessed with ranking for keywords whose days are numbered. Prioritize topics with long-term value instead.
Bonus: 3 SEO trends to ignore in 2024
Not all SEO trends move the needle. Here are just a few of those trends and why you should ignore them.
People are using voice search more than ever
In 2014, Google revealed that 41% of Americans use voice search daily. According to research by UpCity, that number was up to 50% as of 2022. I haven’t seen any data for 2023 yet, but I’d imagine it’s above 50%.
Why you should ignore this SEO trend
75% of voice search results come from a page ranking in the top 3, and 40.7% come from a featured snippet. If you’re already optimizing for those things, there’s not much more you can do.
People are using visual search for shopping more than ever
In 2022, Insider Intelligence reported that 22% of US adults have shopped with visual search (Google Lens, Bing Visual Search, etc.). That number is up from just 15% in 2021.
Why you should ignore this SEO trend
Much like voice search, there’s no real way to optimize for visual search. Sure, it helps to have good quality product images, optimized filenames and alt text, and product schema markup on your pages—but you should be doing this stuff anyway as it’s been a best practice since forever.
People are using Bing more than ever before
Bing’s Yusuf Mehdi announced in March 2023 that the search engine had surpassed 100M daily active users for the first time ever. This came just one month after the launch of AI-powered Bing.
Why you should ignore this SEO trend
Bing might be more popular than ever, but its market share still only stands at around ~3% according to estimates by Statcounter. Google’s market share stands at roughly 92%, so that’s the one you should be optimizing for.
Plus, it’s often the case that if you rank in Google, you also rank in Bing—so it really doesn’t deserve any focus.
Final thoughts
Keeping your finger on the pulse and taking advantage of trends makes sense, but don’t let them distract you from the boring stuff that’s always worked: find what people are searching for > create content about it > build backlinks > repeat.
Got questions? Ping me on Twitter X.
SEO
Mozilla VPN Security Risks Discovered

Mozilla published the results of a recent third-party security audit of its VPN services as part of it’s commitment to user privacy and security. The survey revealed security issues which were presented to Mozilla to be addressed with fixes to ensure user privacy and security.
Many search marketers use VPNs during the course of their business especially when using a Wi-Fi connection in order to protect sensitive data, so the trustworthiness of a VNP is essential.
Mozilla VPN
A Virtual Private Network (VPN), is a service that hides (encrypts) a user’s Internet traffic so that no third party (like an ISP) can snoop and see what sites a user is visiting.
VPNs also add a layer of security from malicious activities such as session hijacking which can give an attacker full access to the websites a user is visiting.
There is a high expectation from users that the VPN will protect their privacy when they are browsing on the Internet.
Mozilla thus employs the services of a third party to conduct a security audit to make sure their VPN is thoroughly locked down.
Security Risks Discovered
The audit revealed vulnerabilities of medium or higher severity, ranging from Denial of Service (DoS). risks to keychain access leaks (related to encryption) and the lack of access controls.
Cure53, the third party security firm, discovered and addressed several risks. Among the issues were potential VPN leaks to the vulnerability of a rogue extension that disabled the VPN.
The scope of the audit encompassed the following products:
- Mozilla VPN Qt6 App for macOS
- Mozilla VPN Qt6 App for Linux
- Mozilla VPN Qt6 App for Windows
- Mozilla VPN Qt6 App for iOS
- Mozilla VPN Qt6 App for Androi
These are the risks identified by the security audit:
- FVP-03-003: DoS via serialized intent
- FVP-03-008: Keychain access level leaks WG private key to iCloud
- VP-03-010: VPN leak via captive portal detection
- FVP-03-011: Lack of local TCP server access controls
- FVP-03-012: Rogue extension can disable VPN using mozillavpnnp (High)
The rogue extension issue was rated as high severity. Each risk was subsequently addressed by Mozilla.
Mozilla presented the results of the security audit as part of their commitment to transparency and to maintain the trust and security of their users. Conducting a third party security audit is a best practice for a VPN provider that helps assure that the VPN is trustworthy and reliable.
Read Mozilla’s announcement:
Mozilla VPN Security Audit 2023
Featured Image by Shutterstock/Meilun
-
SEO6 days ago
GPT Store Set To Launch In 2024 After ‘Unexpected’ Delays
-
SEARCHENGINES6 days ago
Google Core Update Done Followed By Intense Search Volatility, New Structured Data, Google Ads Head Steps Down & 20 Years Covering Search
-
PPC6 days ago
How to Get Clients for Your Agency (That You’ll Love Working With)
-
MARKETING6 days ago
The Complete Guide to Becoming an Authentic Thought Leader
-
WORDPRESS2 days ago
8 Best Zapier Alternatives to Automate Your Website
-
SEARCHENGINES6 days ago
Google Discover Showing Older Content Since Follow Feature Arrived
-
MARKETING5 days ago
OpenAI’s Drama Should Teach Marketers These 2 Lessons
-
SEO6 days ago
96.55% of Content Gets No Traffic From Google. Here’s How to Be in the Other 3.45% [New Research for 2023]
You must be logged in to post a comment Login