
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tools Archives - iPullRank</title>
	<atom:link href="https://ipullrank.com/category/tools/feed" rel="self" type="application/rss+xml" />
	<link>https://ipullrank.com/category/tools</link>
	<description>Digital Marketing Agency in NYC</description>
	<lastBuildDate>Thu, 31 Jul 2025 19:51:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://ipullrank.com/wp-content/uploads/2025/07/cropped-favicon-1-32x32.png</url>
	<title>Tools Archives - iPullRank</title>
	<link>https://ipullrank.com/category/tools</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Vector Embeddings is All You Need: SEO Use Cases for Vectorizing the Web with Screaming Frog</title>
		<link>https://ipullrank.com/vector-embeddings-is-all-you-need</link>
					<comments>https://ipullrank.com/vector-embeddings-is-all-you-need#respond</comments>
		
		<dc:creator><![CDATA[Mike King]]></dc:creator>
		<pubDate>Wed, 08 May 2024 21:41:21 +0000</pubDate>
				<category><![CDATA[Relevance Engineering]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[mike king best 2]]></category>
		<category><![CDATA[Popular article]]></category>
		<guid isPermaLink="false">https://ipullrank.com/?p=17504</guid>

					<description><![CDATA[<p>Since learning of the importance and magnitude of vector embeddings, I have been proposing that a link index should vectorize the web and make those representations of pages available to SEOs. Fundamentally, with the further integration of machine learning in Google’s ranking systems, vector embeddings are even more important to what we do than an [&#8230;]</p>
<p>The post <a href="https://ipullrank.com/vector-embeddings-is-all-you-need">Vector Embeddings is All You Need: SEO Use Cases for Vectorizing the Web with Screaming Frog</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="17504" class="elementor elementor-17504" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-0eb0a34 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="0eb0a34" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2b9bdc2" data-id="2b9bdc2" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-16d6878 elementor-widget elementor-widget-text-editor" data-id="16d6878" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Since learning of the importance and magnitude of vector embeddings, I have been proposing that a link index should vectorize the web and make those representations of pages available to SEOs. Fundamentally, with the further integration of machine learning in Google’s ranking systems, vector embeddings are even more important to what we do than an understanding of the link graph. Currently, only search engines and large language modelers have this data at scale. I believe every SEO tool should be providing this data about pages and keywords.</p><p class="p1">Google has been leveraging vector embeddings to understand the semantics of the web since the introduction of <a href="https://research.google/pubs/distributed-representations-of-words-and-phrases-and-their-compositionality/"><span class="s1">Word2Vec</span></a> in 2013 (<a href="https://medium.com/@manansuri/a-dummys-guide-to-word2vec-456444f3c673"><span class="s1">here’s a simpler explanation</span></a>) through the update we knew as Hummingbird, but the SEO software industry has continued to operate predominantly on the lexical model of natural language understanding. Lesser known tools like InLinks, WordLift, MarketMuse, MarketBrew and the various keyword clustering tools have all done things with this technology, but the popular SEO tools have not surfaced many semantic features.</p><p class="p1">To some degree this showcases the gap between modern information retrieval and search engine optimization as industries. The common (simplified) understanding of Google in our space is that their systems simply crawl pages, break the content into its lexical components, counts the presence, prominence, and distribution of words, reviews linking relationships, ranks pages by expanding queries and breaking them into n-grams. Once it retrieves posting lists based on the n-grams, it intersects the results, scores that intersected list, sorts by the score and presents the rankings. Then it reinforces what ranks based on user signals. Structurally, the model architecture looks like this:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-b4a1e60 elementor-widget elementor-widget-image" data-id="b4a1e60" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img fetchpriority="high" decoding="async" width="800" height="452" src="https://ipullrank.com/wp-content/uploads/2024/05/image19-1024x579.png" class="attachment-large size-large wp-image-17527" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/image19-1024x579.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/image19-300x170.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/image19-768x434.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/image19-825x466.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/image19-945x534.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/image19.png 1449w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-ed1ffb7 elementor-widget elementor-widget-text-editor" data-id="ed1ffb7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">That model is not wrong per se, because Google still does these things. It’s just not at all indicative of the state of the art with which Google Search operates because it does so much more.</p><p class="p1">Distinguished Google Researcher, Marc Najork, in his <a href="https://docs.google.com/presentation/d/19lAeVzPkh20Ly855tKDkz1uv-1pHV_9GxfntiTJPUug/edit"><span class="s1">Generative Information Retrieval presentation</span></a> (where the above image comes from) discussed how the state of the art has evolved to fusion-based approaches that are a hybrid between lexical and semantic models. Citing his Google Research team’s own 2020 paper <a href="https://arxiv.org/abs/2010.01195"><span class="s1">Leveraging Semantic and Lexical Matching to Improve the Recall of Document Retrieval Systems: A Hybrid Approach</span></a> where they showcase open source libraries to implement and examine the viability of the method. They combine <a href="https://en.wikipedia.org/wiki/Okapi_BM25"><span class="s1">BM25</span></a> (the lexical retrieval model SEO effectively still operates on) with Google’s <a href="https://research.google/blog/announcing-scann-efficient-vector-similarity-search/"><span class="s1">SCaNN</span></a> package for vector search with <a href="https://huggingface.co/blog/bert-101"><span class="s1">BERT</span></a> for dense vector embeddings and combine and re-rank the results with a method called RM3. </p>								</div>
				</div>
				<div class="elementor-element elementor-element-42a0593 elementor-widget elementor-widget-image" data-id="42a0593" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="800" height="479" src="https://ipullrank.com/wp-content/uploads/2024/05/the-hybrid-retrieval-approach.png" class="attachment-large size-large wp-image-17505" alt="the hybrid retrieval approach diagram" srcset="https://ipullrank.com/wp-content/uploads/2024/05/the-hybrid-retrieval-approach.png 906w, https://ipullrank.com/wp-content/uploads/2024/05/the-hybrid-retrieval-approach-300x180.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/the-hybrid-retrieval-approach-768x460.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/the-hybrid-retrieval-approach-825x494.png 825w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-ff1c99e elementor-widget elementor-widget-text-editor" data-id="ff1c99e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">One of the key differences in the models is the advent of nearest neighbor searching with dense vectors. This is why rankings often no longer behave the way we anticipate. Semantic matching, and Google’s specific improvements on it <a href="https://blog.google/products/search/how-ai-powers-great-search-results/#:~:text=But%20it%20wasn%E2%80%99t%20until%202018%2C%20when%20we%20introduced%20neural%20matching%20to%20Search%2C%20that%20we%20could%20use%20them%20to%20better%20understand%20how%20queries%20relate%20to%20pages."><span class="s1">“neural matching,”</span></a> is often a “fuzzier” understanding of relevance when you’re used to seeing the explicit presence of words in page titles, h1 tags, and distributed across body text and more links with targeted anchor text. </p><p class="p1">In fact, our mental model of how Google works is quite out of date. Based on what Najork presents in his deck, it looks a lot more like this:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-9963dc0 elementor-widget elementor-widget-image" data-id="9963dc0" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img decoding="async" width="800" height="448" src="https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system-1024x574.png" class="attachment-large size-large wp-image-17506" alt="architecture of hybrid lexical:semantic retrieval system" srcset="https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system-1024x574.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system-300x168.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system-768x430.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system-825x462.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system-945x529.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/architecture-of-hybrid-lexicalsemantic-retrieval-system.png 1453w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-6260c37 elementor-widget elementor-widget-text-editor" data-id="6260c37" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">As natural language processing technology has yielded denser embeddings (as compared to the sparse embeddings featured in approaches like TF-IDF), Google has improved its ability to capture and associate information on a passage, page, site, and author level. Google moved on a long time ago, but with the rapid advancements in vector embeddings we can catch up.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-56ea124 elementor-widget elementor-widget-heading" data-id="56ea124" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">What are Vector Embeddings?</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-0690a5d elementor-widget elementor-widget-text-editor" data-id="0690a5d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">As I explained in my <a href="https://ipullrank.com/content-relevance"><span class="s1">“Relevance is not Qualitative Measure for Search Engines”</span></a> piece, the vector space model is what powers the understanding of relevance between queries and documents. Vector embeddings are used to represent the query and the documents in that model.</p><p class="p1">I explained this in that post, but in the spirit of saving you a click and improving the relevance for this post, vector embeddings are a powerful technique in natural language processing (NLP) that represent words, phrases, or documents by plotting them as coordinates in multi-dimensional space. These vectors capture the semantic meaning and relationships between words, allowing machines to understand the nuances of language.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-52d712d elementor-widget elementor-widget-image" data-id="52d712d" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="366" src="https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-1024x468.png" class="attachment-large size-large wp-image-17507" alt="embedding model diagram" srcset="https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-1024x468.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-300x137.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-768x351.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-1536x702.png 1536w, https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-825x377.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram-945x432.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/embedding-model-diagram.png 1999w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-bc40f6c elementor-widget elementor-widget-text-editor" data-id="bc40f6c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">While TF-IDF and its variants yielded simplified word vectors that indicated the presence of words based on a given page&#8217;s vocabulary, the history of modern vector embeddings goes back a little over a decade ago. Seminal works like the aforementioned word2vec were introduced in 2013 and capabilities have rapidly improved since the advent of Google’s <a href="https://research.google/blog/transformer-a-novel-neural-network-architecture-for-language-understanding/"><span class="s1">Transformer</span></a>. These models learned word relationships by analyzing large text corpora, positioning similar words close together in the vector space. Transformer improved upon a concept called <a href="https://arxiv.org/abs/1706.03762"><span class="s1">Attention</span></a> wherein the language model developed the ability to also understand context and polysemy. So when I have the sentence “She bats her eyelashes flirtatiously at her date across the table” and the sentence “At dusk, bats emerged from the cave, flitting about in search of insects,” modern language models can now understand that the second usage of the word “bats” means the noun representing the animal while the first usage of the word “bats” is the verb representing the physical action.</p><p class="p1">Dense vector embeddings revolutionized search by improving upon semantic search (or vector search), which goes beyond keyword matching to understand the intent behind a query and the meaning of the documents being considered. Search engines can now identify synonyms and related concepts, leading to more relevant and accurate results.  When we say we’ve moved form keywords to concepts this is what we’re talking about. Information Retrieval is no longer solely reliant on the presence of specific words, a <i>concept</i> can be represented and measured.</p><p class="p1">Further still, vectors allow Google to effectively model representations of <a href="https://research.google/pubs/multi-aspect-dense-retrieval/"><span class="s1">queries</span></a>, <a href="https://arxiv.org/abs/1909.10506"><span class="s1">entities</span></a>, individual sentences, <a href="https://patents.google.com/patent/US11275895B1/en"><span class="s1">authors</span></a>, <a href="https://gofishdigital.com/blog/website-representation-vectors/"><span class="s1">websites</span></a>, and use those representations to fulfill the ideas behind <a href="https://ipullrank.com/why-e-a-t-core-updates-will-change-your-content-approach">E-E-A-T</a>.</p><p class="p1">State-of-the-art vector embeddings are trained on massive datasets and incorporate contextual information to capture complex relationships between words. This ongoing development continues to improve the accuracy and efficiency of search algorithms.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e09141f elementor-widget elementor-widget-heading" data-id="e09141f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Enter Screaming Frog SEO Spider’s Custom JavaScript</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-af909f8 elementor-widget elementor-widget-text-editor" data-id="af909f8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1"><span class="s1"><a href="https://www.screamingfrog.co.uk/seo-spider/">Screaming Frog SEO Spider</a></span> has been nudging the SEO space forward for over a decade. The team has continued to innovate in ways that the industry needs, and the SaaS tools are too slow to do. Being in the cloud has its advantages for scalability and speed, but there is nothing any of those tools can do that SFSS can&#8217;t, and plenty that it can do that those other tools won&#8217;t. When the SF team launches cutting edge features other tools should consider altering their roadmap.</p><p class="p1">Version 20 is no different. What&#8217;s great for my cause is that it seems they are in agreement that someone should help us vectorize the web.</p><p class="p1">Their new Custom JavaScript functionality allows users to run bespoke JS functions on pages as the spider crawls them. You can now do customized analysis and make calls to third party sources to enhance your crawl data. </p><p class="p1">While a lot of SEOs are going to use this upgrade to turn SFSS into Scrapebox, one of the operations that comes with the tool is code to generate vector embeddings from OpenAI as you crawl. This is specifically what is going to help you make the upgrade from lexical analysis to semantic.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-afc0c8b elementor-widget elementor-widget-heading" data-id="afc0c8b" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">JavaScript Functions in Screaming Frog</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-8cac4df elementor-widget elementor-widget-text-editor" data-id="8cac4df" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">I was going to explain the different functions for accessing things in SFSS, but instead I made you a <a href="https://chatgpt.com/g/g-JvVDxK5wj-kermit"><span class="s1">custom GPT called Kermit</span></a> with <a href="https://www.screamingfrog.co.uk/seo-spider/user-guide/configuration/#custom-javascript"><span class="s1">the documentation</span></a> to help you write your code. <i>Thank me later.</i></p><p class="p1">The main functional capabilities to know are that you can:</p><ul class="ul1"><li class="li1">run actions on the page </li><li class="li1">Run extractions from the page</li><li class="li1">save files based on either </li><li class="li1">load external scripts</li><li class="li1">run multiple operations</li><li class="li1">perform operations from the <a href="https://developer.chrome.com/docs/devtools/console/utilities"><span class="s1">Chrome Utilities API</span></a></li></ul><p class="p1">Unless you’re a JavaScript wizard, I recommend leaning heavily on the custom GPT to get yourself started. I also recommend contributing what you build to this public repository of SFSS custom JS scripts.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-98a7944 elementor-widget elementor-widget-heading" data-id="98a7944" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">How to Vectorize a Site with Screaming Frog SEO Spider</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-6509858 elementor-widget elementor-widget-text-editor" data-id="6509858" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">If you&#8217;ve used custom extractions in SFSS before, the new Custom JS extraction functionality is an expansion of that. You can define what you want to execute at runtime and store it in unique columns. To get you started, the SF team has prepared a series of templates, including one for capturing embeddings from OpenAI as you crawl. Here’s how you do it:</p><ol class="ol1"><li class="li1">In the Crawl Config select Custom &gt; Custom JavaScript</li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-3bb7429 elementor-widget elementor-widget-image" data-id="3bb7429" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="494" src="https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript-1024x632.png" class="attachment-large size-large wp-image-17508" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript-1024x632.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript-300x185.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript-768x474.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript-825x509.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript-945x583.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-crawl-config-custom-javascript.png 1304w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-cad53f5 elementor-widget elementor-widget-text-editor" data-id="cad53f5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">This brings you to a dialog box where you can add and test your custom JS code. Click Add from Library to get the party started.</p>

<ol class="ol1" start="2">
 	<li class="li1">Select the ChatGPT extract embeddings from page content</li>
</ol>								</div>
				</div>
				<div class="elementor-element elementor-element-7ff5e82 elementor-widget elementor-widget-image" data-id="7ff5e82" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="722" height="525" src="https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-open-ai-extraction.png" class="attachment-large size-large wp-image-17509" alt="screaming frog - open ai extraction" srcset="https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-open-ai-extraction.png 722w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-open-ai-extraction-300x218.png 300w" sizes="(max-width: 722px) 100vw, 722px" />															</div>
				</div>
				<div class="elementor-element elementor-element-a185083 elementor-widget elementor-widget-text-editor" data-id="a185083" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">In the system tab you’ll find a series of custom extractions and actions. There are things that can be pulled without external functionality as well as things that can use ChatGPT’s API or a local LLM via <a href="https://ollama.com/"><span class="s1">ollama</span></a>. For our purposes, you’ll want the “(ChatGPT) Extract embeddings from page content” function.</p>

<ol class="ol1" start="3">
 	<li class="li1">Enter your OpenAI API key.</li>
</ol>								</div>
				</div>
				<div class="elementor-element elementor-element-14f7989 elementor-widget elementor-widget-image" data-id="14f7989" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="566" src="https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key-1024x724.png" class="attachment-large size-large wp-image-17510" alt="Screaming Frog - Custom JavaScript Snippet Editor - OpenAI API Key" srcset="https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key-1024x724.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key-300x212.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key-768x543.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key-825x583.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key-945x668.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/Screaming-Frog-Custom-JavaScript-Snippet-Editor-OpenAI-API-Key.png 1122w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-8e31765 elementor-widget elementor-widget-text-editor" data-id="8e31765" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Once you’ve selected the extraction, you’ll need to configure the code by adding your <a href="https://help.openai.com/en/articles/4936850-where-do-i-find-my-openai-api-key"><span class="s1">OpenAI API key</span></a>. You can test it on the right by adding a URL and clicking test. What you’ll get back is a series of decimal numbers. These are your embeddings.</p>

<ol class="ol1" start="4">
 	<li class="li1">Configure your crawl as you normally would and make sure to enable JavaScript rendering and that crawling external links is enabled. Then let it run as normal.</li>
</ol>
<p class="p1">When you get your data back your Custom JavaScript tab will look like this:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-7aae18a elementor-widget elementor-widget-image" data-id="7aae18a" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="427" src="https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings-1024x547.png" class="attachment-large size-large wp-image-17511" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings-1024x547.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings-300x160.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings-768x411.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings-825x441.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings-945x505.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/screaming-frog-openai-embeddings.png 1083w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-7cd84a8 elementor-widget elementor-widget-text-editor" data-id="7cd84a8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">By default, the embeddings will only be computed on pages that are of text/html type, but embeddings can be multimodal, so if you wanted to compute them on images you could. For that you’d have to adjust the Content Types that the JS fires on and pass the images as bytes.</span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-8cf05a0 elementor-widget elementor-widget-heading" data-id="8cf05a0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Do I Have to Use OpenAI?</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-3b548e6 elementor-widget elementor-widget-text-editor" data-id="3b548e6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">No, you don’t. In fact, according to the <a href="https://huggingface.co/spaces/mteb/leaderboard"><span class="s1">HuggingFace Massive Text Embedding Benchmark (MTEB) Leaderboard</span></a>, they are not considered state of the art at this point. Google’s text-embedding-preview-0409 embeddings model is smaller with lower dimensionality and outperforms OpenAI’s <code>text-embedding-3-large</code> embeddings model in all tasks.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-a61dcec elementor-widget elementor-widget-image" data-id="a61dcec" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="427" src="https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-1024x546.png" class="attachment-large size-large wp-image-17512" alt="hugging face embedding benchmarks" srcset="https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-1024x546.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-300x160.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-768x409.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-1536x818.png 1536w, https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-825x440.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks-945x503.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/hugging-face-embedding-benchmarks.png 1708w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-8eb46f7 elementor-widget elementor-widget-text-editor" data-id="8eb46f7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<span style="font-weight: 400;">So, if we want closer parity to what Google is using in production, then we’d want to use the </span><a href="https://cloud.google.com/blog/products/ai-machine-learning/google-cloud-announces-new-text-embedding-models"><span style="font-weight: 400;">embeddings models in their Vertex AI</span></a><span style="font-weight: 400;"> offering. </span>

<span style="font-weight: 400;">You should know that Google’s embeddings are a fraction of a cent more expensive than OpenAI’s. OpenAI’s text-embedding-3-small is $0.00002 / 1K tokens while Google’s </span><code>text-embedding-preview-0409</code><span style="font-weight: 400;"> is $0.000025 / 1K tokens. If you did 100 million tokens (or the equivalent of two thousand novels not written by Stephen King), you’re spending $2 with OpenAI and $2.50 with Google. However, if you do batch requests to Google, the pricing is exactly the same. </span><i><span style="font-weight: 400;">Although, I wonder if this will change based on announcements at the upcoming Google I/O conference.</span></i>								</div>
				</div>
				<div class="elementor-element elementor-element-5fd2aad elementor-widget elementor-widget-heading" data-id="5fd2aad" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Accounting for Token Limits</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-36d842a elementor-widget elementor-widget-text-editor" data-id="36d842a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">The length of your content is also a factor since Google only accepts 3,071 input tokens, whereas OpenAI accepts 8,191. If your content is too long, you’ll get an error message that looks like this:</span></p><p> </p><pre><code class="language-">Error: {
  "error": {
    "message": "This model's maximum context length is 8192 tokens, however you requested 11738 tokens (11738 in your prompt; 0 for the completion). Please reduce your prompt; or completion length.",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-af89fb1 elementor-widget elementor-widget-text-editor" data-id="af89fb1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">In these cases you’d have to chunk the content and manage the embeddings into a single set for our use cases. It’s common practice to <a href="https://randorithms.com/2020/11/17/Adding-Embeddings.html"><span class="s1">average the embeddings</span></a> from the chunks into a single set of embeddings as follows:</p>
&nbsp;
<pre><code class="language-">const OPENAI_API_KEY = 'your_api_key_here';
const userContent = document.body.innerText;

function chatGptRequest() {
    if (new TextEncoder().encode(userContent).length > 8191) { // Checking byte length approximation for tokens
        // Function to break the string into chunks
        function chunkString(str, size) {
            const numChunks = Math.ceil(str.length / size);
            const chunks = new Array(numChunks);

            for (let i = 0, o = 0; i < numChunks; ++i, o += size) {
                chunks[i] = str.substring(o, o + size);
            }
            return chunks;
        }

        // Divide content into manageable chunks
        const chunks = chunkString(userContent, 8191);

        // Function to request batch embeddings for all chunks
        function chatGptBatchRequest(chunks) {
            return fetch('https://api.openai.com/v1/embeddings', {
                method: 'POST',
                headers: {
                    'Authorization': `Bearer ${OPENAI_API_KEY}`,
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({
                    model: "text-embedding-3-small",
                    input: chunks,
                    encoding_format: "float",
                })
            })
            .then(response => {
                if (!response.ok) {
                    return response.text().then(text => { throw new Error(text); });
                }
                return response.json();
            })
            .then(data => {
                if (data.data.length > 0) {
                    const numEmbeddings = data.data.length;
                    const embeddingLength = data.data[0].embedding.length;
                    const sumEmbedding = new Array(embeddingLength).fill(0);

                    data.data.forEach(embed => {
                        embed.embedding.forEach((value, index) => {
                            sumEmbedding[index] += value;
                        });
                    });

                    const averageEmbedding = sumEmbedding.map(sum => sum / numEmbeddings);
                    return averageEmbedding.toString();
                } else {
                    throw new Error("No embeddings returned from the API.");
                }
            });
        }

        // Make a single batch request with all chunks and process the average
        return chatGptBatchRequest(chunks);
    } else {
        // Process single embedding request if content is within the token limit
        return fetch('https://api.openai.com/v1/embeddings', {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${OPENAI_API_KEY}`,
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                model: "text-embedding-3-small",
                input: userContent,
                encoding_format: "float",
            })
        })
        .then(response => {
            if (!response.ok) {
                 return response.text().then(text => {throw new Error(text)});
            }
            return response.json();
        })
        .then(data => {
            console.log(data.data[0].embedding);
            return data.data[0].embedding.toString();
        });
    }
}

// Execute request and handle results
return chatGptRequest()
    .then(embeddings => seoSpider.data(embeddings))
    .catch(error => seoSpider.error(error));
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-e72a879 elementor-widget elementor-widget-text-editor" data-id="e72a879" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Using this code you won’t have to worry about the input length error. However, the 8.1k input tokens should work for most pages.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-465575f elementor-widget elementor-widget-heading" data-id="465575f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Using Google’s Embeddings</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-474af2e elementor-widget elementor-widget-text-editor" data-id="474af2e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Google’s REST APIs require OAuth (the annoying pop up window for authentication), so it&#8217;s not as simple as just making an HTTP request to an endpoint with an API key like with OpenAI. Since SFSS does not support OAuth for Custom JS (nor does it need to), you&#8217;d have to stand up some middleware between it and the Vertex AI API. What I do is setup a local server with an API that makes the API request to VertexAI</p>
<p class="p1">Here&#8217;s the code to do so using Flask:</p>

<pre><code class="language-">import logging
import sys
import os
from flask import Flask, request, jsonify
from google.auth import load_credentials_from_file
import tiktoken 
import numpy as np

from google.cloud import aiplatform
from google.oauth2 import service_account
from typing import List, Optional
from vertexai.language_models import TextEmbeddingInput, TextEmbeddingModel
import vertexai.preview

app = Flask(__name__)


os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = ‘[insert path to service account file here]’

def authenticate():
    """Load credentials from the environment variable."""
    credentials, project = load_credentials_from_file(os.environ["GOOGLE_APPLICATION_CREDENTIALS"])
    return credentials

credentials = authenticate()

def token_count(string: str, encoding_name: str) -> int:
    encoding = tiktoken.get_encoding(encoding_name)
    num_tokens = len(encoding.encode(string))
    return num_tokens

def split_text(text: str, max_tokens: int = 3000) -> List[str]:
    words = text.split()
    chunks = []
    current_chunk = []
    for word in words:
        if len(current_chunk) + 1 > max_tokens:
            chunks.append(' '.join(current_chunk))
            current_chunk = []
        current_chunk.append(word)
    if current_chunk:
        chunks.append(' '.join(current_chunk))
    return chunks

def embed_text(text: str, task: str = "RETRIEVAL_DOCUMENT",
               model_name: str = "text-embedding-preview-0409", dimensionality: Optional[int] = 256) -> List[float]:
    model = TextEmbeddingModel.from_pretrained(model_name)
    text_chunks = split_text(text)
    inputs = [TextEmbeddingInput(chunk, task) for chunk in text_chunks]
    kwargs = dict(output_dimensionality=dimensionality) if dimensionality else {}
    chunk_embeddings = [model.get_embeddings([input], **kwargs) for input in inputs]
    embeddings = [embedding.values for sublist in chunk_embeddings for embedding in sublist]
    average_embedding = np.mean(embeddings, axis=0)
    return average_embedding.tolist()

@app.route('/embed', methods=['POST'])
def handle_embed():
    data = request.json
    if not data or 'text' not in data or 'task' not in data:
        return jsonify({"error": "Request must contain 'text' and 'task' fields"}), 400
    text = data['text']
    task = data['task']
    try:
        embedding = embed_text(text, task)
        return jsonify({"embedding": embedding})
    except Exception as e:
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-3d80002 elementor-widget elementor-widget-text-editor" data-id="3d80002" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">To get this working, you&#8217;ll need to install the dependencies, <a href="https://cloud.google.com/vertex-ai/docs/start/cloud-environment#enable_vertexai_apis"><span class="s1">enable Vertex AI</span></a>, and <a href="https://cloud.google.com/iam/docs/keys-create-delete"><span class="s1">get a service key</span></a>. Here is the pip install one liner for the dependencies:</p><pre><code class="language-">pip install flask numpy google-cloud-aiplatform google-auth tiktoken vertexai</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-d4d409c elementor-widget elementor-widget-text-editor" data-id="d4d409c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Once you have the server running, you can setup a custom JS extraction to pull the data as follows:</p><pre><code class="language-">const userContent = document.body.innerText;

function vertextAiRequest() {
    return fetch('http://127.0.0.1:5000/embed', {
        method: 'POST',
        headers: {
            "Content-Type": "application/json",
        },
        body: JSON.stringify({
            task: "RETRIEVAL_DOCUMENT",
            text: `${userContent}`
            })
    })
    .then(response =&gt; {
        if (!response.ok) {
             return response.text().then(text =&gt; {throw new Error(text)});
        }
        return response.json();
    })
    .then(data =&gt; {
        return data.embedding.toString();
    });
}

return vertextAiRequest()
    .then(embeddings =&gt; seoSpider.data(embeddings))
    .catch(error =&gt; seoSpider.error(error));</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-7596c5a elementor-widget elementor-widget-text-editor" data-id="7596c5a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Here’s what the Vertex AI embeddings output will look like:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-5830773 elementor-widget elementor-widget-image" data-id="5830773" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="566" src="https://ipullrank.com/wp-content/uploads/2024/05/vertex-request-1024x724.png" class="attachment-large size-large wp-image-17515" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/vertex-request-1024x724.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/vertex-request-300x212.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/vertex-request-768x543.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/vertex-request-825x583.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/vertex-request-945x668.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/vertex-request.png 1122w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-fe6ed5d elementor-widget elementor-widget-heading" data-id="fe6ed5d" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">What About Open Source options?</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-241d626 elementor-widget elementor-widget-text-editor" data-id="241d626" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">This is all quite inexpensive, but you could also set up an embedding server locally via ollama and generate your embeddings for free using one of the open source pretrained models. For example, if you wanted to use the highly-rated <code>SFR-embedding-mistral</code> embeddings model in the same way, follow these steps:</p><ol class="ol1"><li class="li3"><span class="s1"><a href="https://ollama.com/download"><span class="s2">Download, install, and start ollama</span></a> </span></li><li class="li1">Confirm that it’s running by going to http://localhost:11434</li><li class="li1">At the command line download and run the model with this command: ollama run avr/<code>sfr-embedding-mistral</code>. To verify things are working properly you can run a query in Postman or with cURL.</li></ol>								</div>
				</div>
				<div class="elementor-element elementor-element-1f3a4f4 elementor-widget elementor-widget-image" data-id="1f3a4f4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="736" src="https://ipullrank.com/wp-content/uploads/2024/05/postman-query.png" class="attachment-large size-large wp-image-17514" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/postman-query.png 874w, https://ipullrank.com/wp-content/uploads/2024/05/postman-query-300x276.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/postman-query-768x706.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/postman-query-825x759.png 825w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-2e9eff5 elementor-widget elementor-widget-text-editor" data-id="2e9eff5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<ol start="4">
 	<li class="p1">Once you’ve confirmed it’s running you can use this code as a custom extraction for generating the embeddings.</li>
</ol>								</div>
				</div>
				<div class="elementor-element elementor-element-4a3753e elementor-widget elementor-widget-image" data-id="4a3753e" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="566" src="https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output-1024x724.png" class="attachment-large size-large wp-image-17513" alt="Vertex AI Output" srcset="https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output-1024x724.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output-300x212.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output-768x543.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output-825x583.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output-945x668.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/Vertex-AI-Output.png 1122w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-e16e7a4 elementor-widget elementor-widget-text-editor" data-id="e16e7a4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Here’s the code:</p><pre><code class="language-">const userContent = document.body.innerText;

function getEmbeddings(userContent) {
    const apiUrl = 'http://localhost:11434/api/embeddings';

    const postData = {
        "model": "avr/sfr-embedding-mistral",
        "prompt": userContent,
    };

    const fetchOptions = {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(postData)
    };

    return fetch(apiUrl, fetchOptions)
        .then(response =&gt; {
            if (!response.ok) {
                return response.text().then(text =&gt; {throw new Error(text)});
            }
            return response.json();
        })
        .then(data =&gt; {
            return data.embedding;
        });
}

return getEmbeddings(userContent)
  .then(embeddings =&gt; seoSpider.data(embeddings))
  .catch(error =&gt; seoSpider.error(error));
  
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-060a822 elementor-widget elementor-widget-text-editor" data-id="060a822" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Depending on the specs of your machine, ollama may slow down your crawl too much to use it for generating embeddings. It may timeout before the data is returned. Make sure to test it on a few URLs before you let your crawl go.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-3e3f5b3 elementor-widget elementor-widget-heading" data-id="3e3f5b3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Preparing Your Embeddings for Analysis</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-e253a4a elementor-widget elementor-widget-text-editor" data-id="e253a4a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Before we get into use cases, you need to know how to prepare the data for analysis. Embeddings are stored in SFSS as comma-separated strings, but embeddings are numerical and need to be converted back into floats to be used for analysis. I prefer to export the XLSX file rather than a CSV because too many tools have done me dirty when it comes to formatting. I don&#8217;t want any potential formatting issues to damage my hard-won data. However, my testing has shown that CSVs can work just fine here too.</p>
<p class="p1">Nevertheless, the conversion is simple with numpy. Here&#8217;s a function to make it happen after you load your file into a dataframe:</p>
<pre><code class="language-">def convert_strings_to_float(df, col, new_col_name):
  df = df[df[col].isna() == False]
  df[new_col_name] = df[col].str.split(',')
  df[new_float_col] = df[new_float_col].apply(lambda x: np.float64(x))
  df['EmbeddingLength'] = df[new_float_col].apply(lambda x: x.size)

  return df
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-bd2844d elementor-widget elementor-widget-text-editor" data-id="bd2844d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Now you have your embeddings in a dataframe and ready to use for analysis.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-89a8307 elementor-widget elementor-widget-heading" data-id="89a8307" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Indexing Your Vector Embeddings</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-aa214cb elementor-widget elementor-widget-text-editor" data-id="aa214cb" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">The first thing we want to do is build an index of the vectors so we can search them for various use cases. For vector searching, we’ll use Google’s SCaNN package. Here’s the code:</p>
<pre><code class="language-">def scann_search(dataset:np.ndarray, queries: np.ndarray, n_neighbors = 10, distance_measure = "dot_product", num_leaves = 2000, num_leaves_to_search = 100):
  normalized_dataset = dataset / np.linalg.norm(dataset, axis=1)[:, np.newaxis]

  searcher = scann.scann_ops_pybind.builder(normalized_dataset, n_neighbors, distance_measure).tree(
      num_leaves=num_leaves, num_leaves_to_search=num_leaves_to_search, training_sample_size=250000).score_ah(
      2, anisotropic_quantization_threshold=0.2).reorder(100).build()

  return searcher

def convert_scann_arrays_to_urls(arrays: np.array, df: pd.DataFrame,column):
    results = []
    for arr in arrays:
      results.append(df.iloc[arr.flatten()][column].tolist())
    return results

siteDf = siteDf[siteDf['openAiEmbeddings'].isna() == False]
siteDf['openAiEmbeddingsAsFloats'] = siteDf['openAiEmbeddings'].str.split(',')
siteDf['openAiEmbeddingsAsFloats'] = siteDf['openAiEmbeddingsAsFloats'].apply(lambda x: np.float64(x))
siteDf['EmbeddingLength'] = siteDf['openAiEmbeddingsAsFloats'].apply(lambda x: x.size)

if siteDf['EmbeddingLength'].unique().size == 1:
  d = siteDf['EmbeddingLength'].unique() #Number of dimensions for each value
else:
  print('Dimensionality reduction required to make all arrays the same size.')

dataset = np.vstack(siteDf['openAiEmbeddingsAsFloats'].values)
queries = dataset

siteSearcher = scann_search(dataset, queries)
siteSearcher.serialize(index_directory+'/site_scann_index')
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-b39d1af elementor-widget elementor-widget-text-editor" data-id="b39d1af" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">I&#8217;m using SCaNN, but you could use another package like Facebook’s <a href="https://github.com/facebookresearch/faiss"><span class="s1">FAISS</span></a> or Spotify’s <a href="https://github.com/spotify/annoy"><span class="s1">Annoy</span></a>.</p><p class="p1">Note: If you don’t want to do this with Python, you could also push the data to BigQuery and use <a href="https://cloud.google.com/bigquery/docs/vector-search-intro"><span class="s1">its engine for vector searches</span></a>.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e86b520 elementor-widget elementor-widget-heading" data-id="e86b520" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">Vectorizing your Keyword List</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-3cc8941 elementor-widget elementor-widget-text-editor" data-id="3cc8941" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">In the vector space model, vectors for queries are compared to vectors for documents to determine what are the most relevant documents for a user’s search. So, for much of your comparative analysis, you will want to vectorize your list of keywords to compare against with nearest neighbor searches and other operations. You can use similar code on a CSV of keywords with their landing pages. We’ll want to maintain the landing pages so we can compare against the pages that are considered the most relevant.</p><p class="p1">Here is the approach to doing it with OpenAI using an export of keyword data from Semrush:</p><pre><code class="language-"># Function to get embeddings and flatten them for SCANN
def get_openai_embeddings(keyword):
    response = openai.embeddings.create(
        input=keyword,
        model="text-embedding-3-small"  # Make sure to use the same embeddings as Screaming Frog
    )
    # Extract and flatten the embedding
    embedding_vector = response.data[0].embedding
    return np.array(embedding_vector).flatten()

semrushFile = 'ipullrank.com-organic.Positions-us-20220415-2024-05-05T16_03_31Z.csv'
keywordDf = read_file(semrushFile, 'CSV')
display(keywordDf)

# Loop through the DataFrame and get embeddings for each keyword
embeddings = []
for keyword in keywordDf['Keyword']:
    embeddings.append(get_openai_embeddings(keyword))

keywordDf['embeddings'] = embeddings

# Create a temporary DataFrame for Excel output with embeddings converted to strings
tempDf = keywordDf.copy()
tempDf['embeddings'] = tempDf['embeddings'].apply(lambda x: str(x))
tempDf.to_excel('semrush-embeddings.xlsx', index=False) # Save with embeddings as strings

# Display the updated DataFrame
print(keywordDf.head())
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-6b65e95 elementor-widget elementor-widget-text-editor" data-id="6b65e95" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">If you&#8217;re using Google’s embeddings they make a specific distinction between document and query embeddings. So, the code we used earlier will require the <code>“RETRIEVAL_QUERY”</code> task type to be specified. The only change that we make is calling the <code>embed_text()</code> function with the task variable set to <code>RETRIEVAL_QUERY</code>.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-be02b02 elementor-widget elementor-widget-image" data-id="be02b02" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="740" src="https://ipullrank.com/wp-content/uploads/2024/05/postman-embeddings.png" class="attachment-large size-large wp-image-17516" alt="postman embeddings" srcset="https://ipullrank.com/wp-content/uploads/2024/05/postman-embeddings.png 867w, https://ipullrank.com/wp-content/uploads/2024/05/postman-embeddings-300x278.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/postman-embeddings-768x710.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/postman-embeddings-825x763.png 825w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-3fa67c6 elementor-widget elementor-widget-text-editor" data-id="3fa67c6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">Here’s the adjustment to the code to make that happen:</span></p><pre><code class="language-"># Loop through the DataFrame and get embeddings for each keyword
embeddings = []
for keyword in keywordDf['Keyword']:
    <strong>embeddings.append(embed_text(keyword,”RETRIEVAL_QUERY”)
</strong></code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-bcb7713 elementor-widget elementor-widget-text-editor" data-id="bcb7713" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Now let’s create a SCaNN index of the keyword list:</p>

<pre><code class="language-">embeddings_matrix = np.vstack(keywordDf['embeddings'])

keywordSearcher = scann.scann_ops_pybind.builder(embeddings_matrix, 10, "dot_product").tree(
    num_leaves=200, num_leaves_to_search=100, training_sample_size=250000
).score_ah(2, anisotropic_quantization_threshold=0.2).reorder(100).build()
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-da3bfc4 elementor-widget elementor-widget-text-editor" data-id="da3bfc4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">In case you&#8217;re wondering, you should not compare embeddings from different sources because they are not the same length nor are they composed by the same language model. Be consistent with the embeddings model that you use across your analysis.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-35b2ece elementor-widget elementor-widget-heading" data-id="35b2ece" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h3 class="elementor-heading-title elementor-size-default">SEO Use Cases for Vectorized Crawls</h3>				</div>
				</div>
				<div class="elementor-element elementor-element-d2b0680 elementor-widget elementor-widget-text-editor" data-id="d2b0680" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Ok, now we can unlock some new capabilities that can enhance the level of analysis we can do. Typically, machine learning engineers use embeddings to do a variety of things, including:</p><ul class="ul1"><li class="li1"><b>Clustering &#8211;  </b>Clustering is the process of grouping a set of objects in such a way that objects in the same group (called a cluster) are more similar to each other than to those in other groups.</li><li class="li1"><b>Classification &#8211; </b>Classification involves assigning categories to objects based on input features, using trained models to predict the category for new, unseen data. I’m not going to cover classification today because that is worth its own post and I want to collect more spam and helpful content data and show you how to build an embeddings based classifier.</li><li class="li1"><b>Recommendations &#8211;</b> Recommendation systems suggest relevant items to users based on their preferences and past behavior.</li><li class="li1"><b>Similarity and Diversity Measurement &#8211;</b> This involves assessing how similar or different objects are from each other, often used in systems that need to understand variations or patterns among data points.</li><li class="li1"><b>Anomaly Detection &#8211;</b> Anomaly detection identifies rare items, events, or observations which raise suspicions by differing significantly from the majority of the data.</li><li class="li1"><b>Information Retrieval &#8211;</b> Information retrieval is the process of obtaining relevant information from a collection of resources that satisfies the information need from within large datasets.</li><li class="li1"><b>Machine Translation &#8211;</b> Machine translation automatically translates text from one language to another, using complex models to understand and convert languages.</li><li class="li1"><b>Text Generation &#8211;</b> Text generation is the process of automatically producing text, often mimicking human-like writing, using various algorithms and statistical techniques.</li></ul><p class="p1">This new SF feature unlocks your ability to apply these techniques to drive deep insights for SEO.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-12812b5 elementor-widget elementor-widget-heading" data-id="12812b5" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Keyword Mapping</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-31fb457 elementor-widget elementor-widget-text-editor" data-id="31fb457" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">The keyword-to-keyword and keyword-to-page relationships are the most important aspects we can directly impact as content creators and SEOs. Optimizing pages to improve their keyword targeting through copy adjustments and linking strategies is best reinforced through a determination of what page owns what keywords. In some cases, due to the array of ranking factors, you’ll find that what ranks for the keyword is not the best page on your site. To remedy that at scale, you can loop through your keyword vector embeddings and perform nearest neighbor searches on your document SCaNN index. Wherever the highest ranking URL does not match the current landing page, that’s a linking opportunity for optimization.</p><p class="p1">To do that we perform the search, add the URL to the dataframe and an indication of whether it’s a match. Very quickly we have an understanding of how where we need to improve our keyword targeting.</p><pre><code class="language-">queries = np.vstack(keywordDf['embeddings'].values) #Stacking all individual embeddings vertically into matrix

kwSearcher = scann_search(dataset, queries) # dataset is the same as before
nearest_neighbors = kwSearcher.search_batched(queries, final_num_neighbors=1)
matched_urls = convert_scann_arrays_to_urls(nearest_neighbors, siteDf, 'Address')

keywordDf['BestMatchURL'] = convert_scann_arrays_to_urls(neighbors, siteDf, 'Address')
keywordDf['BestMatchURL'] = keywordDf['BestMatchURL'].apply(lambda x: x[:1][0])

display(keywordDf)
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-50cb1f0 elementor-widget elementor-widget-text-editor" data-id="50cb1f0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">When we run this, the data tells me that our <a href="https://ipullrank.com/resources/guides-ebooks/modern-enterprise-seo-guide">guide to enterprise SEO</a> is considered more relevant for enterprise SEO queries than our <a href="https://ipullrank.com/enterprise-seo">enterprise SEO landing page</a>. Granted, our enterprise SEO page performs better, but looks like we need to optimize our content a bit better if we want the enterprise SEO landing page to rank better.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-2583dee elementor-widget elementor-widget-image" data-id="2583dee" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="333" src="https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-1024x426.png" class="attachment-large size-large wp-image-17517" alt="enterprise seo keywords" srcset="https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-1024x426.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-300x125.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-768x319.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-1536x639.png 1536w, https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-825x343.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords-945x393.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/enterprise-seo-keywords.png 1683w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-ccebd86 elementor-widget elementor-widget-heading" data-id="ccebd86" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Keyword Relevance Calculations </h4>				</div>
				</div>
				<div class="elementor-element elementor-element-b96f194 elementor-widget elementor-widget-text-editor" data-id="b96f194" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">The measure of relevance is the function of distance between embeddings. That is calculated in several ways: euclidean distance, dot product, and my preference, cosine similarity. I prefer it because of its simplicity and the ease of converting it into a score between 0 and 100. With the keyword and URL embeddings we can compare the mapped keyword to the URL to determine how relevant it is. You could also crawl competitor pages with SFSS and do the same. The comparison is simple. Find the embeddings for the URL and the keyword in their respective dataframes and perform cosine similarity.</p><pre><code class="language-"># Function to normalize embeddings
def normalize_embeddings(embeddings):
    norms = np.linalg.norm(embeddings, axis=1, keepdims=True)
    return (embeddings / norms).tolist()  # Normalize and convert to list

# Normalize the embeddings and convert them to lists for DataFrame storage
keywordDf['NormalizedEmbeddings'] = normalize_embeddings(np.vstack(keywordDf['embeddings'].values))
siteDf['NormalizedEmbeddings'] = normalize_embeddings(np.vstack(siteDf['OpenAI Embeddings 1ConvertedFloats'].values))

# Function to calculate cosine similarity
def cosine_similarity(embedding1, embedding2):
    return np.dot(embedding1, embedding2)

# Initialize a list to store cosine similarity results
cosine_similarities = []
relevance_values = []

# Loop through each keyword to calculate cosine similarity with its corresponding URL in siteDf
for index, row in keywordDf.iterrows():
    keyword_url = row['URL']
    keyword_embedding = row['NormalizedEmbeddings']  # This is now a list

    # Find the corresponding URL in siteDf
    if keyword_url in siteDf['Address'].values:
        # Get the embedding for the matching URL, which is also stored as a list
        url_embedding = siteDf.loc[siteDf['Address'] == keyword_url, 'NormalizedEmbeddings'].iloc[0]
        # Convert list to numpy array for calculation
        similarity = cosine_similarity(np.array(keyword_embedding), np.array(url_embedding))
        relevance = similarity * 100
    else:
        similarity = None  # Set similarity to None if no matching URL is found
        relevance = None

    cosine_similarities.append(similarity)
    relevance_values.append(relevance)

# Store the cosine similarities in the keywordDf
keywordDf['CosineSimilarity'] = cosine_similarities
keywordDf['Relevance'] = relevance_values


# Display or use the updated DataFrame
print(keywordDf[['Keyword', 'URL', 'CosineSimilarity','Relevance']])

keywordDf.to_excel('keyword-relevance.xlsx')
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-122286a elementor-widget elementor-widget-text-editor" data-id="122286a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">This is what our tool <a href="https://ipullrank.com/tools/orbitwise/">Orbitwise</a> does. </p><p class="p1">What you&#8217;re seeing here is an indication of low middling relevance for these keywords versus these landing pages.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-b9e77a1 elementor-widget elementor-widget-image" data-id="b9e77a1" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="580" src="https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity-1024x743.png" class="attachment-large size-large wp-image-17518" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity-1024x743.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity-300x218.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity-768x557.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity-825x599.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity-945x686.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/relevance-cosine-similarity.png 1130w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-e1a77bf elementor-widget elementor-widget-heading" data-id="e1a77bf" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Internal Linking and Redirect Mapping</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-06b4a9d elementor-widget elementor-widget-text-editor" data-id="06b4a9d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Link relevance is about parity and the higher the relationship between the source and target URLs, the more valuable the link.</p>
<p class="p1">When Overstock was migrating to bedbathandbeyond.com, <a href="https://ipullrank.com/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com"><span class="s1">I talked about how they could map the redirects as scale using nearest neighbor searches</span></a>. This same concept can be applied to identifying where to build internal links.</p>
<p class="p1">As we have mapped our keywords to landing pages, we now have an understanding of the best pages to own which keywords. Such analysis is especially useful when dealing with millions of pages versus millions of keywords. Assuming we want to build 10 links from different pages across the site, we can determine internal link sources for a given page by using keyword searches on the document index or we can do it by doing document searches on the document index.</p>
<p class="p1">The code is the same as what we did for keyword mapping, we just want more results. Let’s search for 10 neighbors this time.</p>

<pre><code class="language-"># Search siteDf for keywords, return 10 neighbors per keyword

queries = np.vstack(keywordDf['embeddings'].values) #Stacking all individual embeddings vertically into matrix

kwSearcher = scann_search(dataset, queries) # dataset is the same as before
neighbors, distances = siteSearcher.search_batched(queries, leaves_to_search = 150)

nearest_neighbors = kwSearcher.search_batched(queries, final_num_neighbors=5)

matched_urls = convert_scann_arrays_to_urls(nearest_neighbors, siteDf, 'Address')

keywordDf['InternalLinkSuggestions'] = convert_scann_arrays_to_urls(neighbors, siteDf, 'Address')
keywordDf['InternalLinkSuggestions'] = keywordDf['InternalLinkSuggestions'].apply(lambda x: x[1:])
display(keywordDf)

# Create a temporary DataFrame for Excel output with embeddings converted to strings
tempDf = keywordDf.copy()
tempDf['embeddings'] = tempDf['embeddings'].apply(lambda x: str(x))
tempDf.to_excel('keyword-internal-link-mapping.xlsx', index=False) # Save with embeddings as strings
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-18e4a7d elementor-widget elementor-widget-text-editor" data-id="18e4a7d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">For the document version, we select the document embedding and use it to perform the search on the document index.</p><pre><code class="language-">queries = dataset

siteSearcher = scann_search(dataset, queries)

neighbors, distances = siteSearcher.search_batched(queries, leaves_to_search = 150)

nearest_neighbors = siteSearcher.search_batched(queries, final_num_neighbors=10)

matched_urls = convert_scann_arrays_to_urls(nearest_neighbors, siteDf, 'Address')

siteDf['PageToPageLinkMapping'] = convert_scann_arrays_to_urls(neighbors, siteDf, 'Address')
siteDf['PageToPageLinkMapping'] = siteDf['PageToPageLinkMapping'].apply(lambda x: x[2:])
display(siteDf)
siteDf.to_excel('page-to-page-link-mapping.xlsx')
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-b99d6e2 elementor-widget elementor-widget-text-editor" data-id="b99d6e2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Here are the results for our Enterprise SEO page based on the page to page calculations.</p>
<pre><code class="language-">['https://ipullrank.com/resources/guides-ebooks/modern-enterprise-seo-guide/chapter-1', 'https://ipullrank.com/', 'https://ipullrank.com/seo-for-the-procurement-professional', 'https://ipullrank.com/services/technical-seo', 'https://ipullrank.com/services', 'https://ipullrank.com/author/andrew-mcdermott/page/3', 'https://ipullrank.com/resources/guides-ebooks/modern-enterprise-seo-guide', 'https://ipullrank.com/11-common-enterprise-seo-problems-and-solutions']</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-6b13c67 elementor-widget elementor-widget-text-editor" data-id="6b13c67" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">For redirect mapping, you’d crawl the old site and the new site to generate embeddings for both. Then search the target site’s index with embeddings to the target site with top k set to 1. Using this data, you can determine the redirect relationships and limit what Google might perceive as soft 404s.</p><pre><code class="language-">migratingSiteDf = read_file('migrating-site.xlsx', 'Excel')
migratingSiteDf = migratingSiteDf[migratingSiteDf['OpenAIEmbeddings'].isna() == False]
migratingSiteDf = migratingSiteDf[~migratingSiteDf['OpenAIEmbeddings'].str.contains('error')]
migratingSiteDf['OpenAIEmbeddingsFloats'] = migratingSiteDf['OpenAIEmbeddings'].str.split(',')

migratingSiteDf['OpenAIEmbeddingsFloats'] = migratingSiteDf['OpenAIEmbeddingsFloats'].apply(lambda x: np.array(x, dtype = float))

queries = np.vstack(migratingSiteDf['OpenAIEmbeddingsFloats'].values) #Stacking all individual embeddings vertically into matrix

migrationSearcher = scann_search(dataset, queries) # dataset is the same as before
neighbors, distances = migrationSearcher.search_batched(queries, leaves_to_search = 150)

nearest_neighbors = migrationSearcher.search_batched(queries, final_num_neighbors=1)

migratingSiteDf['MigrationTargetSuggestions'] = convert_scann_arrays_to_urls(neighbors, siteDf, 'Address')
migratingSiteDf['MigrationTargetSuggestions'] = migratingSiteDf['MigrationTargetSuggestions'].apply(lambda x: x[:1][0])

display(migratingSiteDf)
migratingSiteDf.to_excel('migration-recommendations.xlsx')
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-530fa70 elementor-widget elementor-widget-heading" data-id="530fa70" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Link Building Target Identification</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-a597c7e elementor-widget elementor-widget-text-editor" data-id="a597c7e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">This is another story for another day, but I do not believe the <a href="https://ipullrank.com/less-backlinks-better-rankings">volume approach for link building</a> works anymore. On the back of the advancements in natural language processing, Google is better at understanding and modeling relevance parity between the source and target of links. Links built from sources that are completely irrelevant to the subject matter are invalidated in modern PageRank calculations. My hypothesis is that this is an aspect of how SpamBrain works.</p><p class="p1">To that end, we can vectorize a list of pages we are considering for link building and compare them against the target page using cosine similarity to determine how relevant the page source page of the link is.</p><p class="p1">For this process, we’d:</p><ol class="ol1"><li class="li1">Identify a series of link targets using a tool like Ahrefs, Semrush, Pitchbox, or Respona</li><li class="li1">Crawl those pages with Screaming Frog to collect their embeddings. </li><li class="li1">Compare them against the embeddings for your site to get the cosine similarity.</li></ol><p class="p1">That yields a table that looks like the one below. When I sort ascending, that lets me know all the URLs that are not good fits for me to get links from. When we look at the scores, if they are not a 0.6 or higher, they are not relevant enough to build links from.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-e92e466 elementor-widget elementor-widget-image" data-id="e92e466" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="440" src="https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-1024x563.png" class="attachment-large size-large wp-image-17519" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-1024x563.png 1024w, https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-300x165.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-768x422.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-1536x844.png 1536w, https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-825x453.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold-945x519.png 945w, https://ipullrank.com/wp-content/uploads/2024/05/cosine-similarity-score-threshhold.png 1563w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-8c48cdb elementor-widget elementor-widget-text-editor" data-id="8c48cdb" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">Here’s the code to make it happen:</span></p><pre><code class="language-">import pandas as pd
import numpy as np
from scipy.spatial.distance import cdist

# Load the DataFrame
linkProspectsDf = pd.read_excel('link-prospects.xlsx')
linkProspectsDf = linkProspectsDf[linkProspectsDf['OpenAI Embeddings Long Inputs 1'].notna()]
linkProspectsDf = linkProspectsDf[~linkProspectsDf['OpenAI Embeddings Long Inputs 1'].str.contains('error|TypeError', regex=True)]

# Convert the string of numbers into a list of floats
def convert_embeddings(embedding_str):
    try:
        # Split the string into a list of strings, then convert each to float
        return np.array([float(num) for num in embedding_str.split(',')])
    except ValueError:
        # Return None or np.nan in case of conversion failure, which should be handled or filtered later
        return np.nan

linkProspectsDf['OpenAIEmbeddingsFloats'] = linkProspectsDf['OpenAI Embeddings Long Inputs 1'].apply(convert_embeddings)

# Remove rows where embeddings conversion failed (if any)
linkProspectsDf.dropna(subset=['OpenAIEmbeddingsFloats'], inplace=True)

# Normalize the embeddings
linkProspectsDf['normalized_embeddings'] = linkProspectsDf['OpenAIEmbeddingsFloats'].apply(lambda x: x / np.linalg.norm(x))
siteDf['normalized_embeddings'] = siteDf[new_float_col].apply(lambda x: x / np.linalg.norm(x))

# Specific URL to search for
specific_url = 'https://ipullrank.com/enterprise-seo'  # Change this to your specific URL

# Retrieve the normalized embedding for the specific URL
specific_embedding = siteDf[siteDf['Address'] == specific_url]['normalized_embeddings'].values[0]

# Prepare the embeddings array from the second dataframe
embeddings2 = np.stack(linkProspectsDf['normalized_embeddings'].values)

# Calculate cosine similarity
cosine_similarity_scores = 1 - cdist([specific_embedding], embeddings2, 'cosine')[0]

# Create a dataframe to store the results
results = pd.DataFrame({
    'Search Address': specific_url,
    'Target Address': linkProspectsDf['Address'],
    'Cosine Similarity Score': cosine_similarity_scores
})

# Optionally, sort the results by scores
results = results.sort_values(by='Cosine Similarity Score', ascending=False)
results.to_excel('link-prospect-relevance.xlsx')
display(results)
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-1af39bd elementor-widget elementor-widget-heading" data-id="1af39bd" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h4 class="elementor-heading-title elementor-size-default">Clustering Content</h4>				</div>
				</div>
				<div class="elementor-element elementor-element-2e732e8 elementor-widget elementor-widget-text-editor" data-id="2e732e8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">Clustering the content can help us form topical clusters and also identify anomalies where the content is not relevant to any other content on the site. As sites grow larger, it becomes more difficult to manage how often the same topics are covered. Using <a href="https://maartengr.github.io/BERTopic/getting_started/representation/llm.html"><span class="s1">BERTopic</span></a> with our embeddings we can build and visualize a topical map of our content. When thinking about how you might want to do some content pruning to further reinforce your clusters this is a great approach.</p><p class="p1">When we run clustering on the embeddings using BERTopic it automatically puts the content into meaningful groups. BERTopic integrates with ChatGPT which allows you to generate human-readable names of the topic that was modeled. This is a vast improvement over other topical modeling approaches that use keywords from the content as representations rather than user-friendly labels. </p><p class="p1">Once we run our clustering we can visualize them a few different ways. First as a clustered scatter plot:</p>								</div>
				</div>
				<div class="elementor-element elementor-element-9538953 elementor-widget elementor-widget-image" data-id="9538953" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="648" src="https://ipullrank.com/wp-content/uploads/2024/05/content-topics-visualization-with-t-SNE.png" class="attachment-large size-large wp-image-17520" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/content-topics-visualization-with-t-SNE.png 854w, https://ipullrank.com/wp-content/uploads/2024/05/content-topics-visualization-with-t-SNE-300x243.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/content-topics-visualization-with-t-SNE-768x622.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/content-topics-visualization-with-t-SNE-825x669.png 825w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-5162cd6 elementor-widget elementor-widget-text-editor" data-id="5162cd6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">We can also quickly look at the distribution of topics in a bar chart.</span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-b503781 elementor-widget elementor-widget-image" data-id="b503781" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="600" src="https://ipullrank.com/wp-content/uploads/2024/05/topic-probability-distribution.png" class="attachment-large size-large wp-image-17521" alt="topic probability distribution" srcset="https://ipullrank.com/wp-content/uploads/2024/05/topic-probability-distribution.png 800w, https://ipullrank.com/wp-content/uploads/2024/05/topic-probability-distribution-300x225.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/topic-probability-distribution-768x576.png 768w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-47c98a6 elementor-widget elementor-widget-text-editor" data-id="47c98a6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">And, we can cluster the topics hierarchically. </span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-f54dbd4 elementor-widget elementor-widget-image" data-id="f54dbd4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="280" src="https://ipullrank.com/wp-content/uploads/2024/05/hierarchical-clustering.png" class="attachment-large size-large wp-image-17522" alt="" srcset="https://ipullrank.com/wp-content/uploads/2024/05/hierarchical-clustering.png 1000w, https://ipullrank.com/wp-content/uploads/2024/05/hierarchical-clustering-300x105.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/hierarchical-clustering-768x269.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/hierarchical-clustering-825x289.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/hierarchical-clustering-945x331.png 945w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-275228c elementor-widget elementor-widget-text-editor" data-id="275228c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">You can also see how topics are related and not related to each other: </span></p>								</div>
				</div>
				<div class="elementor-element elementor-element-79ea1af elementor-widget elementor-widget-image" data-id="79ea1af" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="480" src="https://ipullrank.com/wp-content/uploads/2024/05/Garrett-Sussman-2.png" class="attachment-large size-large wp-image-17523" alt="intertopic distance map" srcset="https://ipullrank.com/wp-content/uploads/2024/05/Garrett-Sussman-2.png 1000w, https://ipullrank.com/wp-content/uploads/2024/05/Garrett-Sussman-2-300x180.png 300w, https://ipullrank.com/wp-content/uploads/2024/05/Garrett-Sussman-2-768x461.png 768w, https://ipullrank.com/wp-content/uploads/2024/05/Garrett-Sussman-2-825x495.png 825w, https://ipullrank.com/wp-content/uploads/2024/05/Garrett-Sussman-2-945x567.png 945w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-158b08c elementor-widget elementor-widget-text-editor" data-id="158b08c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">To do this we’ll also need the content itself so we can extract features from it to name the clusters. Capturing the content via SFSS is trivial. The code for the custom function is a one liner:</span></p><pre><code class="language-">return seoSpider.data(document.body.innerText);</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-114e1b4 elementor-widget elementor-widget-text-editor" data-id="114e1b4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<span style="font-weight: 400;">If you did not capture the content before, that’s fine we can just merge the two dataframes as you see in the code below:</span><span style="font-weight: 400;">
</span>
<pre><code class="language-">def cluster_and_visualize_content(df, embeddings_col):
    print("Starting the topic modeling process for keywords...\n")

    # Prepare data
    df['Page Content'] = df['Page Content'].astype(str)
    keywords = df['Page Content'].tolist()
    embeddings = np.vstack(df[embeddings_col].tolist())  # Ensure embeddings are properly shaped
    embeddings = normalize(embeddings)  # Normalize embeddings for cosine similarity

    prompt = """
      I have topic that is described by the following keywords: [KEYWORDS]
      I am attempting to categorize this topic as part of 2-4 word taxonomy label that encapsulates all the keywords.
      Based on the above information, can you give a short taxonomy label of the topic? Just return the taxonomy label itself.
      """
    client = openai.OpenAI(api_key=openai.api_key)
    representation_model = OpenAI(client, model="gpt-3.5-turbo", prompt=prompt,chat=True)
    # Initialize BERTopic
    topic_model = BERTopic(representation_model=representation_model,calculate_probabilities=True)

    # Fit BERTopic
    topics, probabilities = topic_model.fit_transform(keywords, embeddings)
    df['topic'] = topics  # Adding topic numbers to the DataFrame

    # Visualize the topics with t-SNE
    print("Reducing dimensions for visualization...")
    tsne = TSNE(n_components=2, random_state=42, metric='euclidean')
    reduced_embeddings = tsne.fit_transform(embeddings)

    plt.figure(figsize=(10, 8))
    plt.scatter(reduced_embeddings[:, 0], reduced_embeddings[:, 1], c=topics, cmap='viridis', s=50, alpha=0.6)
    plt.colorbar()
    plt.title('Content Topics Visualization with t-SNE')
    plt.xlabel('t-SNE Feature 1')
    plt.ylabel('t-SNE Feature 2')
    plt.show()

    # Probability distribution visualization
    min_probability = 0.01
    if any(probabilities[0] > min_probability):
        print("Visualizing topic probabilities...")
        fig = topic_model.visualize_distribution(probabilities[0], min_probability=min_probability)
        fig.show()
    else:
        print("No topic probabilities above the threshold to visualize.")

    # Intertopic distance map
    print("Visualizing intertopic distance map...")
    fig = topic_model.visualize_topics()
    fig.show()

    # Hierarchical clustering
    print("Visualizing hierarchical clustering...")
    fig = topic_model.visualize_hierarchy()
    fig.show()

    # Extract and name topics
    df['topic_name'] = df['topic'].apply(lambda x: topic_model.get_topic(x)[0][0] if topic_model.get_topic(x) else 'No dominant topic')

    # Display DataFrame with topic names
    display(df)

    # Export the DataFrame with topic labels
    df.to_excel('content-clusters-bertopic.xlsx', index=False)

pageContentDf = read_file('ipr-content.xlsx', 'Excel')

contentEmbeddingsDf = siteDf.merge(pageContentDf, on='Address', how='inner')
#print(contentEmbeddingsDf)

cluster_and_visualize_content(contentEmbeddingsDf, 'OpenAI Embeddings 1ConvertedFloats')
</code></pre>								</div>
				</div>
				<div class="elementor-element elementor-element-2984eee elementor-widget elementor-widget-heading" data-id="2984eee" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">The Value of a Vector Index of the Web</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-1f73982 elementor-widget elementor-widget-text-editor" data-id="1f73982" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">The democratization of the link graph gave us a series of measures that allowed us to understand the value of websites in the way that Google attributes authority. Granted, those metrics are only approximations of what Google may use, but they have driven the SEO space for nearly two decades.</p><p class="p1">And, that was enough prior to Google Search’s transition to becoming a heavily machine learning-driven environment. In a hybrid fusion environment, the link graph matters less because Google is taking signals derived from vector embeddings and using them to inform ranking. </p><p class="p1">Dare I say, the link graph and link indices are less valuable than they were in the past. Whereas all of the above could be native functionality for link indices that make them more valuable for doing SEO moving forward.</p><p class="p1">Until someone gives us such an index, Screaming Frog has armed us with what we need to catch up to Google.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-0606dd4 elementor-widget elementor-widget-heading" data-id="0606dd4" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">So, What Are Your Use Cases?</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-15f3596 elementor-widget elementor-widget-text-editor" data-id="15f3596" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p class="p1">The shortcomings of SEO software has yielded a strong community of Python SEOs. People have been leveraging state of the art technologies to cover the chasm between what SEO software can do and what Google does do.</p><p class="p1">So, I’m curious, what are your use cases for vector embeddings? How do you anticipate that Screaming Frog’s new feature will help you do your job even better? In the meantime, you can play with all the code I shared in <a href="https://colab.research.google.com/drive/1Na7iU7i-EW4SoEVV3JxeUIYAqHhpf9-8?usp=sharing"><span class="s1">this Colab</span></a> and contribute your own custom JavaScript snippets at <a href="https://github.com/ipullrank/SFSS-Custom-Extractions"><span class="s1">this GitHub</span></a>. I’ll be back soon with some classification use cases.</p><p class="p1">Let me know if there’s anything you want me to cook up for you.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-4b1b263 elementor-widget elementor-widget-template" data-id="4b1b263" data-element_type="widget" data-widget_type="template.default">
				<div class="elementor-widget-container">
							<div class="elementor-template">
					<div data-elementor-type="section" data-elementor-id="17351" class="elementor elementor-17351" data-elementor-post-type="elementor_library">
					<section class="elementor-section elementor-top-section elementor-element elementor-element-51a09b09 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="51a09b09" data-element_type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2238df9f" data-id="2238df9f" data-element_type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-7fba21b9 elementor-widget elementor-widget-heading" data-id="7fba21b9" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Next Steps</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-d80b72f elementor-widget elementor-widget-text-editor" data-id="d80b72f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><span style="font-weight: 400;">Here are three ways iPullRank can help you combine SEO and content to earn visibility for your business and drive revenue:</span></p><ol><li style="font-weight: 400;" aria-level="1"><b>Schedule a 30-Minute Strategy Session: </b><span style="font-weight: 400;">Share your biggest SEO and content challenges so we can put together a custom discovery deck after looking through your digital presence. No one-size-fits-all solutions, only tailored advice to grow your business.</span><a href="https://ipullrank.com/contact"><span style="font-weight: 400;"> Schedule your consultation session now</span></a><span style="font-weight: 400;">.</span></li><li aria-level="1"><strong>Get Our Newsletter:</strong> AI is reshaping search. The Rank Report gives you signal through the noise, so your brand doesn’t just keep up, it leads. <a href="https://ipullrank.com/rank-report">Subscribe to the Rank Report.</a></li><li style="font-weight: 400;" aria-level="1"><b>Enhance Your Content&#8217;s Relevance with Relevance Doctor:</b><span style="font-weight: 400;"> Not sure if your content is mathematically relevant? Use Relevance Doctor to test and improve your content&#8217;s relevancy, ensuring it ranks for your targeted keywords.</span><a href="https://ipullrank.com/tools/relevance-doctor"><span style="font-weight: 400;"> Test your content relevance today</span></a><span style="font-weight: 400;">.</span></li></ol><p><span style="font-weight: 400;">Want more? Visit </span><a href="https://ipullrank.com/blog">our blog</a> <span style="font-weight: 400;">for access to past webinars, exclusive guides, and insightful blogs crafted by our team of experts. </span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
				</div>
						</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://ipullrank.com/vector-embeddings-is-all-you-need">Vector Embeddings is All You Need: SEO Use Cases for Vectorizing the Web with Screaming Frog</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ipullrank.com/vector-embeddings-is-all-you-need/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Role of Generative AI in Content Production</title>
		<link>https://ipullrank.com/generative-ai-in-content-production</link>
					<comments>https://ipullrank.com/generative-ai-in-content-production#respond</comments>
		
		<dc:creator><![CDATA[Kyle Marino]]></dc:creator>
		<pubDate>Thu, 19 Jan 2023 17:25:10 +0000</pubDate>
				<category><![CDATA[Content]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://ipullrank.com/?p=16027</guid>

					<description><![CDATA[<p>WEBINAR REPLAY: AI Content for SEO &#8211; WATCH One of the biggest predictions in the marketing world for 2023 was an increase in the use of artificial intelligence in content creation. Between Microsoft&#8217;s recent $10 billion interest in OpenAI and how a new AI tool seems to launch each week, this prediction seems likely to [&#8230;]</p>
<p>The post <a href="https://ipullrank.com/generative-ai-in-content-production">The Role of Generative AI in Content Production</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="16027" class="elementor elementor-16027" data-elementor-post-type="post">
						<section class="elementor-section elementor-top-section elementor-element elementor-element-b8d7961 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="b8d7961" data-element_type="section">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2337369a" data-id="2337369a" data-element_type="column">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-40b37b9 elementor-widget elementor-widget-template" data-id="40b37b9" data-element_type="widget" data-widget_type="template.default">
				<div class="elementor-widget-container">
							<div class="elementor-template">
					<div data-elementor-type="section" data-elementor-id="16313" class="elementor elementor-16313" data-elementor-post-type="elementor_library">
					<section class="elementor-section elementor-top-section elementor-element elementor-element-38fc9316 elementor-section-boxed elementor-section-height-default elementor-section-height-default" data-id="38fc9316" data-element_type="section" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
						<div class="elementor-container elementor-column-gap-default">
					<div class="elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-1e891092" data-id="1e891092" data-element_type="column" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
			<div class="elementor-widget-wrap elementor-element-populated">
						<div class="elementor-element elementor-element-53cf5a elementor-widget elementor-widget-text-editor" data-id="53cf5a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Get iPullRank&#8217;s AI in Content and SEO Free Guide &#8211; <span style="color: #fadd23;"><span style="text-decoration: underline;"><a style="color: #fadd23; text-decoration: underline;" href="https://ipullrank.com/ai-seo-guide">DOWNLOAD</a></span></span></p>								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
				</div>
						</div>
				</div>
				<div class="elementor-element elementor-element-505033d elementor-widget elementor-widget-text-editor" data-id="505033d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p><strong>WEBINAR REPLAY: AI Content for SEO</strong> &#8211; <a href="https://ipullrank.com/resources/webinars/ai-content-for-seo-webinar">WATCH</a></p>								</div>
				</div>
				<div class="elementor-element elementor-element-3d4d8d2 elementor-widget elementor-widget-text-editor" data-id="3d4d8d2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>One of the biggest predictions in the marketing world for 2023 was an increase in the use of artificial intelligence in content creation. Between <a href="https://www-cnbc-com.cdn.ampproject.org/c/s/www.cnbc.com/amp/2023/01/10/microsoft-to-invest-10-billion-in-chatgpt-creator-openai-report-says.html">Microsoft&#8217;s recent $10 billion interest in OpenAI</a> and how a new AI tool seems to launch each week, this prediction seems likely to come true. Even <a href="https://www.gartner.com/en/newsroom/press-releases/2022-12-13-gartner-predictions-for-cmos-show-ai-social-toxicity-and-data-privacy-forge-the-future-of-marketing">Gartner</a> offered its perspective on the changing landscape of content creation. </p>
<p>Resistance to new technology never seems to pan out for the naysayers. Take the printing press. When mass production started, the few that owned printing presses protested, fearing it would dilute the quality of written work available. While the new wealth of printing presses definitely led to some bad books, it also made it much quicker to share information than ever before. </p>
<p>The same could be said about the internet. When it was introduced to the public, <a href="https://www.newsweek.com/clifford-stoll-why-web-wont-be-nirvana-185306">many dismissed it as a fad</a>. 27 years after hitting the mainstream, the Internet permeates our life so much that SEO is crucial to a brand’s visibility and success.</p>
<p><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>
<p><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>								</div>
				</div>
				<div class="elementor-element elementor-element-a9ef385 elementor-widget elementor-widget-image" data-id="a9ef385" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="400" src="https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-1024x512.jpg" class="attachment-large size-large wp-image-16034" alt="" srcset="https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-1024x512.jpg 1024w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-300x150.jpg 300w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-768x384.jpg 768w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-1536x768.jpg 1536w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-2048x1024.jpg 2048w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-825x413.jpg 825w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-takes-945x473.jpg 945w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-cdffe0f elementor-widget elementor-widget-text-editor" data-id="cdffe0f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>While AI tools offer a lot of value to content production, it’s not the end-all-be-all solution. There is currently no resource to produce <a href="https://ipullrank.com/ai-content-not-seo-threat">AI content</a> that’s optimized, engaging, and voice-accurate. Even with these new AI advancements, good content still requires human creators. </p>
<p>Before you decide your position on AI, let&#8217;s look at the business use cases, the benefits, limitations, and what you can possibly expect from future iterations.</p>
<p><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>								</div>
				</div>
				<div class="elementor-element elementor-element-b31194a elementor-widget elementor-widget-heading" data-id="b31194a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">What is Generative AI?</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-39cde6a elementor-widget elementor-widget-text-editor" data-id="39cde6a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>As the name suggests, generative AI is an automated platform that generates new content. The new explosion of ever-evolving AI platforms creates new content by scraping existing, relevant pages available on the web, then compiling that information into a post based on prompts you provide. </p>
<p>These prompts are phrases and queries you submit to an AI platform. Much like instructions given to a human writer, they give the platform a set of guidelines. It uses those guidelines to create the content you want. </p>
<p><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>								</div>
				</div>
				<div class="elementor-element elementor-element-775fd92 elementor-widget elementor-widget-image" data-id="775fd92" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="500" height="500" src="https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-example.gif" class="attachment-large size-large wp-image-16028" alt="" />															</div>
				</div>
				<div class="elementor-element elementor-element-827bec5 elementor-widget elementor-widget-text-editor" data-id="827bec5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Generative AI can help create many types of content, including:</p>
<ul>
<li>Copy briefs</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li><a href="https://ipullrank.com/metadata-visibility">Meta descriptions</a> </li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Title generation</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Header tags </li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Custom video and image </li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Full copy creation</li>
</ul>
<p>With the right prompts and phrasing, AI can write nearly anything. We&#8217;ve used it to create everything from copy briefs and generated posts to food recipes.</p>								</div>
				</div>
				<div class="elementor-element elementor-element-ba6ab16 elementor-widget elementor-widget-heading" data-id="ba6ab16" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">The Benefits of Generative AI</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-fada610 elementor-widget elementor-widget-text-editor" data-id="fada610" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>For organizations hoping to reduce the cost of content production, generative AI may be the missing piece. By combining prompt analysis with open access to the Internet, these generative models can learn and write much faster than humans can. Using an AI resource can make a number of content production processes much more efficient:</p>
<ul>
<li>Research</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Outlining</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Drafting</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Revisions (to a limited extent)</li>
</ul>
<p>Instead of spending hours writing a first draft, you can prompt the AI to create one in a matter of minutes. This can be a game-changer for organizations with short production deadlines. </p>
<p><!-- /wp:paragraph --><!-- wp:image {"align":"center","id":16029,"width":512,"height":443,"sizeSlug":"large","linkDestination":"none","dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>
<figure class="wp-block-image aligncenter size-large is-resized"></figure>								</div>
				</div>
				<div class="elementor-element elementor-element-21345e5 elementor-widget elementor-widget-image" data-id="21345e5" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
															<img loading="lazy" decoding="async" width="800" height="691" src="https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-1024x885.jpg" class="attachment-large size-large wp-image-16029" alt="" srcset="https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-1024x885.jpg 1024w, https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-300x259.jpg 300w, https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-768x664.jpg 768w, https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-1536x1327.jpg 1536w, https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-2048x1769.jpg 2048w, https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-825x713.jpg 825w, https://ipullrank.com/wp-content/uploads/2023/01/stressed-out-writer-945x816.jpg 945w" sizes="(max-width: 800px) 100vw, 800px" />															</div>
				</div>
				<div class="elementor-element elementor-element-b5f1043 elementor-widget elementor-widget-text-editor" data-id="b5f1043" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Using generative AI for the grunt work of production can ease the burden on your content team. This can free up your marketers and creators to focus on higher-level things like:</p>
<ul>
<li>Tying content to relevant topic clusters.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Finding opportunities for information gain.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Expanding your internal linking strategy.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Aligning existing content with your new content plan.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Mapping out your content calendar to align with a marketing campaign.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Improving your content quality to beat the competition.</li>
</ul>
<p>While generative AI can’t take the place of human writers, it can seriously reduce their workload. When used intelligently, it can help your organization produce more and better-coordinated content at a lower price.</p>
<p><!-- /wp:paragraph --><!-- wp:heading {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>								</div>
				</div>
				<div class="elementor-element elementor-element-2606f11 elementor-widget elementor-widget-heading" data-id="2606f11" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
					<h2 class="elementor-heading-title elementor-size-default">Can Generative AI Create Original Content?</h2>				</div>
				</div>
				<div class="elementor-element elementor-element-ab39d82 elementor-widget elementor-widget-text-editor" data-id="ab39d82" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<p>Generative AI can’t create original content – at least, not yet. While it can mimic how a human approaches content creation, resulting in well-written paragraphs and realistic images, the outcome is anything but original. </p>
<p>As we mentioned, resources like Open AI create content by scraping the internet for information relevant to the prompt. They then stitch that information together in a way that makes sense. That means anything they write is made entirely of statements recycled from existing content. </p>
<p>An AI content platform is also limited by the number of sources it has access to, as well as the amount of data it is able to access. Currently, <a href="https://chat.openai.com/">ChatGPT-3</a> only has information up to 2021, so using it to create content related to events later than that will result in additional manual research or trying other prompts for more information.</p>
<p><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>
<p><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --></p>								</div>
				</div>
				<div class="elementor-element elementor-element-7fe6544f elementor-widget elementor-widget-text-editor" data-id="7fe6544f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									<!-- wp:paragraph {"align":"center","dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:paragraph --><!-- wp:image {"align":"center","id":16034,"width":768,"height":384,"sizeSlug":"large","linkDestination":"none","dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:image --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:paragraph --><!-- wp:heading {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:paragraph --><!-- wp:image {"align":"center","id":16028,"sizeSlug":"full","linkDestination":"none","dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:image --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:image --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} --><!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p> </p>
<!-- /wp:paragraph --><!-- wp:image {"align":"center","id":16030,"width":375,"height":510,"sizeSlug":"full","linkDestination":"none","dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<figure class="wp-block-image aligncenter size-full is-resized"><img loading="lazy" decoding="async" class="wp-image-16030" src="https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-meme.jpeg" alt="" width="375" height="510" srcset="https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-meme.jpeg 500w, https://ipullrank.com/wp-content/uploads/2023/01/chatgpt-meme-221x300.jpeg 221w" sizes="(max-width: 375px) 100vw, 375px" /></figure>
<!-- /wp:image --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p> </p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>Even with the entire internet at its disposal, generative AI can’t solve all your content issues. Though many in the content marketing and SEO community fear AI will replace them, content creation is still a human-driven process.</p>
<!-- /wp:paragraph --><!-- wp:paragraph {"fontSize":"medium","dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p class="has-medium-font-size"><strong>Read More:</strong> <a href="https://ipullrank.com/ai-content-not-seo-threat">AI Content is not the SEO threat they want you to think it is </a></p>
<!-- /wp:paragraph --><!-- wp:heading {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h2><strong>The Limitations of Generative AI</strong></h2>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>AI writing is still in its early stages. Even with all the resources available, there are some things it just can’t handle yet:</p>
<!-- /wp:paragraph --><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>Voice and tone</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>On-page optimization</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>Internal linking</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>In addition, there are some other limitations to keep in mind when using generative AI:</p>
<!-- /wp:paragraph --><!-- wp:list -->
<ul><!-- wp:list-item -->
<li>It doesn’t know which sources are reliable, so it’s important to double-check all information for accuracy.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>The content it produces may be thin or overly broad, so be prepared to do some additional research or prompting.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>It can’t produce original content, so you’ll need to check all text thoroughly for plagiarism and adjust language as needed.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>It can’t reliably source or produce images relevant to the content. If you’re using images, be ready to find appropriate ones yourself.</li>
<!-- /wp:list-item --><!-- wp:list-item -->
<li>It struggles to produce good subjective content. Opinion pieces it generates are often shallow or generic.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>If your organization is considering AI for content generation, there are a few things to keep in mind. </p>
<!-- /wp:paragraph --><!-- wp:heading {"level":3,"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h3>Writing Effective AI Prompts</h3>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>Everyone using generative AI needs to understand how to properly use the prompts, because prompt quality has a huge effect on the resulting piece. A bad prompt may result in inaccurate or out-of-context content. </p>
<!-- /wp:paragraph --><!-- wp:heading {"level":3,"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h3>Avoiding Plagiarism and AI Detection</h3>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>Along with the emergence of AI like ChatGPT came a rise in AI detection and advanced plagiarism checkers. Because AI scrapes existing web pages to create new content, AI-generated pieces almost always have several instances of plagiarism. It’s important to adjust them thoroughly so they’re truly new and unique.</p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>In addition, Google has been vocal about penalizing AI-generated content on SERPs, and it claims to have the resources to do so. That means that in order to rank, it’s important that your piece doesn’t look like it was created by AI.</p>
<!-- /wp:paragraph --><!-- wp:html -->
<blockquote class="twitter-tweet" data-conversation="none">
<p dir="ltr" lang="en">As said before when asked about AI, content created primarily for search engine rankings, however it is done, is against our guidance. If content is helpful &amp; created for people first, that&#8217;s not an issue.<a href="https://t.co/3rs3Yrrrk1">https://t.co/3rs3Yrrrk1</a><a href="https://t.co/TlFEbdXGAp">https://t.co/TlFEbdXGAp</a><a href="https://t.co/Yl9XWr5CAN">https://t.co/Yl9XWr5CAN</a> <a href="https://t.co/gFTE2C2wq1">pic.twitter.com/gFTE2C2wq1</a></p>
— Google SearchLiaison (@searchliaison) <a href="https://twitter.com/searchliaison/status/1613462881248448512?ref_src=twsrc%5Etfw">January 12, 2023</a></blockquote>
<p><script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<!-- /wp:html --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p> </p>
<!-- /wp:paragraph --><!-- wp:heading {"level":3,"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h3>Voice, Tone, and Content Quality</h3>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>Generative AI isn’t great at meeting a particular voice and tone. It does its best, but it’s still just a bot that is trying to compile all of the relevant information you request. This means someone will have to proofread and edit the piece. </p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>As a result, AI-created content often requires more editing than a human-written piece. The editorial team will need to update to match the intended voice and tone. They’ll also need to make sure it’s engaging, flows logically, and is actually about the topic you meant to discuss.</p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p> </p>
<!-- /wp:paragraph --><!-- wp:image {"align":"center","id":16033,"width":512,"height":512,"sizeSlug":"large","linkDestination":"none","dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" class="wp-image-16033" src="https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-1024x1024.png" alt="graphic showing how software was built prior to AI with many steps as opposed to opportunities now to simply have it coded by describing. Image by Dharmesh Shah - founder of HubSpot" width="512" height="512" srcset="https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-1024x1024.png 1024w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-300x300.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-150x150.png 150w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-768x768.png 768w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1.png 1536w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-825x825.png 825w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-945x945.png 945w, https://ipullrank.com/wp-content/uploads/2023/01/image-32-1-80x80.png 80w" sizes="(max-width: 512px) 100vw, 512px" />
<figcaption class="wp-element-caption">Source:<a href="https://twitter.com/dharmesh/status/1613192969280016385"> Dharmesh Shah &#8211; Co-founder of Hubspot</a></figcaption>
</figure>
<!-- /wp:image --><!-- wp:heading {"level":3,"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h3>On-Page SEO</h3>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>AI can’t currently optimize a piece of content for search engines. It can assist in optimization efforts like meta information development and keyword research, but it has very little ability to create content that follows best practices for on-page SEO.</p>
<!-- /wp:paragraph --><!-- wp:heading {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h2><strong>How to Use Generative AI for Content Development &amp; More</strong></h2>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>There are other ways to use generative AI beyond content development. While many tools create full content pieces, other resources like <a href="https://www.frase.io/">Frase</a> and <a href="https://www.notion.so/ai">Notion</a> use AI for different purposes. These resources offer insights on how to improve existing content by suggesting related URLs, keywords, and topics to include. </p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>Some generative AI tools even extend beyond the written word. A variety of platforms specialize in other types of content creation like image generation or even game design. With effective prompts and the right AI tools, organizations can improve efficiency in a wide variety of ways. </p>
<!-- /wp:paragraph --><!-- wp:heading {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<h2><strong>AI Tools: Work Smarter, Not Harder</strong></h2>
<!-- /wp:heading --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>Ignoring the potential of AI to simplify processes like writing, research, brief development, or even image design is the antithesis of “work smarter, not harder.” By integrating artificial intelligence tools into the workflow, writers can spend less time and energy on the heavy lifting and focus on the overall quality of the piece of content. </p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>At this point, AI is still in the early stages of development. Human experts can work with AI to produce high-quality content that resonates with the target.</p>
<!-- /wp:paragraph --><!-- wp:paragraph {"dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p>With the limitations that various AI platforms have, what’s the best way to integrate it into a team’s workflow? What situations are perfect for generative AI content, and where does it really struggle? We’ll continue to explore the opportunities AI presents and how to get the most out of each platform throughout the year. </p>
<!-- /wp:paragraph --><!-- wp:image {"id":16063,"sizeSlug":"large","linkDestination":"custom","dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" class="wp-image-16063" src="http://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-1024x576.png" alt="" srcset="https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-1024x576.png 1024w, https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-300x169.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-768x432.png 768w, https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-1536x864.png 1536w, https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-825x464.png 825w, https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951-945x532.png 945w, https://ipullrank.com/wp-content/uploads/2023/01/Supercharge-2023-01-26T131317.951.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
<!-- /wp:image --><!-- wp:paragraph {"align":"center","dynamicAttributes":{"toolsetDSVersion":"240000"}} -->
<p class="has-text-align-center"><a href="https://ipullrank.com/resources/webinars/ai-content-for-seo-webinar">Watch the Webinar Replay</a></p>
<!-- /wp:paragraph -->								</div>
				</div>
					</div>
		</div>
					</div>
		</section>
				</div>
		<p>The post <a href="https://ipullrank.com/generative-ai-in-content-production">The Role of Generative AI in Content Production</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ipullrank.com/generative-ai-in-content-production/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>E-Commerce SEO: How To Increase the Visibility of Your Products By Building a Product Knowledge Graph</title>
		<link>https://ipullrank.com/e-commerce-seo-product-knowledge-graph</link>
					<comments>https://ipullrank.com/e-commerce-seo-product-knowledge-graph#respond</comments>
		
		<dc:creator><![CDATA[Valentina Izzo]]></dc:creator>
		<pubDate>Thu, 05 Jan 2023 12:00:00 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://ipullrank.com/?p=15791</guid>

					<description><![CDATA[<p>Are you helping Google surface your products to your potential customers?&#160; The search engine has developed a wide range of new opportunities for e-commerce brands to attract customers, provide critical shopping information, and visually represent products across an enhanced search results page. E-commerce experienced exponential growth during the pandemic. In the following chart, you can [&#8230;]</p>
<p>The post <a href="https://ipullrank.com/e-commerce-seo-product-knowledge-graph">E-Commerce SEO: How To Increase the Visibility of Your Products By Building a Product Knowledge Graph</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Are you helping Google surface your products to your potential customers?&nbsp;</p>



<p>The search engine has developed a wide range of new opportunities for e-commerce brands to attract customers, provide critical shopping information, and visually represent products across an enhanced search results page.</p>



<p>E-commerce experienced <strong>exponential growth during the </strong>pandemic. In the following chart, you can see how the lockdowns during the pandemic have affected global e-commerce sales, giving them a boost. In addition, all e-commerce sectors are forecast to see steady and continuous revenue growth through 2024.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="772" height="345" src="https://ipullrank.com/wp-content/uploads/2023/01/GRAPH-Global-eCommerce-Revenue-Forecast-8-percent-Growth-2020-2025.png" alt="GRAPH: Global eCommerce Revenue Forecast 8% Growth 2020-2025" class="wp-image-15793" srcset="https://ipullrank.com/wp-content/uploads/2023/01/GRAPH-Global-eCommerce-Revenue-Forecast-8-percent-Growth-2020-2025.png 772w, https://ipullrank.com/wp-content/uploads/2023/01/GRAPH-Global-eCommerce-Revenue-Forecast-8-percent-Growth-2020-2025-300x134.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/GRAPH-Global-eCommerce-Revenue-Forecast-8-percent-Growth-2020-2025-768x343.png 768w" sizes="(max-width: 772px) 100vw, 772px" /></figure>



<p><a href="https://www.trade.gov/ecommerce-sales-size-forecast">GRAPH: Global eCommerce Revenue Forecast 8% Growth 2020-2025</a></p>



<p>When physical stores began to close for the health and safety of the public, online stores became essential to the business health of many commercial brands. Whether they were launching an e-commerce website or improving the performance of existing stores, <strong>smart businesses knew e-commerce was a lucrative financial investment.</strong></p>



<p>In the world of e-commerce, Google has lost significant market share to Amazon. The e-commerce search engine has increasingly become the default option for customers researching and purchasing products, despite criticisms of Amazon favoring its own products and bullying retailers.</p>



<p>This has led Google to make a series of major e-commerce changes.</p>



<p><em>“We’re advancing our plans to make it free for merchants to sell on Google. Beginning next week, search results on the Google Shopping tab will consist primarily of free listings, helping merchants better connect with consumers, regardless of whether they advertise on Google”.&nbsp; </em><a href="https://blog.google/products/shopping/more-ways-to-shop/">Bill Ready &#8211; President, Commerce</a></p>



<p>This new approach reduces the exclusivity of Google&#8217;s pay-to-play model. While selling products on Google used to be the preserve of advertisers, <strong>now small and medium-sized businesses can also sell products on Google organically</strong>. But how can you get free listings on Google for your products? In this article, I&#8217;ll tell you <strong>the key to success for your </strong><a href="https://wordlift.io/ecommerce-seo-service/?utm_source=ipullrank&amp;utm_medium=article&amp;utm_campaign=blog"><strong>e-commerce SEO</strong></a> and<strong> </strong>how you can use it to get better search visibility across all of Google’s products and ultimately,<strong> increase your sales.</strong></p>





<h2 class="wp-block-heading">How To Get Free Listings On Google For Your Products&nbsp;</h2>



<p>While it used to be the investment in advertising that made the difference, now with the new free listings,<strong> it&#8217;s the data that determines whether or not your products show up on Google</strong>.&nbsp;</p>



<p>Google has expanded the <a href="https://developers.google.com/search/blog/2022/09/merchant-listings">eligibility of websites that use structured data</a> for both commercial listings and product snippets in Google search results.&nbsp;</p>



<p>Whereas before you could share information about the product group you wanted to advertise on Google, now with free listings <strong>it is essential to provide the search engine with all the information it needs to know what you are selling and help users to conclude the purchase.</strong> This helps Google present your products more accurately in organic search.&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="572" src="https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements-1024x572.png" alt="structured linked data to google rich enhancements" class="wp-image-15797" srcset="https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements-1024x572.png 1024w, https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements-300x167.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements-768x429.png 768w, https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements-825x461.png 825w, https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements-945x528.png 945w, https://ipullrank.com/wp-content/uploads/2023/01/structured-linked-data-to-google-rich-enhancements.png 1424w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Using <a href="https://ipullrank.com/ecommerce-product-structured"><strong>structured data</strong></a><strong> </strong>is the key to getting your products to show up in Google&#8217;s free listings. This is because <strong>it provides the search engine with all the information it needs to understand your products and display them to users.</strong>&nbsp;</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="569" src="https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup-1024x569.png" alt="example of product markup" class="wp-image-15795" srcset="https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup-1024x569.png 1024w, https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup-300x167.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup-768x427.png 768w, https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup-825x458.png 825w, https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup-945x525.png 945w, https://ipullrank.com/wp-content/uploads/2023/01/example-of-product-markup.png 1355w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Therefore, it is important <strong>to have an accurate and complete data set</strong>. This is the only way to get free listings on Google, <strong>attract more visitors to your e-commerce and make more sales.</strong></p>



<h2 class="wp-block-heading">What Is A Product Knowledge Graph And Why It Is Important For Your E-Commerce SEO</h2>



<p>The<strong> <a href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps/wordlift1610701057853.new-seo-merchant-feed?tab=Overview">Product Knowledge Graph</a> (PKG) is an e-commerce-specific form of knowledge graph</strong> designed to <strong>improve product discoverability and end-user experience</strong> by enriching a brand&#8217;s content with data.&nbsp;</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="820" height="358" src="https://ipullrank.com/wp-content/uploads/2023/01/visualization-of-attributes-for-a-product-knowledge-graph.png" alt="visualization of attributes for a product knowledge graph" class="wp-image-15798" srcset="https://ipullrank.com/wp-content/uploads/2023/01/visualization-of-attributes-for-a-product-knowledge-graph.png 820w, https://ipullrank.com/wp-content/uploads/2023/01/visualization-of-attributes-for-a-product-knowledge-graph-300x131.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/visualization-of-attributes-for-a-product-knowledge-graph-768x335.png 768w" sizes="(max-width: 820px) 100vw, 820px" /></figure>



<p><a href="https://wordlift.io/blog/en/multilingual-product-knowledge-graph/">Visual example of the Product Knowledge Graph</a></p>



<p>It is used to link products and all the information about them, creating the dynamic architecture behind your website that <strong>helps the search engine understand and index the content </strong>and <strong>show it to those who are interested</strong> and searching for that particular product. It also allows you to<strong> link editorial content to product content</strong>, helping consumers in their <a href="https://ipullrank.com/resources/guides-ebooks/personas-guide/chapter-5">customer journey </a>and bridging the gap between them and the brand.&nbsp;</p>



<p>As we know, the customer journey is not linear (we have already talked about <a href="https://www.iloveseo.net/oh-my-mum-or-how-to-think-seo-in-the-era-of-algorithms-based-on-ai/">the messy middle </a>several times) and there are numerous steps that the user goes through before completing a purchase. The PKG allows you to drive the user on their journey to find the product they are looking for and find it in your e-commerce store.&nbsp;</p>



<p>Let us take an example. Silvia is looking for a new pair of sunglasses to wear while hiking. Silvia&#8217;s customer journey starts with a question. She will search for information, ask questions, and read different content to find out which product best fits her needs.&nbsp;</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1728" height="864" src="https://ipullrank.com/wp-content/uploads/2023/01/silvia-discover-sungalsses-ongoogle.gif" alt="" class="wp-image-15792"/></figure>



<p>In an e-commerce context, it&#8217;s all about connecting your site&#8217;s editorial content with purely transactional information such as prices, availability, types, product numbers, payment methods, and delivery information. This is what the PKG does for your data and your customers.&nbsp;</p>



<p><strong>It allows you to create a data set </strong>that is not only available to the customer (Silvia in our example) but can also be used by various types of automated applications that Silvia (and other potential and future customers) use to navigate your content (search engines, chatbots, personal assistants, etc.).</p>



<h2 class="wp-block-heading">The Power Of Structured Data For E-Commerce&nbsp;</h2>



<p>As you have seen above, the power of structured data is immense, and a Product Knowledge Graph is critical to making your products visible in Google free listings and improving SEO for your e-commerce.&nbsp;</p>



<p>Specifically, there are <strong>3 benefits that you can achieve </strong>as you can see below.&nbsp;</p>



<h3 class="wp-block-heading">Better visibility for your products</h3>



<p>The <strong>Product Knowledge Graph</strong> makes your content visible because it provides <strong>machine-readable and highly interconnected descriptions</strong>. Just like Google&#8217;s Knowledge Graph does.</p>



<p>However, the Product Knowledge Graph fulfills a special need: <strong>discoverability</strong>. It is a specialized graph that provides answers that can ultimately be read by robots. The Product Knowledge Graph focuses on discoverability and enables improved e-commerce marketing by providing the data structure for targeted, richly linked, product-enriched content.</p>



<h3 class="wp-block-heading">Creating immersive content for your audience&nbsp;&nbsp;</h3>



<p>To increase audience engagement, it is important to <strong>create a dynamic and carefully linked environment. </strong>Product Knowledge Graph connects editorial content with product categories so that <strong>the user can easily navigate</strong> through the editorial content and, when ready, proceed to purchase the product they have chosen by instantly seeing prices, rates, availability, types, delivery information, etc.&nbsp;</p>



<h3 class="wp-block-heading">Enabling interoperability of your data set</h3>



<p>With a Product Knowledge Graph, <strong>data can be easily shared across different devices, platforms, and software</strong>. You can provide APIs to other parties, such as search engines and retailers, and run business-critical &#8220;hubs&#8221; that collect data and make it available to users, such as Merchant Center, Google Shopping, voice assistants, etc.</p>



<h2 class="wp-block-heading">How You Can Build A Product Knowledge Graph For Your Online Shop&nbsp;</h2>



<p>In this scenario, optimizing an e-commerce company&#8217;s products by curating and enriching its data means involving both the marketing and development teams in the workflow. This relationship, as we know, is not always easy.</p>



<p>With <a href="https://wordlift.io/?utm_source=ipullrank&amp;utm_medium=article&amp;utm_campaign=blog">WordLift</a>, it is possible to make this process smoother and more accessible to all, without the need for developers. Indeed, you can add structured data about the products in your e-commerce and build your Product Knowledge Graph, which allows you <strong>to list your products on Google Shopping for free</strong>.&nbsp;</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="980" height="448" src="https://ipullrank.com/wp-content/uploads/2023/01/structured-data-of-sunglasses-and-associated-schema-org-page-examples.png" alt="structured data of sunglasses and associated schema org page examples" class="wp-image-15796" srcset="https://ipullrank.com/wp-content/uploads/2023/01/structured-data-of-sunglasses-and-associated-schema-org-page-examples.png 980w, https://ipullrank.com/wp-content/uploads/2023/01/structured-data-of-sunglasses-and-associated-schema-org-page-examples-300x137.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/structured-data-of-sunglasses-and-associated-schema-org-page-examples-768x351.png 768w, https://ipullrank.com/wp-content/uploads/2023/01/structured-data-of-sunglasses-and-associated-schema-org-page-examples-825x377.png 825w, https://ipullrank.com/wp-content/uploads/2023/01/structured-data-of-sunglasses-and-associated-schema-org-page-examples-945x432.png 945w" sizes="(max-width: 980px) 100vw, 980px" /></figure>



<p>To <a href="https://wordlift.io/blog/en/how-build-product-knowledge-graph/?utm_source=ipullrank&amp;utm_medium=article&amp;utm_campaign=blog">build your Product Knowledge Graph</a>, you can start with the data you have about the products in your e-commerce. You can use your product information management system, where you store all the product attributes, or you can use your merchant feed, which allows you to view your products on different interfaces. Otherwise, you can choose to crawl your website to extract additional attributes that will help you build the Knowledge Graph.</p>



<p>Here are three important challenges:</p>



<ul class="wp-block-list">
<li><strong>Data scarcity</strong>. Identify product attributes and focus on those that are important to customers in their search. Product identifiers, color, material, product type, brand, etc&nbsp;</li>



<li><strong>Data completion</strong>. Ensure data (structured and unstructured) is complete and consistent. Adding multiple formats for each product image is a good example. Another example is checking if the free description in the table contains missing information.</li>



<li><strong>Data quality</strong>. Check the reliability of the data. In SEO, it is important to ensure that data presented as structured data matches data submitted via XML feeds (e.g. Google Merchant Feed). It also helps to prevent product descriptions from conflicting with structured data.</li>
</ul>



<p><strong>The result of WordLift is the curation and linking of data</strong>. In other words, the available information about your products is not only <strong>enriched with structured data </strong>to make it readable by Google and search engines but your data is also <strong>linked to other data sources such as Wikidata and DBPedia.&nbsp;</strong></p>



<p><a href="https://ipullrank.com/resources/webinars/nobody-told-you-how-to-do-entity-seo">Entity-based SEO</a> gives context to your website. That&#8217;s why it&#8217;s important to work with entities, because they help connect the world&#8217;s information to get relevant results when searching.</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual-1024x576.png" alt="WordLift visualization of implementing the product knowledge graph" class="wp-image-15794" width="768" height="432" srcset="https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual-1024x576.png 1024w, https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual-300x169.png 300w, https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual-768x432.png 768w, https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual-825x464.png 825w, https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual-945x532.png 945w, https://ipullrank.com/wp-content/uploads/2023/01/wordlift-and-product-knowledge-graph-visual.png 1200w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>The solution developed by WordLift works with proprietary CMS as well as other e-commerce platforms such as Shopify and Magento. It all starts with the data sent to WordLift, which is implemented and enriched to build the Product Knowledge Graph.</p>



<p>Recently, WordLift has developed the <strong><a href="https://wordlift.io/seo-for-non-wordpress-ecommerce/">Product Knowledge Graph Builder</a></strong>. If you have an e-commerce feed and a merchant feed, you can use this feature to import the data by enriching it with structured data and creating your Product Knowledge Graph in a few simple steps.</p>



<figure class="wp-block-embed aligncenter is-type-wp-embed is-provider-wistia-inc wp-block-embed-wistia-inc"><div class="wp-block-embed__wrapper">
https://ipullrank.wistia.com/medias/67lykpkptt
</div></figure>



<h2 class="wp-block-heading">Data Harmonization And Data Reconciliation</h2>



<p>Data <strong>synchronization and reconciliation are critical </strong>to your e-commerce SEO.&nbsp;&nbsp;</p>



<p>The first ensures that the information comes from the Merchant Feed and matches the information in the Merchant Feed. This helps you avoid confusing Google and not being found for one or more specific search queries.&nbsp;&nbsp;</p>



<p>The second is making sure there are no duplicates that could cause Google to refuse to show products in the free listings. A lack can be confusing and cause your products to not rank well on Google for one or more specific search queries. This is made possible by a <a href="https://wordlift.io/blog/en/unique-product-identifiers/?utm_source=ipullrank&amp;utm_medium=article&amp;utm_campaign=blog">unique product identifier (UPI)</a> assigned to each individual product in your e-commerce.</p>



<h2 class="wp-block-heading">AI-Generated Content For E-Commerce&nbsp;</h2>



<p>As Google challenges Amazon to become the leader in e-commerce online search, we expect to see more features to improve the user experience, more opportunities for visibility, and easier access leading to more competition in the search results.</p>



<p>What other ways do we envision eCommerce brands scaling their visibility in search?</p>



<p>AI-generated content has become a popular trend in tech and it&#8217;s the perfect tool to leverage in e-commerce content and SEO. In fact, our founder Andrea Volpini wrote extensively on the power of AI to automatically create content for product descriptions and FAQs. Meanwhile, iPullRank&#8217;s founder Mike King addresses why <a href="https://ipullrank.com/ai-content-not-seo-threat">AI content is not yet a threat to SEO</a>.</p>



<p>Be careful, though, because creating content with AI does not mean you have to forgo human input. In fact, this is still crucial to <strong>ensure the validity of the action and its consistency </strong>with the brand and its characteristics.&nbsp;</p>



<p>In WordLift, an <strong>advanced validation workflow has been developed</strong> that allows editorial teams to scale SEO, saving time and energy within optimal results.&nbsp;</p>



<p>Similarly, data and AI can be used to <strong>generate FAQs and </strong><a href="https://wordlift.io/blog/en/e-commerce-404-pages/?utm_source=ipullrank&amp;utm_medium=article&amp;utm_campaign=blog"><strong>e-commerce 404 smart pages</strong></a> that provide users with an increasingly <strong>relevant experience that facilitates the buying process</strong>.</p>



<p>Most e-commerce brands are not leveraging structured data to improve the visibility of their products and even fewer are using a Product Knowledge Graph to develop topical authority in their space.&nbsp;</p>



<p>Take this competitive advantage and become the most likely product to appear in your buyer’s search results.</p>



<p><strong><em>Want help creating a Product Knowledge Graph and a complete content journey for your e-commerce brand? <a href="https://ipullrank.com/contact">Contact iPullRank for a consultation</a> and <a href="https://wordlift.io/">WordLift for technical implementation.</a></em></strong></p>
<p>The post <a href="https://ipullrank.com/e-commerce-seo-product-knowledge-graph">E-Commerce SEO: How To Increase the Visibility of Your Products By Building a Product Knowledge Graph</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ipullrank.com/e-commerce-seo-product-knowledge-graph/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Log File Analysis: A Must-Have for SEO Pros</title>
		<link>https://ipullrank.com/log-file-analysis-for-seo</link>
					<comments>https://ipullrank.com/log-file-analysis-for-seo#respond</comments>
		
		<dc:creator><![CDATA[Chris Bryant]]></dc:creator>
		<pubDate>Thu, 29 Sep 2022 14:02:38 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[partner]]></category>
		<guid isPermaLink="false">https://ipullrank.com/?p=15283</guid>

					<description><![CDATA[<p>Have you ever worked on a site with a million pages? At that scale, Googlebot doesn&#8217;t always crawl every page, let alone index them. With such quantity, you need a way to analyze website performance and catch technical issues before your organic search traffic takes a hit. Log file analysis is a not-so-secret and critical, [&#8230;]</p>
<p>The post <a href="https://ipullrank.com/log-file-analysis-for-seo">Log File Analysis: A Must-Have for SEO Pros</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Have you ever worked on a site with a million pages? </p>



<p>At that scale, Googlebot doesn&#8217;t always crawl every page, let alone index them. </p>



<ul class="wp-block-list">
<li>Broken links. </li>



<li>Slow response times. </li>



<li>Low crawl frequency. </li>
</ul>



<p>With such quantity, you need a way to analyze website performance and catch technical issues before your organic search traffic takes a hit.</p>



<p>Log file analysis is a not-so-secret and critical, though sometimes underutilized, element of an SEO strategy. With the growing complexity of the web and increased competition online, it is an even more important tactic than ever to gain data-backed insights into how your website is performing.</p>





<h2 class="wp-block-heading">So what is log file analysis and why does it matter for SEO?&nbsp;</h2>



<p>Your web servers record and measure the crawl behavior of search engines. These logs can reveal issues and opportunities that impact the way that Google sees your site. In other words, monitoring and analyzing log files lets you see your website how Google sees it.</p>



<p>SEOs analyze those logs to determine how efficiently Google interacts with your website. Proper log analysis can highlight and inform optimizations and fixes to better guide search engines to your most important and strategic pages. As a result, you maximize traffic, revenue, and the overall impact of organic search.</p>



<p class="is-style-default has-medium-font-size">In the <a href="https://lp.botify.com/webinar/botify-webinar-sfcc-ua">words of Dana Tan</a>, Director of SEO at Under Armour:</p>



<p class="is-style-default has-white-color has-vivid-cyan-blue-background-color has-text-color has-background" style="font-size:26px">“<em>Getting server logs takes the conjecture out of SEO and it’s 100% scientific. It’s data. You can’t argue with cold, hard data. And that really makes SEO a science instead of guesswork.</em>”&nbsp;</p>



<h2 class="wp-block-heading">Where are server log files stored and how can you access them?</h2>



<p>In many cases, just getting access to the server logs themselves is the hardest part. Access to your server logs depends on your server and hosting setup &#8211; and you most likely will need to engage with the DevOps or Engineering team to get the appropriate permissions. &nbsp;In most scenarios, traffic is delivered through a Content Delivery Network (CDN) such as <a href="https://www.akamai.com/">Akamai</a>, <a href="https://www.cloudflare.com/">Cloudflare</a>, or <a href="https://www.fastly.com/">Fastly</a>, and can be delivered to an AWS S3 bucket or database.&nbsp;</p>



<h3 class="wp-block-heading"><strong>The anatomy of a clean log line&nbsp;</strong></h3>



<p>Before delving into your CDN, let’s take a look at a clean log line for a crawl from Googlebot:</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-1024x343.png" alt="Botify log line example breakdown" class="wp-image-15284" width="768" height="257" srcset="https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-1024x343.png 1024w, https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-300x101.png 300w, https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-768x257.png 768w, https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-1536x515.png 1536w, https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-825x277.png 825w, https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown-945x317.png 945w, https://ipullrank.com/wp-content/uploads/2022/09/botify-log-line-example-breakdown.png 1999w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>Although log data is usually simple in format, it’s important to realize the common hurdles that arise when attempting to retrieve and convert the data into “readable” metrics. Too often, SEOs end up with a lot of manual work, unstable files, missed data, or inaccurate analyses.&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li>Log files for a large website can quickly add up to gigabytes of data, becoming quite cumbersome. This data is often too large for desktop analysis tools, so you will need to have the files compressed and then decompressed when retrieving the data.</li>



<li>Some log files may require multiple downloads in a single day.</li>



<li>Log files need to be parsed to extract the specific data that is useful for SEO, and then transcribed into SEO terms such as crawl volume, visit volume, unique URLs, and more.&nbsp;</li>
</ul>



<p>Instead of trying to manage log files yourself or manually parse through millions of cells worth of data, you can have your log files automatically fed into a usable interface made specifically for SEOs. In our case, it’s into the <a href="https://www.botify.com/platform/botify-analytics/loganalyzer">Botify LogAnalyzer</a> within the Botify Analytics suite.&nbsp;</p>



<p>Botify can ingest a subset of the SEO-relevant data from the web server log files based on direct delivery from the CDNs, parse that data, and do so programmatically and on a recurring basis.&nbsp;</p>



<p>By handling log files in this manner, you are also ensuring the <a href="https://botify.reportablenews.com/pr/botify-achieves-soc-2-type-1-certification-for-its-enterprise-organic-search-platform-ensuring-the-highest-standards-of-data-privacy-and-security">highest level of security.</a>&nbsp;</p>



<p>When ingesting the logs, Botify uses the IP address from your log files to validate the user agent to avoid inflating data with spoofing, while leveraging the referrer data to provide visit insights.&nbsp;</p>



<p>Botify never processes personal data. If a personal IP address is not removed by the client and surfaces in the server log files, Botify permanently removes all of this information before processing any log files. Botify is <a href="https://www.botify.com/blog/the-gdpr-and-beyond-how-botify-is-compliant-by-design">GDPR</a> and <a href="https://www.digitaljournal.com/pr/botify-achieves-soc-2-type-1-certification-for-its-enterprise-organic-search-platform-ensuring-the-highest-standards-of-data-privacy-and-security">SOC2 compliant</a>, providing the highest standard of data privacy and security for brands.&nbsp;</p>



<h2 class="wp-block-heading">Reading a log file analysis report: what could you uncover?</h2>



<p>Quite a lot, actually! Log file analysis allows you to:</p>



<ul class="wp-block-list">
<li>See if Google is spending time on unimportant pages, like<strong> duplicate content or orphan pages</strong>.</li>
</ul>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="600" height="344" src="https://ipullrank.com/wp-content/uploads/2022/09/botify-vs-google-crawl-comparison-venn-report.png" alt="botify vs google crawl comparison venn diagram report" class="wp-image-15285" srcset="https://ipullrank.com/wp-content/uploads/2022/09/botify-vs-google-crawl-comparison-venn-report.png 600w, https://ipullrank.com/wp-content/uploads/2022/09/botify-vs-google-crawl-comparison-venn-report-300x172.png 300w" sizes="(max-width: 600px) 100vw, 600px" /></figure>



<ul class="wp-block-list">
<li>Evaluate crawls by segments and analyze search engine behavior on specific sections of your website.</li>



<li>Understand the distribution of <strong>bad status codes</strong> and<strong> server errors</strong> such as 3XX, 4XX, or 5XXs &nbsp;that may impact Google&#8217;s ability to properly and efficiently crawl your website and discover content.</li>



<li>Compare<strong> crawl volume to unique URLs crawled</strong> and learn of<strong> </strong>any new URLs that weren’t in a previous crawl.</li>



<li>Know how frequently Googlebot is crawling your website, helping you chart the relationship between <strong>crawl frequency,</strong> crawl budget, and traffic fluctuations and determine if the frequency is aligned with your publishing schedule.&nbsp;</li>
</ul>



<p>Below are some valuable visuals from Botify’s LogAnalyzer. Within Botify’s tool, specifically, you have the flexibility of viewing data such as crawl volume or unique number of URLs for the entire website &#8211; or based on<a href="https://www.botify.com/blog/tips-segmentation-botify"> specific site segments, customizable within the platform</a>. </p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="488" src="https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-1024x488.png" alt="" class="wp-image-15769" srcset="https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-1024x488.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-300x143.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-768x366.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-1536x732.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-825x393.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day-945x450.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/botify-crawl-volume-report-by-day.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="362" src="https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1024x362.png" alt="botify segment crawl report by day" class="wp-image-15771" srcset="https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1024x362.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-300x106.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-768x271.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1536x542.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-825x291.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-945x334.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report-1024x509.png" alt="Google crawl frequency report" class="wp-image-15286" width="512" height="255" srcset="https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report-1024x509.png 1024w, https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report-300x149.png 300w, https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report-768x382.png 768w, https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report-825x410.png 825w, https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report-945x470.png 945w, https://ipullrank.com/wp-content/uploads/2022/09/botify-google-crawl-frequency-report.png 1198w" sizes="(max-width: 512px) 100vw, 512px" /></figure>



<p>For example, if you’re managing an ecommerce website that sells sportswear, apparel, athletic gear, and accessories, you can isolate portions of the website for analysis, whether by category, i.e. sneakers, by content type, i.e. tennis, or by gender, i.e. women. Alternatively, if managing a news site, you may choose to segment the website based on content type, i.e. articles, or sections i.e. international news.&nbsp; This not only allows for easier sharing of data across teams, but also helps to pinpoint where issues may be on the website. This becomes incredibly useful when there are specific events such as a product launch or major news event.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="556" src="https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1-1024x556.png" alt="botify segment crawl report by day" class="wp-image-15772" srcset="https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1-1024x556.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1-300x163.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1-768x417.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1-825x448.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1-945x513.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/botify-segment-crawl-report-by-day-1.png 1329w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><br>In fact, one of Botify’s publisher customers experienced a short-term boost in traffic followed by a steep decline in traffic. A recent news event was responsible for the boost, and when they isolated their pages by content, they were able to see that their evergreen content was suffering. The only way to identify the problem was by splitting both types of content through segmentation.</p>



<p>It&#8217;s also important to monitor which pages are being crawled frequently in order to gauge if search engine bots are coming back to your website often enough and finding new content when they do return. If you notice that they are coming back to pages that remain largely unchanged, this can be a waste of crawl budget that would be better used on pages with fresh content.</p>



<h2 class="wp-block-heading">Monitoring 304s and static resources</h2>



<p>Within LogAnalyzer, you can see all of your pages that return a 304 status code. This status code signals to a web crawler that it has not been modified and should be cached, helping lower the crawl frequency to these pages and freeing up crawl budget to be allocated to other pages. Reviewing 304s is also a useful tactic for site audits to determine if your server is telling search engines that pages that have, in fact, been updated, have not been.&nbsp;</p>



<p>Similarly, you can monitor the frequency at which search engine bots are crawling static resources such as JavaScript files, fonts, CSS files, and more &#8211; but also the number of resources they are spending to render this content. This not only affects crawl budget, but also <a href="https://ohgm.co.uk/render-gauntlet-request-blocking/">render budget</a>. </p>



<p>Render budget looks at how many pages a search engine bot is able to fully execute and the resources it takes to do so as compared to a simple HTML page. If 40+% of your crawls are going towards these types of resources, you may potentially have a render budget issue, which would impact how much content Google will crawl and ultimately render in a given timeframe.</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="513" src="https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-1024x513.png" alt="botify static crawl volume report" class="wp-image-15773" srcset="https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-1024x513.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-300x150.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-768x385.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-1536x770.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-825x414.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report-945x474.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/botify-static-crawl-volume-report.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="463" src="https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report-1024x463.png" alt="botify HTTP code by day report" class="wp-image-15774" srcset="https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report-1024x463.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report-300x136.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report-768x347.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report-825x373.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report-945x427.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/botify-HTTP-code-by-day-report.png 1328w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Log file analysis reports can uncover a wealth of information about the discoverability and performance of your website and should help guide your SEO priorities. And, with so many people changing various portions of the website, it’s an excellent diagnostic tool to pinpoint anomalies and mitigate disasters &#8211; one that should be utilized regularly.&nbsp;</p>



<p>But as you know, SEO professionals are often asked to do a lot with a little. Working with a trusted agency partner like iPullRank, who has the <a href="https://ipullrank.com/services/technical-seo">technical SEO</a> acumen to utilize a sophisticated platform like Botify, the experience to run the breadth and depth of analyses necessary to keep up, and the expertise to help turn analysis into action, maximizes the value of your overall investment in organic search.&nbsp;</p>



<h2 class="wp-block-heading">How to diagnose which pages are not being crawled by Google</h2>



<p>Google might not be crawling your entire site. You need to discover which pages aren&#8217;t being crawled and why.</p>



<p>Every time Googlebot crawls your site, your team may have deployed something that prevents the spider from picking up on your content. You need recurring monitoring in place to alert you of those page drops every time they happen.&nbsp;</p>



<p>With Botify&#8217;s SiteCrawler, you can overlay log and crawl data and simplify the challenge of finding those gaps.</p>



<p>One of the most popular charts within the Botify platform, within the Search Engine section of SiteCrawler, is a simple Venn diagram comparing what was crawled by Botify only, crawled by both Botify and Google, and crawled by Google only. This gives an easy visual of what your website crawl coverage is, with the ability to drill down further and compare characteristics across URLs or sets of URLs, across crawls. </p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="678" height="510" src="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-8.png" alt="Botify orphans explorer report" class="wp-image-15775" srcset="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-8.png 678w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-8-300x226.png 300w" sizes="(max-width: 678px) 100vw, 678px" /></figure>



<p>Within Site Crawler, you can also find additional insights surrounding:</p>



<h3 class="wp-block-heading">Inlinks, redirects, and sitemap maintenance</h3>



<p><strong>Problem: </strong>If you have inlinks to 4XX or 3XX pages, redirects to 4XX pages, or 3XX or 4XX in sitemaps, you can be wasting crawl budget, as well as creating a poor user experience for both search engines and users.&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Inlinks to 4XX or 3XX or Redirects to 4XX:</strong>  Sending search engines to pages that don’t exist, or a page where they are then redirected once again, wastes crawl budget and disrupts the experience of finding relevant content on your site.
<ul class="wp-block-list">
<li><strong>Solution: </strong>Within the Inlinks subsection in SiteCrawler, set a filter to view your URLs by status code, quickly understand the volume of URLs impacted, drill into them specifically, and work with your team to remove or replace.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="435" src="https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks-1024x435.png" alt="botify inlinks" class="wp-image-15777" srcset="https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks-1024x435.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks-300x127.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks-768x326.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks-825x351.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks-945x402.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/botify-inlinks.png 1266w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="468" src="https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code-1024x468.png" alt="Botify Follow Inlinks by HTTP Status Code Report " class="wp-image-15776" srcset="https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code-1024x468.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code-300x137.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code-768x351.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code-825x377.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code-945x432.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-inlinks-report-by-HTTP-status-code.png 1216w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li><strong>3XX or 4XX in sitemaps: </strong>sitemaps should only contain clean URLs, i.e. those with a 200 status code. If search engines see URLs with 3XX or 4XX, they will start to lose trust in your sitemaps and no longer reference it as a signal for indexing.
<ul class="wp-block-list">
<li><strong>Solution:</strong> Within SiteCrawler, visit the Sitemaps section and filter your URLs based on status code (or by showing all but 2XX status codes). You can see the breakdown based on your website’s page type, category, country, domain, and more, and see a list of each URL and the specific status code. From there, you can prioritize removing them, and for 3XX, replacing them with the destination URLs.</li>
</ul>
</li>
</ul>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="219" src="https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-1024x219.png" alt="Botify - URLs crawled by pagetype report" class="wp-image-15778" srcset="https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-1024x219.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-300x64.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-768x164.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-1536x328.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-825x176.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report-945x202.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-URLs-crawled-by-pagetype-report.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Non-self-referencing canonicals</h3>



<p><strong>Problem: </strong>URLs may get linked with parameters and UTM tags leading Google to pick up that URL as the canonical version and multiple versions of the same page getting indexed separately. So a self-referencing canonical lets you specify which URL you want to have recognized as the canonical URL.</p>



<p><strong>Solution: </strong>Checking canonicals one by one is nearly impossible. Botify checks for <a href="https://www.botify.com/blog/the-top-10-questions-about-canonical-tags-answered">common canonicalization mistakes</a> and has reports that give you visibility into whether or not your canonical tags are following best practices. The platform shows you everything from content similarity between a page and its canonical to pages that canonical to a URL with errors.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="394" src="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-1024x394.png" alt="Botify - URL crawl segments report" class="wp-image-15779" srcset="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-1024x394.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-300x116.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-768x296.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-1536x591.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-825x318.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9-945x364.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-9.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="525" src="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10-1024x525.png" alt="Botify similarity in content to canonical report" class="wp-image-15780" srcset="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10-1024x525.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10-300x154.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10-768x394.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10-825x423.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10-945x484.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-10.png 1155w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><strong>Depth of content</strong>&nbsp;</h3>



<p><strong>Problem:</strong> If strategic pages are buried too deep within a website, search engines may not discover them, in turn not index them and eliminate the chance of traffic from organic search. Search engines may also not return and try to find them often enough, impacting crawl frequency.&nbsp;</p>



<figure class="wp-block-image aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report-1024x593.png" alt="Botify URLs by depth and content type report" class="wp-image-15287" width="512" height="297" srcset="https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report-1024x593.png 1024w, https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report-300x174.png 300w, https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report-768x444.png 768w, https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report-825x477.png 825w, https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report-945x547.png 945w, https://ipullrank.com/wp-content/uploads/2022/09/botify-content-type-report.png 1106w" sizes="(max-width: 512px) 100vw, 512px" /></figure>



<p><strong>Solution:</strong> Look at how many pages search engines are finding in a given crawl, and how many have a page depth of three or more. Typically, if a page needs more than three clicks to be reached, it will perform poorly, and excessive page depth can be a threat to your SEO.&nbsp;</p>



<p>In order to mitigate page depth issues, consider your pagination, limit navigation filters, and move or remove tracking parameters.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="353" src="https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-1024x353.png" alt="Botify crawled URLs vs Google crawled URLs report" class="wp-image-15781" srcset="https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-1024x353.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-300x103.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-768x264.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-1536x529.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-825x284.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report-945x325.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/Botify-crawled-URLs-vs-Google-crawled-URLs-report.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">URL response time</h3>



<p><strong>Problem: </strong>If the response time of your URLs is too slow, typically over two seconds, there&#8217;s the possibility that Googlebot will not crawl them. If they&#8217;re not crawled, they won&#8217;t be indexed, eliminating their ability to drive traffic. A page that loads in 500ms or less is considered extremely fast in the eyes of Google.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="398" src="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-1024x398.png" alt="Botify Load time distribution report" class="wp-image-15782" srcset="https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-1024x398.png 1024w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-300x117.png 300w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-768x299.png 768w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-1536x597.png 1536w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-825x321.png 825w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11-945x367.png 945w, https://ipullrank.com/wp-content/uploads/2022/12/pasted-image-0-11.png 1600w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong>Solution</strong>: Use Botify&#8217;s SiteCrawler to find your URLs that are indexable, but are loading too slowly and compare it to what is actually being crawled, indexed, and rendered fully, as elements on the page might be the cause of the slow response time.&nbsp;</p>



<p>The ability to integrate crawl and log data in a single platform for easy comparison is also a key distinction between Botify and some of the other log file tools. Botify unifies this crawl and log data with keyword data and website analytics for the most comprehensive analysis of your website. Logflare or Screaming Frog’s Log Analyser, for example, are more manual, less automated, and not efficiently integrated with other data sets, posing risks for inaccuracy and missed opportunities. Furthermore, using machine-based storage instead of cloud-based storage makes it more difficult to share data and views with key stakeholders.&nbsp;</p>



<h2 class="wp-block-heading">Finding the right partners</h2>



<p>With lean teams, the constantly changing digital and SEO landscape, and heightened consumer expectations, brands need to minimize the busy work and develop an organic search strategy that combines the best of technology and expertise.&nbsp; iPullRank up levels the strategy of many enterprise brands utilizing Botify’s technology &#8211; and can do the same for you.&nbsp;</p>



<p>Learn more about <a href="https://www.botify.com/platform/botify-analytics/loganalyzer">Botify&#8217;s LogAnalyzer</a> and for a complete log file audit, <a href="https://ipullrank.com/contact">contact iPullRank</a>. </p>



<figure class="wp-block-image aligncenter size-large is-resized"><a href="https://ipullrank.com/recession-seo-playbook"><img loading="lazy" decoding="async" src="https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-1024x512.jpg" alt="" class="wp-image-15619" width="512" height="256" srcset="https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-1024x512.jpg 1024w, https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-300x150.jpg 300w, https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-768x384.jpg 768w, https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-1536x768.jpg 1536w, https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-2048x1024.jpg 2048w, https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-825x413.jpg 825w, https://ipullrank.com/wp-content/uploads/2022/03/recession-seo-graphic-blog-945x473.jpg 945w" sizes="(max-width: 512px) 100vw, 512px" /></a></figure>
<p>The post <a href="https://ipullrank.com/log-file-analysis-for-seo">Log File Analysis: A Must-Have for SEO Pros</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ipullrank.com/log-file-analysis-for-seo/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Page Experience for Desktop: Your Preparation Guide</title>
		<link>https://ipullrank.com/page-experience-for-desktop-your-preparation-guide</link>
					<comments>https://ipullrank.com/page-experience-for-desktop-your-preparation-guide#respond</comments>
		
		<dc:creator><![CDATA[Toby Nwazor]]></dc:creator>
		<pubDate>Wed, 16 Feb 2022 14:01:00 +0000</pubDate>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tools]]></category>
		<guid isPermaLink="false">https://ipullrank.com/?p=14660</guid>

					<description><![CDATA[<p>In November 2021, Google announced that it will roll out its desktop version of the Page Experience Update between February and March 2022. This implies that the three core web vitals (FID, LCP, and CLD) will be considered for the desktop ranking.&#160; In this article, I will explain what the desktop page experience update means [&#8230;]</p>
<p>The post <a href="https://ipullrank.com/page-experience-for-desktop-your-preparation-guide">Page Experience for Desktop: Your Preparation Guide</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>In November 2021,<a href="https://developers.google.com/search/blog/2021/11/bringing-page-experience-to-desktop#:~:text=and%20August%202021.-,Rollout%20will%20begin%20in%20February%202022,for%20mobile%20earlier%20this%20year."> Google announced</a> that it will roll out its desktop version of the <a href="https://ipullrank.com/the-seo-weekly-episode-19-page-experience-desktop">Page Experience Update</a> between February and March 2022. This implies that the three core web vitals (FID, LCP, and CLD) will be considered for the desktop ranking.&nbsp;</p>



<p>In this article, I will explain what the desktop page experience update means for you, and how you can help your site to rank better with the new features.</p>



<h2 class="wp-block-heading" id="what-is-page-experience"><strong>What is Page Experience?</strong></h2>



<p>Page experience refers to the signals that evaluate a user’s experience with a web page. It goes beyond the value of the content on the page and includes<a href="https://ipullrank.com/what-are-core-web-vitals-and-why-are-they-important"> core web vitals</a> that measure loading rate, visual stability, as well as mobile-friendliness. Google’s target is to improve the experiences of users who search for information on the platform.</p>



<p>Some years back, <a href="https://developers.google.com/search/blog/2020/06/how-we-fought-search-spam-on-google">hackers began using spam techniques </a>to manipulate the way pages ranked on Google. As a result, monetized sites appeared more relevant to search queries than the real content. At the time, the experiences of users were not considered.</p>



<p>However, when users gave negative feedback to the rise in irrelevant content, Google re-strategized. This gave birth to HTTPS (security), mobile-friendliness (device context), and AMP (accelerated mobile pages &#8211; for speed) as ranking signals. The page experience signal is simply icing on the cake to ensure user satisfaction.</p>



<h2 class="wp-block-heading" id="why-does-the-device-matter-for-page-experience"><strong>Why Does the Device Matter for Page Experience?</strong></h2>



<p>Previously, Google indexed only the desktop version of web page content. Since more people now search for information using their mobile devices, Googlebot indexes and ranks content differently for both desktop and mobile devices.</p>



<p>In fact, search engines, especially Google, now display more search results for <a href="https://ipullrank.com/how-to-tell-if-your-site-is-mobile-friendly-or-not">mobile-friendly pages</a> than desktop. When you search for information with your smartphone, you are more likely to want local information since you are on the move (naturally that’s changed with the pandemic). But with a desktop, the results will include more text, images, and videos. Hence, the ranking for both devices will differ.</p>



<p>Additionally, people want to see quick results, so responsive websites ( a dynamic version of the site that adapts to the device depending on the viewport size) are more likely to rank well. If a website is not responsive, it might be more visible in desktop search results. This implies that if someone searches for the same keyword using a mobile device, your website may not even show up. Hence, the mobile-friendliness of a site matters.</p>



<p>Sometimes, however, a user’s experience on a website may be influenced by the speed of their internet connectivity and the type of device in use. As a result, different users will use different devices for personalization.</p>



<p>In 2019, Google rolled out its<a href="https://developers.google.com/search/mobile-sites/mobile-first-indexing"> mobile-first indexing</a>, which indexes and ranks mobile version content first. Eventually, Google plans to move to a <a href="https://ipullrank.com/how-to-tell-if-your-site-is-mobile-friendly-or-not">mobile-only index</a>, though that’s been delayed to some undefined time in the future. However, the page experience desktop update emphasizes providing the same user experience on both desktop and mobile.</p>



<h2 class="wp-block-heading" id="how-do-you-check-your-page-experience-for-desktop"><strong>How Do You Check Your Page Experience for Desktop?</strong></h2>



<h3 class="wp-block-heading" id="google-search-console">Google Search Console</h3>



<p>To check your page experience for desktop, do the following:</p>



<ul class="wp-block-list"><li>Sign in to Google Search Console on your computer.</li><li>You will find the “Experience” section on the left side of the screen after the “Index” section. Below it, you will find a menu containing Page experience, Core web vitals, and Mobile Usability as shown below.</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/7Mth0L1MVPSmHR4-N1XpTXqXZRuAicyO9OaOMZLfIwlpHUG4BWPFruA2SybMFWXtzmnRJZi-ZJX45VZCfVHgHT5CO0zJ89tB6mvF80bhY-ev58w7Hjt5HzjbthPuX-NSgU2yD8vM" alt=""/></figure>



<ul class="wp-block-list"><li>Click on “core web vitals” to see a desktop report of how your site is faring.</li><li>Next, click on “page experience”. This will display the percentage of good URLs on your site and the total impressions on the good URLs. Depending on your SEO strategies and best practices, your ratings could either be good or bad.&nbsp;</li><li>Google Search Console also displays a graph of your URLs’ performances over a period. You can click on any portion of the graph to see the performance for a particular day or week. You can also evaluate the performance of individual URLs from the search console.</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/-mga6c5BUADKRn5LyioP7mku96A77V7D_QhrZBzvfwgkkPF6MQhJvkrm3qMB-2wA3DxE1UAvQVqYHUIW_pOB1hgOh4FHgyVRY-_TZMWQgGHjV2Vkb9qJYN_c5U2Yh553etHh4uEa" alt=""/></figure>



<ul class="wp-block-list"><li>Below the chart, you will see the desktop page experience signals that Google uses to rank sites: core web vitals and HTTPS. The ratings can either be good or bad too.&nbsp;</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/D_Fiby-wn4CWw7YIZQPvOXf4x1Rf3PmV9S8UPs7ZIcWTMjk3944jreskbdoAtxUnZGlc-8c3ptJMSbP0z7ZOSy5mkmNpRNFssC1n1HOzec8QgHI_p9RPQaGw93m9qu-O-he2RalO" alt=""/></figure>



<p>The report does not include mobile usability since desktop sites do not need it to achieve a good score for desktop page experience.</p>



<h3 class="wp-block-heading" id="lighthouse">Lighthouse</h3>



<p>Lighthouse is an<a href="https://github.com/GoogleChrome/lighthouse"> open-source tool</a> that you can use to improve your web pages.&nbsp;</p>



<p>It audits individual URLs on a website for five parameters:&nbsp;</p>



<ul class="wp-block-list"><li>Performance</li><li>Progressive web applications</li><li>Best practices</li><li>Accessibility</li><li>SEO</li></ul>



<p>From the audit report, you can see how your web pages are faring on web applications, desktops, and mobile devices.</p>



<p>Lighthouse runs in Chrome DevTools. You can also install it as a chrome extension or use the Node CLI. And it is very easy to use.&nbsp;</p>



<p>Simply input the URL of one of your web pages on the tool, then allow it to run an intensive audit. It will display a report of the parameters that are doing well and those that need improvement. The tool is generous enough to explain why those parameters are not too good and what you can do to fix them.</p>



<h3 class="wp-block-heading" id="let-s-see-how-to-audit-a-web-page-using-chrome-devtools">Let’s see how to audit a web page using Chrome DevTools</h3>



<ul class="wp-block-list"><li>Install Google Chrome on your computer.</li><li>In the search bar, enter a link to the page you want to audit and open it.</li><li>Right-click, then select inspect to<a href="https://developer.chrome.com/docs/devtools/open/"> open Chrome DevTools</a>.</li><li>A page will open on the right side of the window. Click on the right-shift operator (&gt;&gt;) on the header of that page, then go down and select Lighthouse.</li><li>Under “categories”, ensure that the five parameters for the audit are checked. For device, select “desktop”.</li></ul>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/BnmDsx0YAnooqYZtu3IjzNuMbd0g9t9S7BVD-KAG0-53H6AA8-KGK9EudxDjT7HQpBEaXDADaN7yd7s67sETYnuI1trxfLLvE_ZgpbM5MZsu7whV9-LOfNuxUsGKez0Lt6IUSDde" alt=""/></figure>



<ul class="wp-block-list"><li>Click on “Generate report”. It will take between 30 seconds to 1 minute to see the audit report.</li></ul>



<p>If you installed some extensions on your Google Chrome browser, run the audit in an incognito window. Chrome extensions may reduce the load performance of the page.</p>



<p>Below is an example of Lighthouse audit reports for The New York Times vs Washington Post.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/GRS5kamX4JgLL7ftKx4eq-FV3LichWGOGoYL3YZ0VLHS8xMR71kywbMSUjyQyWPH4rCVbVYoAsVMIITjIHUsxHKUQLwboNlYoQlreGUDWKPflhvy9_9xwex8xM0wcHQMqY5rKcNj" alt=""/></figure>



<p>The performance score gives you an idea of how each page is faring based on the desktop core web vitals. If you scroll down, you will see opportunities and diagnostics, which are suggestions that can help the page to load faster. They may not directly influence the performance score though.</p>



<p>It is important to note that performance scores can fluctuate due to certain factors. These factors include the type of desktop used during the audit, antivirus software, browser extensions, and ads on the site.</p>



<p>After diagnostics, you will find a section called “passed audits”. The items that are checked in green are the applicable audits while those that are unchecked do not apply to the web page.&nbsp;</p>



<p>From the photo shared above, the performance scores of The New York Times and Washington Post are below par. A good score in Lighthouse is between 50 and 89 while an excellent score is between 90 and 100.</p>



<p>Furthermore, The New York Times has an excellent accessibility score compared to Washington Post. Accessibility measures whether people with impairments can navigate the site or not.</p>



<p>In this case, The New York Times has settings that allow site visitors to increase the font size. On November 8th, 2017, the site started including closed captioning (CC) in videos featured on the site. In 2019, it enabled transcripts for both videos and audio.</p>



<p>Washington Post, on the other hand, has accessibility features such as closed captioning, alt text for images, color contrast, and keyboard navigation.</p>



<p>Best Practice score checks whether the web page utilized methods that prove trustworthiness and safety. SEO (search engine optimization) refers to the page optimization that enables it to rank high in search results. You can see that The New York Times scored 100 in SEO. Overall, it is safe to say that The New York Times is more user-friendly than Washington Post.</p>



<p>Here’s another example of two popular e-commerce sites: Amazon vs Etsy</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/AqmzfIqSZcl5NbK3SGzco0KB_7oSCiSTFChWJJSybbqH6uInmM_GpiSxfQluMOoHEYtqwY1CF7aCEKUwymud7rj6LP4J7C3Kz-FaWoMDtha3df-Slrqh1ZfrcqI55y7YEMKDxlxX" alt=""/></figure>



<p>Amazon has a performance score of 88, which is good, while Etsy’s score is excellent at 92. This implies that Etsy is more user-friendly compared to Amazon; online shoppers can easily find the products they want on the site and purchase them.</p>



<p>When it comes to accessibility, Amazon shines brighter than Etsy. This implies that more users can access the site’s content. When a site is accessible, there is a huge potential for visitors to convert to paying customers.</p>



<p>In the SEO segment, Etsy does better than Amazon. On a general note, both sites are not doing poorly. If the site managers adjust a few items, following the suggestions on Lighthouse, there will be significant improvements.&nbsp;</p>



<p>In addition to using the developer tools in the Chrome Browser, you can use another free Google tool: <a href="https://pagespeed.web.dev/">Page Speed Insights</a>.&nbsp; This tool uses the Lighthouse framework but lives independently of the Chrome developer tools. Using Page Speed Insights, you can more efficiently toggle between Desktop and Mobile versions of your site:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1440" height="810" src="https://ipullrank.com/wp-content/uploads/2022/02/Add-a-heading.gif" alt="" class="wp-image-14662"/></figure>



<h2 class="wp-block-heading" id="how-does-page-experience-impact-seo"><strong>How Does Page Experience Impact SEO?</strong></h2>



<p>The anticipated desktop page experience update does not rule out the need to create quality content. It is a call for marketing teams to strategically ensure that the desktop versions of their sites are more user-friendly. So, if your site is user-friendly but does not offer quality content, it will rank low. Thankfully, you can always reach out for a <a href="https://ipullrank.com/services/content-strategy">content strategy</a> consultation to help with that.</p>



<p>In a <a href="https://search-off-the-record.libsyn.com/what-if-speed-was-a-ranking-factor">podcast</a>, Google’s John Mueller, Martin Splitt, and Gary Illyes discussed something about a tie-breaker with respect to page speed, a part of the core web vitals.&nbsp;</p>



<p>Does this mean we should be bothered about the page experience update, especially if we stick to the new rules but a web page loads slowly due to factors beyond our control?&nbsp;</p>



<p>Does it really matter since our SEO tools can make recommendations for improved site visibility in search results pages?</p>



<p>This is a confusing situation because when Google started using HTTPS as a ranking factor, there was a tie-breaker too. Google claimed to prioritize HTTPS sites over non-HTTPS sites if there was a tie.&nbsp;</p>



<p>Well, the right thing to do is increase your knowledge base of core web vitals since they affect the way visitors use your site. The metrics go beyond the traditional optimization strategies, utilizing complex SEO tips and tricks. The reward for doing this is that your site will earn a good spot in search results because Google promotes content that a lot of users find valuable.&nbsp;</p>



<p>Remember that <a href="https://ipullrank.com/page-experience-for-seo-faqs">page experience is not just about the content</a> but also how users interact with the entire website. That is why it is important for CMOs to focus on content, page experience, and <a href="https://ipullrank.com/resources/guides-ebooks/modern-enterprise-seo-guide">SEO</a> if they really wish to increase conversion at the end of the day.</p>



<h2 class="wp-block-heading" id="other-considerations-for-page-experience-beyond-seo"><strong>Other Considerations for Page Experience Beyond SEO</strong></h2>



<p>Take off your SEO hat for just a minute and you will realize that your marketing strategy requires a rewarding <a href="https://ipullrank.com/page-experience-for-seo-a-guide-for-the-rest-of-us">page experience</a>. At the base of this experience is a web page that loads faster than the speed of light.</p>



<p>Imagine that you visit a website with the excitement of seeing what they’ve got only for you to meet a site that loads endlessly. Even if the excitement sustains you for 10 seconds, probably because you got a hint of what the website is offering, you’d be turned off and could leave eventually. Yeah, a slow web page is a huge turn-off.</p>



<p><a href="https://www.cloudflare.com/learning/performance/more/website-performance-conversion-rates/">According to Cloudflare</a>, the first five seconds of loading a page impacts the conversion rates. Anything beyond that will reduce your conversion rate by 4.42 percent on average.</p>



<h3 class="wp-block-heading" id="some-factors-responsible-for-slow-loading-are"><strong>Some factors responsible for slow loading are:</strong></h3>



<ul class="wp-block-list"><li>The response time of the server</li><li>Redirecting visitors to a different page</li><li>Embedding heavy videos and large-sized images</li><li>Using too many JavaScript, CSS, and HTML lines of code than necessary</li></ul>



<p>The truth is that people are willing to forgo the fancy themes, images, and videos just to access a fast-loading web page. You stand a better chance of converting visitors to customers if they can access your website within the first 2 seconds.</p>



<p>Thankfully, there are several steps you can take to increase how fast your web page loads.</p>



<h3 class="wp-block-heading" id="how-to-increase-the-speed-of-your-web-page"><strong>How to increase the speed of your web page</strong></h3>



<ul class="wp-block-list"><li>Choose a hosting platform that is built for speed. If you are just starting, you may be tempted to go for shared hosting because it is cheap. However, bear in mind that the activities of other server tenants will impact your loading time.</li><li>Boost your web page speed by leveraging a content delivery network.</li><li>Use an image optimization plugin to compress large image files. Also, compress your HTML and CSS files as they usually contain duplicate lines of codes and white space.</li><li>Host videos on platforms like YouTube, then embed the links on your site.</li><li>Reduce the number of links that redirect people to another page. Some backlinks are not necessary; get rid of them.</li><li>Enable page cache to reduce the TTFB (time-to-first-byte). What this does is present the static features of your site immediately after a user tries to access it. Afterward, it can gradually load the rest of the site’s features like images, fonts, videos, and so on. You can also enable caching for the browser to prevent stylesheet, HTML, and JS from loading all over again when someone visits the site.</li></ul>



<p>Now that you are aware of Google’s desktop page experience update, it is time for CMOs, SEO managers, content developers, and all concerned to go back to the drawing table.&nbsp;</p>



<p>Delivering great content is amazing, but how well can users access them? Is your site secure and trustworthy? Does your page load within 0 to 2 seconds? These and other metrics in the core web vitals will help you to align your website with Google’s new ranking factor.</p>



<p>Are you ready to crush your marketing goals and get the conversion rates your business deserves? Download the<a href="https://ipullrank.com/resources/guides-ebooks/personas-guide"> Ultimate Personas Guide eBook</a> to help you understand and relate with your target audience at a deeper level.&nbsp;</p>



<figure class="wp-block-image size-full"><a href="https://ipullrank.com/resources/guides-ebooks/personas-guide"><img loading="lazy" decoding="async" width="801" height="301" src="https://ipullrank.com/wp-content/uploads/2021/09/Ebook-Blog-Tile-blue-1.jpg" alt="" class="wp-image-13748" srcset="https://ipullrank.com/wp-content/uploads/2021/09/Ebook-Blog-Tile-blue-1.jpg 801w, https://ipullrank.com/wp-content/uploads/2021/09/Ebook-Blog-Tile-blue-1-300x113.jpg 300w, https://ipullrank.com/wp-content/uploads/2021/09/Ebook-Blog-Tile-blue-1-768x289.jpg 768w" sizes="(max-width: 801px) 100vw, 801px" /></a></figure>
<p>The post <a href="https://ipullrank.com/page-experience-for-desktop-your-preparation-guide">Page Experience for Desktop: Your Preparation Guide</a> appeared first on <a href="https://ipullrank.com">iPullRank</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ipullrank.com/page-experience-for-desktop-your-preparation-guide/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
