{"id":2194,"date":"2026-09-04T16:16:52","date_gmt":"2026-09-04T16:16:52","guid":{"rendered":"https:\/\/pixelpanda.ai\/blog\/?p=2194"},"modified":"2026-09-04T16:19:22","modified_gmt":"2026-09-04T16:19:22","slug":"we-added-9-directory-badges-to-our-footer-and-lost-57-of-our-organic-traffic-in-5-days","status":"publish","type":"post","link":"https:\/\/pixelpanda.ai\/blog\/2026\/09\/04\/we-added-9-directory-badges-to-our-footer-and-lost-57-of-our-organic-traffic-in-5-days\/","title":{"rendered":"We added 9 directory badges to our footer and lost 57% of our organic traffic in 5 days"},"content":{"rendered":"<p><em>A post-mortem with the Search Console data, including the recovery.<\/em><\/p>\n<p>Ten days ago I did something that looked like good SEO hygiene and cost my site more than half its organic traffic in under a week. The cause was embarrassingly ordinary, the recovery was fast once we found it, and there&#8217;s a natural experiment buried in the crawl data that makes the whole thing unusually easy to prove.<\/p>\n<p>Posting the numbers because I couldn&#8217;t find anyone who&#8217;d published this particular failure with the data attached.<\/p>\n<h2>The setup<\/h2>\n<p>PixelPanda is a small AI image tools site \u2014 DR 43, nothing special. Almost all of our organic traffic comes from free tool pages that rank on their own: background remover, image upscaler, merge images, and so on.<\/p>\n<p>We&#8217;d been running a directory-listing campaign to close a link gap against a bigger competitor. Standard stuff: get listed on the AI tool directories, several of which want a &#8220;Featured on&#8221; badge on your site in exchange, and a couple of which we paid for.<\/p>\n<p>On 23 August, across five commits between 10:55 and 20:00, we shipped a &#8220;Featured on&#8221; badge strip into the site footer. Nine outbound links. Because the footer is in the base template, it landed on <strong>every page on the site<\/strong>.<\/p>\n<p>Every one of those links carried <code>rel=\"noopener\"<\/code> and nothing else. Which means every one of them was dofollow.<\/p>\n<h2>The crash<\/h2>\n<p>Rankings fell off a cliff the next morning.<\/p>\n<pre><code>date        day   clicks   impressions   avg position\n2026-08-20  Thu      821        31,802       11.1\n2026-08-21  Fri      720        30,617       11.3\n2026-08-22  Sat      687        30,413       11.5\n2026-08-23  Sun      709        27,246       12.0   &lt;- badges shipped\n2026-08-24  Mon      500        19,689       17.1   &lt;- onset\n2026-08-25  Tue      268        13,937       31.7\n2026-08-26  Wed      240        12,986       35.5\n2026-08-27  Thu      225        12,639       35.6\n2026-08-28  Fri      189        11,858       36.6\n2026-08-29  Sat      190        14,823       42.1<\/code><\/pre>\n<p>Week over week that&#8217;s <strong>5,402 clicks down to 2,329 \u2014 a 57% drop.<\/strong> Average position went from ~11 to 42.<\/p>\n<p>The shape mattered more than the size. This wasn&#8217;t a few pages losing rankings \u2014 it was the entire <code>\/free-tools\/<\/code> section demoted roughly uniformly, while the homepage barely moved:<\/p>\n<table>\n<thead>\n<tr>\n<th>page<\/th>\n<th>position before<\/th>\n<th>after<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\/free-tools\/merge-images<\/td>\n<td>9.1<\/td>\n<td>37.5<\/td>\n<\/tr>\n<tr>\n<td>\/free-tools\/make-image-transparent<\/td>\n<td>8.8<\/td>\n<td>36.3<\/td>\n<\/tr>\n<tr>\n<td>\/free-tools\/image-analyzer<\/td>\n<td>7.3<\/td>\n<td>21.8<\/td>\n<\/tr>\n<tr>\n<td>\/free-tools\/image-to-prompt<\/td>\n<td>10.9<\/td>\n<td>63.0<\/td>\n<\/tr>\n<tr>\n<td>\/ (homepage)<\/td>\n<td>3.7<\/td>\n<td>6.0<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Uniform demotion across a whole section, with the homepage largely spared, is the signature of a <strong>site-level<\/strong> signal rather than a content problem on any individual page.<\/p>\n<h2>What we ruled out<\/h2>\n<ul>\n<li><strong>Manual actions<\/strong> \u2014 none in Search Console.<\/li>\n<li><strong>Security issues<\/strong> \u2014 none.<\/li>\n<li><strong>robots.txt<\/strong> \u2014 clean, <code>Allow: \/<\/code>.<\/li>\n<li><strong>Deindexing<\/strong> \u2014 indexed page count was flat and rising through the period.<\/li>\n<li><strong>Page health<\/strong> \u2014 200s, correct canonicals, single H1, no stray noindex.<\/li>\n<li><strong>The August algorithm volatility<\/strong> \u2014 that was 1\u20136 August. We were flat through it: 783, 837, 775, 812 clicks. Google&#8217;s last confirmed ranking update was months earlier.<\/li>\n<\/ul>\n<p>Then we went through every commit in the window. New landing pages, some API changes, a BigCommerce callback, docs. Exactly one change touched every page on the site: the badge strip.<\/p>\n<h2>The diagnosis<\/h2>\n<p>Thousands of sitewide dofollow links pointing at directories \u2014 several of which we had <strong>paid<\/strong> for that same day, and one of which was a reciprocal badge-for-listing exchange.<\/p>\n<p>That is a textbook link scheme under Google&#8217;s link spam policy, and the part people forget is that the policy demotes <strong>the linking site<\/strong>, not just the recipient. We had effectively turned our entire site into a paid link farm pointing outward, in an afternoon, without thinking of it that way even once.<\/p>\n<h2>The fix<\/h2>\n<p>One commit. All nine links changed to:<\/p>\n<pre><code>rel=\"sponsored nofollow noopener\"<\/code><\/pre>\n<p>Badges stay up, listings stay live, the directories keep their placement. Only the link equity stops flowing. We shipped it on 30 August at 09:44 local and then pushed the demoted URLs into the Indexing API to speed up re-crawling.<\/p>\n<h2>The recovery<\/h2>\n<pre><code>date        day   clicks   impressions   avg position\n2026-08-29  Sat      190        14,823       42.1   &lt;- trough\n2026-08-30  Sun      362        16,994       31.2   &lt;- fix shipped\n2026-08-31  Mon      391        17,687       21.3\n2026-09-01  Tue      469        18,917       12.4\n2026-09-02  Wed      497        20,975       12.4<\/code><\/pre>\n<p><strong>Average position is back to 12.4 \u2014 essentially where it was before the crash.<\/strong> Clicks are still roughly a third below baseline and I expect that to keep closing as more pages get re-crawled.<\/p>\n<h2>The natural experiment<\/h2>\n<p>This is the part that convinced me, and it&#8217;s the reason I&#8217;m posting.<\/p>\n<p>Google doesn&#8217;t re-crawl every page at once. So on any given day after the fix, some pages had been re-fetched with the nofollowed footer and some hadn&#8217;t. That gives you a controlled comparison for free.<\/p>\n<p>Here&#8217;s every page we tracked, with its last crawl date from the URL Inspection API:<\/p>\n<table>\n<thead>\n<tr>\n<th>page<\/th>\n<th>before<\/th>\n<th>trough<\/th>\n<th>2 Sept<\/th>\n<th>last crawled<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>make-image-transparent<\/td>\n<td>8.8<\/td>\n<td>36.3<\/td>\n<td><strong>8.7<\/strong><\/td>\n<td>3 Sept<\/td>\n<\/tr>\n<tr>\n<td>image-analyzer<\/td>\n<td>7.3<\/td>\n<td>21.8<\/td>\n<td><strong>6.6<\/strong><\/td>\n<td>4 Sept<\/td>\n<\/tr>\n<tr>\n<td>round-corners<\/td>\n<td>6.9<\/td>\n<td>19.6<\/td>\n<td><strong>7.5<\/strong><\/td>\n<td>30 Aug<\/td>\n<\/tr>\n<tr>\n<td>merge-images<\/td>\n<td>9.1<\/td>\n<td>37.5<\/td>\n<td><strong>11.6<\/strong><\/td>\n<td>4 Sept<\/td>\n<\/tr>\n<tr>\n<td>ai-selfie<\/td>\n<td>7.2<\/td>\n<td>22.3<\/td>\n<td>11.7<\/td>\n<td>2 Sept<\/td>\n<\/tr>\n<tr>\n<td>image-upscaler<\/td>\n<td>20.7<\/td>\n<td>51.6<\/td>\n<td>26.6<\/td>\n<td>1 Sept<\/td>\n<\/tr>\n<tr>\n<td><strong>image-to-prompt<\/strong><\/td>\n<td><strong>10.9<\/strong><\/td>\n<td><strong>63.0<\/strong><\/td>\n<td><strong>44.7<\/strong><\/td>\n<td><strong>27 Aug<\/strong><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Every page Google re-crawled after the fix has recovered to roughly its old position. The one page it has <strong>not<\/strong> re-crawled since before the fix \u2014 <code>image-to-prompt<\/code>, last fetched 27 August \u2014 is still sitting at 44.7.<\/p>\n<p>Same site, same fix, same day. The only variable is whether Googlebot has been back yet.<\/p>\n<h2>What I&#8217;d tell you<\/h2>\n<p><strong>A footer link is not one link.<\/strong> It&#8217;s one link times the number of pages on your site. Ours became about 15,000 outbound dofollow links to paid directories overnight. If we&#8217;d put those nine links on a single <code>\/featured-on<\/code> page, none of this happens.<\/p>\n<p><strong>&#8220;Directory listing&#8221; and &#8220;paid link&#8221; can be the same thing.<\/strong> Nobody sold it to me as a link purchase. I paid for listings, they asked for a badge, I added the badge. The label on the invoice doesn&#8217;t change what the markup does.<\/p>\n<p><strong><code>rel=\"sponsored nofollow\"<\/code> costs you nothing here.<\/strong> You keep the badge, the listing, the referral traffic and the social proof. The only thing you give up is passing equity you never wanted to pass.<\/p>\n<p><strong>Check what your footer does after every campaign.<\/strong> This took six days to notice because we were watching signups, not average position, and the badge work didn&#8217;t look like an SEO change. It looked like marketing.<\/p>\n<p><strong>Diff your commits against the onset date.<\/strong> The single most useful thing we did was list every commit in the window and ask which ones touched every page. That narrowed it from &#8220;something is wrong&#8221; to one candidate in about ten minutes.<\/p>\n<hr>\n<p><em>Happy to answer questions about the diagnosis. The Search Console figures above are unedited day-level exports; the position numbers are page-level averages over the ranges shown.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A post-mortem with the Search Console data: nine sitewide dofollow footer links to paid directories, a 57% traffic drop in five days, and the recovery.<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-2194","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/posts\/2194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/comments?post=2194"}],"version-history":[{"count":2,"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/posts\/2194\/revisions"}],"predecessor-version":[{"id":2196,"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/posts\/2194\/revisions\/2196"}],"wp:attachment":[{"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/media?parent=2194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/categories?post=2194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pixelpanda.ai\/blog\/wp-json\/wp\/v2\/tags?post=2194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}