
{"id":16735,"date":"2023-08-04T09:29:24","date_gmt":"2023-08-04T13:29:24","guid":{"rendered":"https:\/\/ipullrank.com\/?p=16735"},"modified":"2025-08-01T09:13:22","modified_gmt":"2025-08-01T13:13:22","slug":"how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com","status":"publish","type":"post","link":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com","title":{"rendered":"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"16735\" class=\"elementor elementor-16735\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a1eee9c elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a1eee9c\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e948884\" data-id=\"e948884\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d614793 elementor-widget elementor-widget-text-editor\" data-id=\"d614793\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Back in April 2023, sadly <\/span><a href=\"https:\/\/www.nytimes.com\/2023\/04\/23\/business\/bed-bath-beyond-bankruptcy.html\"><span style=\"font-weight: 400;\">Bed, Bath &amp; Beyond filed for bankruptcy<\/span><\/a><span style=\"font-weight: 400;\">. Unfortunately, it was not much of a shock due to the <\/span><a href=\"https:\/\/www.cnn.com\/2022\/09\/29\/business\/bed-bath-and-beyond-stock-earnings\/index.html\"><span style=\"font-weight: 400;\">news that had been swirling<\/span><\/a> <a href=\"https:\/\/www.cnbc.com\/2022\/08\/18\/activist-investor-ryan-cohen-completes-planned-sale-of-bed-bath-beyond-stake.html\"><span style=\"font-weight: 400;\">around the company<\/span><\/a> <a href=\"https:\/\/www.cnbc.com\/2023\/01\/05\/bed-bath-beyond-shares-plummet-as-company-warns-of-deeper-financial-troubles.html\"><span style=\"font-weight: 400;\">in the months prior<\/span><\/a><span style=\"font-weight: 400;\">, but still heartbreaking to see an American institution evaporate. What was shocking, though, was when Overstock.com announced they would acquire the name, trademark, and domain and rebrand itself as a Bed, Bath &amp; Beyond.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">For Overstock, this is a very smart move for a variety of reasons related to brand awareness.\u00a0 The mindshare of a brand born in the 1950\u2019s with a presence in malls across the country is much larger than that of an e-comm site that got its start by selling overstock of failing dot com companies. As far as Organic Search goes, it\u2019s a huge opportunity to quickly double Organic Search traffic. And, at the very least, there\u2019s a possibility of nearly doubling the site\u2019s external link equity. I&#8217;m proud of these folks for capitalizing on such a land grab.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b53408c elementor-widget elementor-widget-image\" data-id=\"b53408c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"309\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min-1024x395.png\" class=\"attachment-large size-large wp-image-16745\" alt=\"screenshot of overstock vs Bed Bath and Beyond website performance on Semrush for referring domains\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min-1024x395.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min-300x116.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min-768x296.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min-825x318.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min-945x364.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-vs-bbb-referring-domains-min.png 1056w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7244ce9 elementor-widget elementor-widget-text-editor\" data-id=\"7244ce9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Considering the upside for Overstock when they got these assets at <\/span><a href=\"https:\/\/www.retaildive.com\/news\/overstock-wins-bed-bath-beyond-ip-auction-21m-bid\/653634\/\"><span style=\"font-weight: 400;\">fire sale pricing<\/span><\/a><span style=\"font-weight: 400;\">, somebody on the M&amp;A team deserves a raise. The links alone would cost more than what they paid for the brand. Now, as for the SEO that needs to work out the migration, your job will be much more challenging than Twitter rebranding to X. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-796c231 elementor-widget elementor-widget-heading\" data-id=\"796c231\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Site Migrations Aren\u2019t Difficult, They Are Tedious<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf8e00f elementor-widget elementor-widget-text-editor\" data-id=\"bf8e00f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Migrating a website from one domain to another is a technically simple and <\/span><a href=\"https:\/\/developers.google.com\/search\/docs\/crawling-indexing\/site-move-with-url-changes\"><span style=\"font-weight: 400;\">well-paved process<\/span><\/a><span style=\"font-weight: 400;\">. It\u2019s really just 11 simple steps:<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Determine what content needs to be migrated<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Identify the mapping between source and target URLs<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Identify the mapping of broken link targets to new target URLs<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Move the content from the source to the target URLs<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Implement redirects from the source URL to the target URL<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Update the internal linking structure on the destination site to point to final destination URLs on the target site<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Update canonical directives on the target site (sitemap, rel-canonical, canonical headers)<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Implement new XML sitemaps with the new URLs on the target site<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Crawl the original site\u2019s URLs to validate redirects to the new site and stress test the underlying services<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">File a change of address in Google Search Console on the old site<\/span><\/li><\/ol><p><span style=\"font-weight: 400;\">Watch rankings, analytics, and log files of both sites with the goal of seeing the target site overtake the source site\u2019s rankings\u00a0<\/span><span style=\"font-weight: 400;\"><br \/><\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ba520a elementor-widget elementor-widget-image\" data-id=\"2ba520a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"255\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/ipr-migration-traffic-example-min.png\" class=\"attachment-large size-large wp-image-16736\" alt=\"Screenshot graphic of iPullRank migration traffic example\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/ipr-migration-traffic-example-min.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/ipr-migration-traffic-example-min-300x96.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/ipr-migration-traffic-example-min-768x245.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/ipr-migration-traffic-example-min-825x263.png 825w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b4cb7e elementor-widget elementor-widget-text-editor\" data-id=\"6b4cb7e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">After you do this, it\u2019s generally expected that you\u2019ll see losses at the target site for around 6 months. However, at iPullRank we\u2019ve been pretty fortunate to drive <\/span><a href=\"https:\/\/ipullrank.com\/resources\/case-studies\/full-scale-site-migration\"><span style=\"font-weight: 400;\">cross-domain migration recoveries in as few as 30 days<\/span><\/a><span style=\"font-weight: 400;\">. There are no magic tricks, we just do those 10 steps and work through the process with engineering teams to expand host load so Googlebot crawls more. We also leverage <\/span><a href=\"https:\/\/ohgm.co.uk\/an-alternative-approach-to-xml-sitemaps\/\"><span style=\"font-weight: 400;\">differential sitemaps<\/span><\/a><span style=\"font-weight: 400;\"> to help with crawl penetration.<\/span><\/p><p><span style=\"font-weight: 400;\">Outside of catastrophic failures of the site or any of its services, nothing in the process is especially difficult. However, it requires great attention to detail and typically a lot of coordination across many people. That\u2019s why a lot of brands come to us with these projects. It\u2019s really the mapping of source to target URLs that are the most important part of the process because of how Google reacts to situations where there is no parity between the source and target URL.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc0f74d elementor-widget elementor-widget-heading\" data-id=\"fc0f74d\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Google Never Forgets and Dislikes Irrelevant Redirects\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b532418 elementor-widget elementor-widget-text-editor\" data-id=\"b532418\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Google\u2019s index operates much like the Wayback Machine. It\u2019s designed to store multiple copies of pages for the long term. This gives the search engine the capability of making version comparisons of pages and determining how often a page needs to be crawled based on how often substantive updates occur. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bc49611 elementor-widget elementor-widget-image\" data-id=\"bc49611\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"202\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-redirects-infographic-min.png\" class=\"attachment-large size-large wp-image-16751\" alt=\"Google redirects infographic\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-redirects-infographic-min.png 900w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-redirects-infographic-min-300x76.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-redirects-infographic-min-768x194.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-redirects-infographic-min-825x208.png 825w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bdd9c33 elementor-widget elementor-widget-text-editor\" data-id=\"bdd9c33\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">This persistent storage is also used for comparisons of parity. That is why it\u2019s not enough to buy a dropped domain and throw unrelated content onto pre-existing URLs and expect to take over rankings it once had. This is also why redirecting a source URL to a target that is irrelevant (like a homepage) yields a quiet Soft 404. Google knows what was previously at the source URL and can compare what they have indexed previously with what is at the target URL.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-af693cc elementor-widget elementor-widget-image\" data-id=\"af693cc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"134\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-avoid-irrelevant-redirects-min.png\" class=\"attachment-large size-large wp-image-16744\" alt=\"Google recommendation: Avoid Irrelevant Redirects\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-avoid-irrelevant-redirects-min.png 813w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-avoid-irrelevant-redirects-min-300x50.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/google-avoid-irrelevant-redirects-min-768x128.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-252a905 elementor-widget elementor-widget-text-editor\" data-id=\"252a905\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Effectively, Google never forgets and they have progressively improved their ability to use historical data to circumvent attempts to quickly rank that used to work very well. What does still work is moving the same content from point A to point B and implementing a 301 redirect. This is still the best way to maintain the most rankings and traffic.<\/span><\/p><p><span style=\"font-weight: 400;\">Ideally, Overstock would do a &#8220;lift and shift&#8221; of its content by simply copying it from Overstock.com to BedBathAndBeyond.com and then 301 redirecting the old URLs to the new. While the code will be different, the content and its semantic relevance will remain constant because content is extracted from the code to perform such operations.<\/span><\/p><p><span style=\"font-weight: 400;\">Moreover, it would be ideal for the pre-existing content on BB&amp;B to remain live on its URLs so the existing link equity is captured and combined with that of the redirected Overstock content. After all, that is the primary value SEO value of the domain. These pages should then have links to similar products in the Overstock inventory. If the taxonomies can be merged and topical clustering reinforced, even better. They should also <\/span><i><span style=\"font-weight: 400;\">carefully<\/span><\/i><span style=\"font-weight: 400;\"> consider how to implement any messaging related to an item being out of stock so it doesn&#8217;t trigger a Soft 404. Failing that, the team could consider a large outreach effort wherein they request that sites update their links to point to the closest matching replacement product for the Overstock inventory.<\/span><\/p><p><span style=\"font-weight: 400;\">Keep in mind that I\u2019m talking about <\/span><b>ideal<\/b><span style=\"font-weight: 400;\"> conditions. Overstock may not have brokered the pre-existing content as part of the deal. The turnaround time may have been too quick to account for them. Or, they may be actively rebuilding relationships with the brands that BB&amp;B previously worked with to get those products on the new site. They may also have other technical or operational challenges that make it difficult for the most optimal implementation. Frankly, that\u2019s the most common issue with large sites. There\u2019s no way to know from the outside, but knowing the skillset of some of the people in the organization, I\u2019m sure it\u2019s all well under control. So, let&#8217;s talk more about scaling the mapping.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efe51d3 elementor-widget elementor-widget-heading\" data-id=\"efe51d3\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Using Dense Vector Embeddings to Map Redirects<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a40942b elementor-widget elementor-widget-text-editor\" data-id=\"a40942b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">I don\u2019t know if I have been loud enough about how much vector embeddings rule the world right now. At this point, I would find more value in a vector index of the web than I do from a link index of the web. After all, vector embeddings power search engines, large language models, and a host of other applications that are driving the web and other technologies forward. I continue to be befuddled by how much SEO tools don\u2019t use them. After I walk through this, I suspect you will see how valuable it would be for a link index to provide embeddings as part of their datasets.<\/span><\/p><p><span style=\"font-weight: 400;\">To combat the potential for Soft 404s, we need to map redirects using semantic similarity. Recently, I discussed how search engines measure relevance by computing the cosine similarity of vector embeddings. This is also how Google may compute content parity in determining whether the source and target of the 301 redirect are related. To compute the semantic distance between a previously indexed and new content at the same URL it is likely that if it is within a certain threshold then the redirect is valid and passes link equity. If it\u2019s not that then it Soft 404s.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">I\u2019ll leave you with a Colab notebook so you can do it in Python, but the approach is as follows:<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Crawl each BedBathAndBeyond.com<\/span><ol><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Extract the content from HTML<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Vectorize the content\u00a0<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Store the URL and the vectorized content and in a vector database<\/span><\/li><\/ol><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">For each Overstock.com URL<\/span><ol><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Crawl each URL<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Extract the content from HTML<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Vectorize the content<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Search the vector database to find the URL to get the closest semantic match<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Use this resulting URL as the redirect target<\/span><\/li><\/ol><\/li><\/ol><p><span style=\"font-weight: 400;\">Internally, this would be far easier to do than it will be externally because of crawl throttling. There\u2019s a possibility that the Overstock team has direct access to the historical content from BedBathAndBeyond.com so they could simply go through a database table and vectorize. We\u2019re on the outside though, so let\u2019s talk about how we\u2019ll do it.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e092480 elementor-widget elementor-widget-heading\" data-id=\"e092480\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Getting this Started in Python\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12953bc elementor-widget elementor-widget-text-editor\" data-id=\"12953bc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">If you want to skip to the punchline, <\/span><a href=\"https:\/\/colab.research.google.com\/drive\/1M5y_fnZZJ4-cWbbfwa1J5tpkpVukoTc6?usp=sharing\"><span style=\"font-weight: 400;\">grab this Colab notebook with the completed code<\/span><\/a><span style=\"font-weight: 400;\">. Otherwise, I\u2019ll go through the steps of how you set this URL mapping functionality up in Python. For a site this size, I recommend you run this code from the command line, but you can also subscribe to Coalb or run it from a Jupyter notebook. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d595145 elementor-widget elementor-widget-heading\" data-id=\"d595145\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Install the Libraries\n<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d59aa1 elementor-widget elementor-widget-text-editor\" data-id=\"8d59aa1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">The first thing you\u2019ll need to do is install the libraries that will do most of the heavy lifting. We\u2019ll need requests for crawling, Beautiful Soup 4 for HTML parsing, Tensorflow, and Tensorflow Hub to encode embeddings and the Pinecone client to access the vector database.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e6643d elementor-widget elementor-widget-text-editor\" data-id=\"5e6643d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\">pip install requests beautifulsoup4 tensorflow tensorflow_hub pinecone-client<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb82b5e elementor-widget elementor-widget-text-editor\" data-id=\"bb82b5e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Install the libraries with the code above. In Colab, you\u2019ll see that most of these are already satisfied. If you\u2019re at your CLI, you\u2019ll likely see messages related to downloading and installing packages.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9b0343a elementor-widget elementor-widget-heading\" data-id=\"9b0343a\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Import the Libraries<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c77d05 elementor-widget elementor-widget-text-editor\" data-id=\"8c77d05\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">In your IDE (preferably VS Code), create a file and import those libraries into our code so we can access the functionality.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1172d11 elementor-widget elementor-widget-text-editor\" data-id=\"1172d11\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\">import requests\nfrom bs4 import BeautifulSoup\nimport tensorflow as tf\nimport tensorflow_hub as hub\nimport numpy as np\nfrom urllib.parse import urlparse\nimport pinecone\nimport csv\nimport concurrent.futures\nfrom requests.adapters import HTTPAdapter\nfrom urllib3.util.retry import Retry<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-234d10a elementor-widget elementor-widget-text-editor\" data-id=\"234d10a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">I\u2019ve also included some other built-in helper libraries like NumPy, URLLib, and CSV to help with parsing data and saving data to a CSV file once we\u2019re done, Concurrent so we can run operations simultaneously.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3852280 elementor-widget elementor-widget-heading\" data-id=\"3852280\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Configure Retries on Requests<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1929101 elementor-widget elementor-widget-text-editor\" data-id=\"1929101\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Using the following code, I configure the crawling mechanism to retry URLs and progressively slow down the crawling if there are timeouts. Since we\u2019re only using the Wayback Machine here, this is enough for our needs, but for crawling sites of these sizes you may want to consider proxies or using a headless browser like Puppeteer with stealth plugins. Keep in mind that the latter will slow things down considerably.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-36e1afd elementor-widget elementor-widget-text-editor\" data-id=\"36e1afd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\">session = requests.Session()\nretry = Retry(connect=3, backoff_factor=0.5)\nadapter = HTTPAdapter(max_retries=retry)\nsession.mount('http:\/\/', adapter)\nsession.mount('https:\/\/', adapter)<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-789bcc6 elementor-widget elementor-widget-heading\" data-id=\"789bcc6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Using the Wayback Machine API for BB&amp;B<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-20cd0c5 elementor-widget elementor-widget-text-editor\" data-id=\"20cd0c5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Normally, we\u2019d crawl both the BB&amp;B and Overstock to vectorize the content, but BedBathAndBeyond.com had a lot of throttling happening and full sections of the site were difficult to reach when I started this post. When that happens, the next best thing is to pull down someone else&#8217;s crawl of the site. Who better than the good folks at the Internet Archive who save a large portion of the web on a daily basis?<\/span><\/p><p><span style=\"font-weight: 400;\">The Wayback Machine has an endpoint that returns all the URLs in the archive for a given domain. We limit it to those that are of the <\/span><span style=\"font-weight: 400;\">text\/html<\/span><span style=\"font-weight: 400;\"> mimetype. Then we individually retrieve the HTML from those URLs and extract the text. The following code does just that.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3797ae9 elementor-widget elementor-widget-text-editor\" data-id=\"3797ae9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\"># URL for the Wayback Machine CDX Server API\nCDX_API_URL = \"http:\/\/web.archive.org\/cdx\/search\/cdx\"\n\n\ndef get_crawled_urls(domain):\n    \"\"\"Return a list of unique URLs crawled by the Wayback Machine for a specific domain.\"\"\"\n    payload = {\n        'url': domain,\n        'matchType': 'prefix',\n        'filter': 'statuscode:200',\n        'filter': 'mimetype:text\/html',\n        'collapse': 'urlkey',\n        'output': 'json',\n        'fl': 'original,timestamp'\n    }\n    response = session.get(CDX_API_URL, params=payload)\n    if response.status_code == 200:\n        return [(item[0], item[1]) for item in response.json()[1:]] # return both URL and timestamp\n    else:\n        return []\n\ndef download_html(url, timestamp):\n    \"\"\"Return the HTML of the page at the Wayback Machine URL.\"\"\"\n    wayback_url = f'http:\/\/web.archive.org\/web\/{timestamp}id_\/{url}' # create Wayback Machine URL\n    response = requests.get(wayback_url)\n    return response.text\n\ndef extract_text(html):\n    \"\"\"Return the visible text from the HTML.\"\"\"\n    soup = BeautifulSoup(html, 'html.parser')\n    [s.extract() for s in soup(['style', 'script', '[document]', 'head', 'title'])]\n    visible_text = soup.getText()\n    return visible_text<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6272ada elementor-widget elementor-widget-heading\" data-id=\"6272ada\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Crawling Overstock.com<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-81709df elementor-widget elementor-widget-text-editor\" data-id=\"81709df\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Crawling Overstock.com is standard technical SEO fare. We could point a crawler at it and let it rip or we could use the XML sitemaps. I did not include a crawler here because of the edit below, but you could <\/span><a href=\"https:\/\/advertools.readthedocs.io\/en\/master\/advertools.spider.html\"><span style=\"font-weight: 400;\">easily build one with the advertools library<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6e218f8 elementor-alert-info elementor-widget elementor-widget-alert\" data-id=\"6e218f8\" data-element_type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Sidebar:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">This is why I actually recommend that clients remove the sitemaps from the robots.txt file. Any major search engine lets you submit sitemaps directly. Explicitly specified sitemaps are really for scrapers.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74363e8 elementor-alert-warning elementor-widget elementor-widget-alert\" data-id=\"74363e8\" data-element_type=\"widget\" data-widget_type=\"alert.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-alert\" role=\"alert\">\n\n\t\t\t\t\t\t<span class=\"elementor-alert-title\">Edit:<\/span>\n\t\t\t\n\t\t\t\t\t\t<span class=\"elementor-alert-description\">The migration has since gone live. If you're following along at home, we\u2019ll use the Wayback Machine approach on Overstock as well after we\u2019ve vectorized and indexed BedBathandBeyond.com. If you have a site that is currently live, you can use the crawl approach.<\/span>\n\t\t\t\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-083ded0 elementor-widget elementor-widget-heading\" data-id=\"083ded0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Vectorizing Content with the Universal Sentence Encoder<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d02f8c elementor-widget elementor-widget-text-editor\" data-id=\"5d02f8c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Just as we <\/span><a href=\"https:\/\/ipullrank.com\/content-relevance\"><span style=\"font-weight: 400;\">discussed in the relevance post<\/span><\/a><span style=\"font-weight: 400;\">, we\u2019ll be using the <\/span><a href=\"https:\/\/static.googleusercontent.com\/media\/research.google.com\/en\/\/pubs\/archive\/46808.pdf\"><span style=\"font-weight: 400;\">Universal Sentence Encoder<\/span><\/a><span style=\"font-weight: 400;\"> to convert the text for these pages into vector embeddings. See that post for more details on what all that means. Basically, we&#8217;re converting documents into a series of fixed-length vectors to then compare the values for Overstock.com and BB&amp;B to determine the closest matching URL.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-757bc9a elementor-widget elementor-widget-image\" data-id=\"757bc9a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"595\" height=\"97\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/universal-sentence-encoder-example-embeddings-min.png\" class=\"attachment-large size-large wp-image-16746\" alt=\"universal sentence encoder example of embeddings\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/universal-sentence-encoder-example-embeddings-min.png 595w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/universal-sentence-encoder-example-embeddings-min-300x49.png 300w\" sizes=\"(max-width: 595px) 100vw, 595px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f4a41bc elementor-widget elementor-widget-text-editor\" data-id=\"f4a41bc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Alternatively, you could use OpenAI\u2019s Embeddings API. Some argue that those embeddings are actually the best available. For SEO use cases, however, I prefer to use something Google built with the hope that we are closer to what they use in production, although, it may not actually matter. Perhaps in a future post, I\u2019ll compare the results of the different types of embeddings, especially considering <\/span><a href=\"https:\/\/huggingface.co\/spaces\/mteb\/leaderboard\"><span style=\"font-weight: 400;\">Sentence T5-XXL is a higher performer on the embeddings leaderboard<\/span><\/a><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">To encode pages we simply extract the text from the code and hand it off to the USE which then returns the embeddings. We then store the embeddings in a Pinecone vector database. You could also use a library like <\/span><a href=\"https:\/\/engineering.fb.com\/2017\/03\/29\/data-infrastructure\/faiss-a-library-for-efficient-similarity-search\/\"><span style=\"font-weight: 400;\">Facebook\u2019s FAISS<\/span><\/a><span style=\"font-weight: 400;\"> or <\/span><a href=\"https:\/\/ai.googleblog.com\/2020\/07\/announcing-scann-efficient-vector.html\"><span style=\"font-weight: 400;\">Google\u2019s SCANN<\/span><\/a><span style=\"font-weight: 400;\"> to do the same, but these are two big websites, so we don\u2019t want to run into memory limitations.<\/span><\/p><p><span style=\"font-weight: 400;\">Using USE requires we first load the model from the TF Hub to instantiate the encoder.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ff90c6 elementor-widget elementor-widget-text-editor\" data-id=\"3ff90c6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\"># Universal Sentence Encoder\nmodule_url = \"https:\/\/tfhub.dev\/google\/universal-sentence-encoder\/4\"encoder = hub.load(module_url)<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-629d541 elementor-widget elementor-widget-text-editor\" data-id=\"629d541\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Then we create a function we can hand text off to for generating the embeddings.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6affb2b elementor-widget elementor-widget-text-editor\" data-id=\"6affb2b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\">def convert_to_embeddings(text)\n    \"\"\"Convert text to embeddings using Universal Sentence Encoder.\"\"\"\n    embedding = encoder([text])[0].numpy()\n    return embedding.tolist()  # Convert numpy array to Python list<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae0c84d elementor-widget elementor-widget-text-editor\" data-id=\"ae0c84d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Yes, it is <\/span><i><span style=\"font-weight: 400;\">that <\/span><\/i><span style=\"font-weight: 400;\">easy. It\u2019s a wonder that SEO tools are not using these resources.\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-51ae6c0 elementor-widget elementor-widget-heading\" data-id=\"51ae6c0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Storing Vector Embeddings in a Pinecone Database<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5238cf3 elementor-widget elementor-widget-text-editor\" data-id=\"5238cf3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">The next step is to store the BB&amp;B vectors in a vector database. This allows us to search using vectors to find the closest matching URL based on nearest neighbor searches. As you might imagine, there are many options to choose from for vector databases like Pinecone and Weaviate. Traditional databases like PostgreSQL and ElasticSearch also have plugins that let you convert them into vector stores. We\u2019re using Pinecone because it was the easiest one I\u2019ve found to get started with.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-720908c elementor-widget elementor-widget-image\" data-id=\"720908c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"434\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-1024x556.png\" class=\"attachment-large size-large wp-image-16741\" alt=\"screenshot of the Pinecone create index UI\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-1024x556.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-300x163.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-768x417.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-1536x834.png 1536w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-825x448.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min-945x513.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-create-index-min.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c15669b elementor-widget elementor-widget-text-editor\" data-id=\"c15669b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">To get started you\u2019ll make a free account. Then create an index through the UI. Here are the things you\u2019ll need to configure.<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Give your database name<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Set your dimensions to 512<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Select metric. For our example, I\u2019m using Euclidean.<\/span><\/li><\/ol><p><span style=\"font-weight: 400;\">If you don\u2019t create the database using the UI, the code will create one for you.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-78ea481 elementor-widget elementor-widget-image\" data-id=\"78ea481\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"163\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-1024x208.png\" class=\"attachment-large size-large wp-image-16750\" alt=\"Screenshot of Pinecone project api keys UI\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-1024x208.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-300x61.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-768x156.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-1536x312.png 1536w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-825x168.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min-945x192.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/pinecone-prodject-api-keys-min.png 1920w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40e0ae2 elementor-widget elementor-widget-text-editor\" data-id=\"40e0ae2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Once you\u2019re done, you\u2019ll need to click on API keys and collect both your key and the environment that your index lives in. There are markers in the code below where you\u2019ll place this information.<\/span><\/p><p><span style=\"font-weight: 400;\">In our code, our main function brings this all together. In the code that follows you first initialize Pinecone using the API key and environment provided in the UI. Then it creates an index if it does not already exist and instantiates the index. Then it gets the URLs from the source domain from the Wayback Machine and loops through them concurrently (with our process_url function) to pull the HTML from the Wayback Machine converts them to embeddings and upserts (update or insert) them into the Pinecone database.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ecb5724 elementor-widget elementor-widget-text-editor\" data-id=\"ecb5724\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code class=\"language-\">def process_url(url_timestamp):\n    url, timestamp = url_timestamp\n    print(f'Processing URL: {url}')\n    html = download_html(url, timestamp)\n    text = extract_text(html)\n    embeddings = [convert_to_embeddings(text)]\n    # Send URL and embeddings to Pinecone\n    index.upsert(vectors=[(url, embeddings)])\n\ndef main():\n    # Initialize Pinecone\n    pinecone.init(api_key=\"[YOUR API KEY HERE]\", environment=\"[YOUR ENVIRONMENT HERE]\")\n\n    # Create an index\n    index_name = \"[YOUR INDEX NAME HERE]\"\n    if index_name not in pinecone.list_indexes():\n        pinecone.create_index(name=index_name, metric=\"euclidean\", shards=1, dimension=512)\n\n    # Instantiate index\n    index = pinecone.Index(index_name=index_name)\n\n    domain = \"[THE SOURCE DOMAIN HERE]\"\n    urls = get_crawled_urls(domain)\n\n    for url, timestamp in urls:\n        print(f'Processing URL: {url}')\n        html = download_html(url, timestamp)\n        text = extract_text(html)\n        embeddings = [convert_to_embeddings(text)]\n        # Send URL and embeddings to Pinecone\n        index.upsert(vectors=[(url, embeddings)])\n\n    print (<span style=\"font-family: monospace, Consolas, 'Courier New', monospace; font-size: 14px; text-wrap: nowrap; font-weight: var( --e-global-typography-text-font-weight ); color: #a31515;\">\"All finished!\"<\/span><span style=\"background-color: #f7f7f7; color: #000000; font-family: monospace, Consolas, 'Courier New', monospace; font-size: 14px; text-wrap: nowrap; font-weight: var( --e-global-typography-text-font-weight );\">)<\/span><br \/>\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-840a658 elementor-widget elementor-widget-text-editor\" data-id=\"840a658\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">BedBathdndBeyond.com has 501k+ URLs in the Wayback Machine so we sped this up by using concurrency. At this point, there\u2019s no definitive way for us to know how many URLs BB&amp;B had historically from the outside, but we\u2019re able to get a solid amount programmatically. Nevertheless, the process will be very slow for a large website. Once it\u2019s completed, you can query against the database to build redirect maps.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-27c7d38 elementor-widget elementor-widget-heading\" data-id=\"27c7d38\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Querying Pinecone for Redirect Mapping <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-062b2fb elementor-widget elementor-widget-text-editor\" data-id=\"062b2fb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Mapping the redirects follows the same approach as building the index except we don\u2019t need to index the source site unless we want to. I didn\u2019t because the free tier of Pinecone only allows for one index and it deletes it if your data after 7 days of inactivity. So, we\u2019ve vectorized the source URLs from BB&amp;B to query the index to get the single best match for the redirect mapping. Then the script saves it all to a CSV. Again, with so many URLs this will take some time to complete.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e54e351 elementor-widget elementor-widget-text-editor\" data-id=\"e54e351\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<pre><code>def process_comparison(url_timestamp):\n    url, timestamp = url_timestamp\n    print(f'Processing URL: {url}')\n    html = download_html(url, timestamp)\n    text = extract_text(html)\n    queryVector = convert_to_embeddings(text)\n\n    # Query Pinecone index\n    query_response = index.query(\n        top_k=1, # Change this as per your needs\n        include_values=True,\n        include_metadata=True,\n        vector=queryVector,\n)\n\n    print (\"Mapping: \" + url +\" - \" +query_response['matches'][0]['id'])\n    return (url,query_response['matches'][0]['id'])\n\ndef query_comparison():\n    # Initialize Pinecone\n    pinecone.init(api_key=\"[YOUR API KEY HERE]\", environment=\"[YOUR ENVIRONMENT HERE]\")\n\n    index_name = \"[YOUR INDEX HERE]\"\n\n    # Instantiate index\n    index = pinecone.Index(index_name=index_name)\n\n    domain = \"[YOUR SOURCE DOMAIN HERE]\"\n    urls = get_crawled_urls(domain)\n\n    with open(domain + '-urls-mapped.csv', 'w') as f:\n        write = csv.writer(f)\n        write.writerow(['Source',\"Target\"])\n\n        # We create a ThreadPoolExecutor\n        with concurrent.futures.ThreadPoolExecutor() as executor:\n        results = executor.map(process_comparison, urls)\n\n        for result in results:\n            write.writerow(result)\n\n        print (<span style=\"font-family: monospace, Consolas, &quot;Courier New&quot;, monospace; font-size: 14px; text-wrap: nowrap; font-weight: var( --e-global-typography-text-font-weight ); color: rgb(163, 21, 21);\">\"All finished!\"<\/span><span style=\"background-color: rgb(247, 247, 247); color: rgb(0, 0, 0); font-family: monospace, Consolas, &quot;Courier New&quot;, monospace; font-size: 14px; text-wrap: nowrap; font-weight: var( --e-global-typography-text-font-weight );\">)<\/span><br>\nquery_comparison()<\/code><\/pre>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e41e50 elementor-widget elementor-widget-text-editor\" data-id=\"5e41e50\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Looping through the whole list of URLs, we now have our redirect mappings in a CSV that can be used to generate 301s on the edge, in Apache, or Nginx quite easily.\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dba4f6b elementor-widget elementor-widget-image\" data-id=\"dba4f6b\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"352\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped-1024x450.png\" class=\"attachment-large size-large wp-image-16756\" alt=\"overstock urls mapped\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped-1024x450.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped-300x132.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped-768x338.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped-825x363.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped-945x416.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-urls-mapped.png 1248w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">Example mappings from a partial indexing of BB&amp;B. Relevance improves as indexing is more complete.<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f674be6 elementor-widget elementor-widget-text-editor\" data-id=\"f674be6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><a href=\"https:\/\/colab.research.google.com\/drive\/1M5y_fnZZJ4-cWbbfwa1J5tpkpVukoTc6?usp=sharing\"><span style=\"font-weight: 400;\">Here\u2019s the Colab of all the code for you to play with<\/span><\/a><span style=\"font-weight: 400;\">. This version uses the Wayback Machine, but if you want to adjust this for a live crawling you\u2019d want to adjust the code such that the crawling and vectorizing happen together.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70d85f8 elementor-widget elementor-widget-heading\" data-id=\"70d85f8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Use this to Inform Internal Linking Too<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-496cf4a elementor-widget elementor-widget-text-editor\" data-id=\"496cf4a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<span style=\"font-weight: 400;\">Just as Google reviews content on both sides of a redirect, they look for parity on both sides of link. When thinking about how to construct your internal linking structure effectively, you can use this to scalably determine link opportunities based on which pages are the most semantically related to place links on. The approach is the same except you\u2019d return multiple URLs rather than a single URL. To do so, you\u2019d change your<\/span><span style=\"font-weight: 400;\"> top_k<\/span><span style=\"font-weight: 400;\"> parameter to the number of URLs you\u2019d want to link to in the index_query function. So, if you want 50 links, set <\/span>\ntop_k\n<span style=\"font-weight: 400;\"> to 50 and then manage the data in <\/span><span style=\"font-weight: 400;\">query_responses[&#8216;matches&#8217;]<\/span><span style=\"font-weight: 400;\">.<\/span>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc0aad4 elementor-widget elementor-widget-heading\" data-id=\"fc0aad4\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">The Overstock -&gt; BB&amp;B Migration Has Already Started<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34e69e5 elementor-widget elementor-widget-text-editor\" data-id=\"34e69e5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">I started writing about this when the purchase was announced, but other priorities came up between then and now. Since then, the Overstock team has begun the migration. If you head to the homepage, you\u2019ll see what looks like Overstock.com with a BB&amp;B skin as compared to what BB&amp;B used to look like. Here are some screenshots for to give you an idea of the changes.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-28d2925 elementor-widget elementor-widget-image\" data-id=\"28d2925\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"438\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-1024x561.png\" class=\"attachment-large size-large wp-image-16749\" alt=\"screenshot of bedbathandbeyond homepage old version\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-1024x561.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-300x164.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-768x421.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-1536x841.png 1536w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-825x452.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min-945x517.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-old-min.png 1903w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The old Bed Bath &amp; Beyond design<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c503fa elementor-widget elementor-widget-image\" data-id=\"4c503fa\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"438\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-1024x561.png\" class=\"attachment-large size-large wp-image-16738\" alt=\"\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-1024x561.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-300x164.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-768x421.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-1536x842.png 1536w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-825x452.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min-945x518.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-homepage-min.png 1901w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The old Overstock.com design<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ad7e10d elementor-widget elementor-widget-image\" data-id=\"ad7e10d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t<figure class=\"wp-caption\">\n\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"438\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-1024x561.png\" class=\"attachment-large size-large wp-image-16739\" alt=\"screenshot of the new bedbathandbeyond homepage\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-1024x561.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-300x164.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-768x421.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-1536x841.png 1536w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-825x452.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min-945x517.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bedbathbeyond-homepage-new-min.png 1903w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t<figcaption class=\"widget-image-caption wp-caption-text\">The new Bed Bath &amp; Beyond<\/figcaption>\n\t\t\t\t\t\t\t\t\t\t<\/figure>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98498cd elementor-widget elementor-widget-text-editor\" data-id=\"98498cd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">If you go to Overstock.com right now, you\u2019re 301 redirected to BedBathandBeyond.com.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-42ad0c7 elementor-widget elementor-widget-image\" data-id=\"42ad0c7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"365\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-301-redirects-min.png\" class=\"attachment-large size-large wp-image-16740\" alt=\"overstock 301 redirects\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-301-redirects-min.png 956w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-301-redirects-min-300x137.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-301-redirects-min-768x350.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-301-redirects-min-825x376.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-301-redirects-min-945x431.png 945w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a626ce6 elementor-widget elementor-widget-text-editor\" data-id=\"a626ce6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">In fact, when I download 50k of the top URLs from Semrush, and crawled them using Screaming Frog SEO Spider, 99.8% of URLs are 301 redirected. The 0.2% of URLs that are not redirected are on the help.overstock.com subdomain. That\u2019s <\/span><i><span style=\"font-weight: 400;\">pretty <\/span><\/i><span style=\"font-weight: 400;\">damn good for an initial rollout!<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09ccc1d elementor-widget elementor-widget-image\" data-id=\"09ccc1d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"796\" height=\"567\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirections-min.png\" class=\"attachment-large size-large wp-image-16737\" alt=\"Overstock redirections\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirections-min.png 796w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirections-min-300x214.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirections-min-768x547.png 768w\" sizes=\"(max-width: 796px) 100vw, 796px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1db5106 elementor-widget elementor-widget-text-editor\" data-id=\"1db5106\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Reviewing those URLs indicates that Overstock did a lift and shift because all of the URLs remained completely intact. In this case, it appears that they reskinned the design of Overstock.com and pointed the BedBathAndBeyond.com domain to their servers. Then they set up redirects on Overstock.com to point to the corresponding new URLs on BedBathAndBeyond.com.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98caaa7 elementor-widget elementor-widget-image\" data-id=\"98caaa7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"598\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min-1024x765.png\" class=\"attachment-large size-large wp-image-16747\" alt=\"Overstock redirect map\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min-1024x765.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min-300x224.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min-768x574.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min-825x616.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min-945x706.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/overstock-redirect-map-min.png 1191w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a9e83c1 elementor-widget elementor-widget-text-editor\" data-id=\"a9e83c1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Organizations of this size with large sites like this usually launch such migrations in stages. As of right now, the migration implementation is not feature complete as it relates to the ideal specification, perhaps for the reasons I highlighted previously. When I pull the top 75k pages by links from Ahrefs, some of the URLs from the old BB&amp;B site have been redirected to the homepage.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0d422d1 elementor-widget elementor-widget-image\" data-id=\"0d422d1\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"471\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-target-map-min.png\" class=\"attachment-large size-large wp-image-16748\" alt=\"BedBathandBeyond redirect target map\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-target-map-min.png 993w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-target-map-min-300x177.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-target-map-min-768x452.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-target-map-min-825x486.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-target-map-min-945x557.png 945w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-527549a elementor-widget elementor-widget-text-editor\" data-id=\"527549a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Reviewing that data further indicates that 37.99% of the URLs 404. However, it\u2019s hard to know if this is a function of any categories or products that BB&amp;B may have previously sunset prior to this migration.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0eb98b5 elementor-widget elementor-widget-image\" data-id=\"0eb98b5\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"735\" height=\"489\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-status-min.png\" class=\"attachment-large size-large wp-image-16742\" alt=\"BedBathandBeyond redirect status screenshot\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-status-min.png 735w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-redirect-status-min-300x200.png 300w\" sizes=\"(max-width: 735px) 100vw, 735px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-10669bc elementor-widget elementor-widget-text-editor\" data-id=\"10669bc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Ahrefs\u2019s broken link report indicates 69.1K links point to pages that no longer exist. This number keeps growing every time I check it, so I suspect we will see it balloon as Ahrefs re-crawls more of the web.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c965ce5 elementor-widget elementor-widget-image\" data-id=\"c965ce5\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"487\" src=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-1024x623.png\" class=\"attachment-large size-large wp-image-16743\" alt=\"BedBathandBeyond Ahrefs broken links report\" srcset=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-1024x623.png 1024w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-300x183.png 300w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-768x467.png 768w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-1536x935.png 1536w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-825x502.png 825w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min-945x575.png 945w, https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-ahrefs-broken-links-report-min.png 1711w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-abfd8af elementor-widget elementor-widget-text-editor\" data-id=\"abfd8af\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Again, both of these sites are large and complex. I anticipate that this is a work in progress and the team at Overstock is actively cleaning things up. Let\u2019s check back in a month to see how it\u2019s going.<\/span><\/p><p><span style=\"font-weight: 400;\">Now, over to you, what approaches have you taken for scalable redirect mapping?<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Back in April 2023, sadly Bed, Bath &amp; Beyond filed for bankruptcy. Unfortunately, it was not much of a shock due to the news that had been swirling around the company in the months prior, but still heartbreaking to see an American institution evaporate. What was shocking, though, was when Overstock.com announced they would acquire [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":19474,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[26],"tags":[],"diagnosis-deliverable":[],"class_list":["post-16735","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-seo"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com<\/title>\n<meta name=\"description\" content=\"Learn how iPullRank would plan and execute a comprehensive website migration from Overstock.com to BedBathandBeyond.com.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com\" \/>\n<meta property=\"og:description\" content=\"Learn how iPullRank would plan and execute a comprehensive website migration from Overstock.com to BedBathandBeyond.com.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\" \/>\n<meta property=\"og:site_name\" content=\"iPullRank\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-04T13:29:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-01T13:13:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-migration.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Mike King\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-migration.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@ipullrankagency\" \/>\n<meta name=\"twitter:site\" content=\"@ipullrankagency\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike King\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#article\",\"isPartOf\":{\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\"},\"author\":{\"name\":\"Mike King\",\"@id\":\"https:\/\/ipullrank.com\/#\/schema\/person\/82831a4b9f4b8be81d5a9bfed4cb9b20\"},\"headline\":\"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com\",\"datePublished\":\"2023-08-04T13:29:24+00:00\",\"dateModified\":\"2025-08-01T13:13:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\"},\"wordCount\":3348,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ipullrank.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png\",\"articleSection\":[\"SEO\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\",\"url\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\",\"name\":\"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com\",\"isPartOf\":{\"@id\":\"https:\/\/ipullrank.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png\",\"datePublished\":\"2023-08-04T13:29:24+00:00\",\"dateModified\":\"2025-08-01T13:13:22+00:00\",\"description\":\"Learn how iPullRank would plan and execute a comprehensive website migration from Overstock.com to BedBathandBeyond.com.\",\"breadcrumb\":{\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage\",\"url\":\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png\",\"contentUrl\":\"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png\",\"width\":699,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ipullrank.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ipullrank.com\/#website\",\"url\":\"https:\/\/ipullrank.com\/\",\"name\":\"iPullRank\",\"description\":\"Digital Marketing Agency in NYC\",\"publisher\":{\"@id\":\"https:\/\/ipullrank.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ipullrank.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ipullrank.com\/#organization\",\"name\":\"iPullRank\",\"url\":\"https:\/\/ipullrank.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ipullrank.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ipullrank.com\/wp-content\/uploads\/2025\/03\/Logo_-_Layers.svg\",\"contentUrl\":\"https:\/\/ipullrank.com\/wp-content\/uploads\/2025\/03\/Logo_-_Layers.svg\",\"width\":177,\"height\":36,\"caption\":\"iPullRank\"},\"image\":{\"@id\":\"https:\/\/ipullrank.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ipullrankagency\",\"https:\/\/www.linkedin.com\/company\/ipullrank\/\",\"https:\/\/www.youtube.com\/@iPullRankSEO\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ipullrank.com\/#\/schema\/person\/82831a4b9f4b8be81d5a9bfed4cb9b20\",\"name\":\"Mike King\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ipullrank.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d57e62b40de6db99771f85cbce3ab1d29071b8cd0d643c8dcf2fc55818e1769f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d57e62b40de6db99771f85cbce3ab1d29071b8cd0d643c8dcf2fc55818e1769f?s=96&d=mm&r=g\",\"caption\":\"Mike King\"},\"description\":\"Mike King is the Founder and CEO of iPullRank. Deeply technical and highly creative, Mike has helped generate over $4B in revenue for his clients. A rapper and recovering big agency guy, Mike's greatest clients are his two daughters: Zora and Glory.\",\"url\":\"https:\/\/ipullrank.com\/author\/ipullrank\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com","description":"Learn how iPullRank would plan and execute a comprehensive website migration from Overstock.com to BedBathandBeyond.com.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com","og_locale":"en_US","og_type":"article","og_title":"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com","og_description":"Learn how iPullRank would plan and execute a comprehensive website migration from Overstock.com to BedBathandBeyond.com.","og_url":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com","og_site_name":"iPullRank","article_published_time":"2023-08-04T13:29:24+00:00","article_modified_time":"2025-08-01T13:13:22+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-migration.jpg","type":"image\/jpeg"}],"author":"Mike King","twitter_card":"summary_large_image","twitter_image":"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/bbb-migration.jpg","twitter_creator":"@ipullrankagency","twitter_site":"@ipullrankagency","twitter_misc":{"Written by":"Mike King","Est. reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#article","isPartOf":{"@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com"},"author":{"name":"Mike King","@id":"https:\/\/ipullrank.com\/#\/schema\/person\/82831a4b9f4b8be81d5a9bfed4cb9b20"},"headline":"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com","datePublished":"2023-08-04T13:29:24+00:00","dateModified":"2025-08-01T13:13:22+00:00","mainEntityOfPage":{"@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com"},"wordCount":3348,"commentCount":0,"publisher":{"@id":"https:\/\/ipullrank.com\/#organization"},"image":{"@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage"},"thumbnailUrl":"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png","articleSection":["SEO"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com","url":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com","name":"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com","isPartOf":{"@id":"https:\/\/ipullrank.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage"},"image":{"@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage"},"thumbnailUrl":"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png","datePublished":"2023-08-04T13:29:24+00:00","dateModified":"2025-08-01T13:13:22+00:00","description":"Learn how iPullRank would plan and execute a comprehensive website migration from Overstock.com to BedBathandBeyond.com.","breadcrumb":{"@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#primaryimage","url":"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png","contentUrl":"https:\/\/ipullrank.com\/wp-content\/uploads\/2023\/08\/Frame-1597879967.png","width":699,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/ipullrank.com\/how-ipullrank-would-migrate-overstock-com-to-bedbathandbeyond-com#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ipullrank.com\/"},{"@type":"ListItem","position":2,"name":"How iPullRank Would Migrate Overstock.com to BedBathAndBeyond.com"}]},{"@type":"WebSite","@id":"https:\/\/ipullrank.com\/#website","url":"https:\/\/ipullrank.com\/","name":"iPullRank","description":"Digital Marketing Agency in NYC","publisher":{"@id":"https:\/\/ipullrank.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ipullrank.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ipullrank.com\/#organization","name":"iPullRank","url":"https:\/\/ipullrank.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ipullrank.com\/#\/schema\/logo\/image\/","url":"https:\/\/ipullrank.com\/wp-content\/uploads\/2025\/03\/Logo_-_Layers.svg","contentUrl":"https:\/\/ipullrank.com\/wp-content\/uploads\/2025\/03\/Logo_-_Layers.svg","width":177,"height":36,"caption":"iPullRank"},"image":{"@id":"https:\/\/ipullrank.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ipullrankagency","https:\/\/www.linkedin.com\/company\/ipullrank\/","https:\/\/www.youtube.com\/@iPullRankSEO"]},{"@type":"Person","@id":"https:\/\/ipullrank.com\/#\/schema\/person\/82831a4b9f4b8be81d5a9bfed4cb9b20","name":"Mike King","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ipullrank.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d57e62b40de6db99771f85cbce3ab1d29071b8cd0d643c8dcf2fc55818e1769f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d57e62b40de6db99771f85cbce3ab1d29071b8cd0d643c8dcf2fc55818e1769f?s=96&d=mm&r=g","caption":"Mike King"},"description":"Mike King is the Founder and CEO of iPullRank. Deeply technical and highly creative, Mike has helped generate over $4B in revenue for his clients. A rapper and recovering big agency guy, Mike's greatest clients are his two daughters: Zora and Glory.","url":"https:\/\/ipullrank.com\/author\/ipullrank"}]}},"_links":{"self":[{"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/posts\/16735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/comments?post=16735"}],"version-history":[{"count":0,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/posts\/16735\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/media\/19474"}],"wp:attachment":[{"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/media?parent=16735"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/categories?post=16735"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/tags?post=16735"},{"taxonomy":"diagnosis-deliverable","embeddable":true,"href":"https:\/\/ipullrank.com\/wp-json\/wp\/v2\/diagnosis-deliverable?post=16735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}