---
title: "Migrate a site without losing organic traffic using a developer's checklist"
description: "A developer's pass or fail checklist for SEO-safe migrations: URL inventory, redirect map, parity checks, launch tests, scripts, and 90 days of monitoring."
canonical: "https://scalewithsearch.com/articles/site-migration-seo-checklist"
date: "2026-03-20"
modified: "2026-10-02"
---
## Site navigation

- [Scale With Search](https://scalewithsearch.com/)
- Real estate
  - Real estate
    - [Real estate](https://scalewithsearch.com/for/real-estate)
- Work
  - Start here
    - [Send your brief](https://scalewithsearch.com/work#send-your-brief)
    - [Prepare your six-question brief](https://scalewithsearch.com/work#prepare-your-six-question-brief)
  - Build
    - [Site build, content library with SEO, signal desk](https://scalewithsearch.com/work)
- For your business
  - Trades and home services
    - [Auto body and collision shops](https://scalewithsearch.com/for/auto-body-and-collision-shops)
    - [Foundation and home repair contractors](https://scalewithsearch.com/for/foundation-and-home-repair)
    - [Garage door and fencing contractors](https://scalewithsearch.com/for/garage-door-and-fencing-contractors)
    - [HVAC contractors](https://scalewithsearch.com/for/hvac-contractors)
    - [Janitorial and commercial cleaning companies](https://scalewithsearch.com/for/janitorial-and-commercial-cleaning)
    - [Locksmiths](https://scalewithsearch.com/for/locksmiths)
    - [Moving companies](https://scalewithsearch.com/for/moving-companies)
    - [Pest control companies](https://scalewithsearch.com/for/pest-control-companies)
    - [Plumbing and electrical contractors](https://scalewithsearch.com/for/plumbing-and-electrical-contractors)
    - [Restoration and water or fire damage companies](https://scalewithsearch.com/for/restoration-and-water-fire-damage)
    - [Roofing companies](https://scalewithsearch.com/for/roofing-companies)
    - [Towing companies](https://scalewithsearch.com/for/towing-companies)
    - [Tree services and landscaping companies](https://scalewithsearch.com/for/tree-services-and-landscaping)
    - [Solar installers](https://scalewithsearch.com/for/solar-installation)
    - [General contractors](https://scalewithsearch.com/for/general-contractors-and-construction)
    - [Paving, concrete, and flooring contractors](https://scalewithsearch.com/for/paving)
  - Practices and professional services
    - [Bookkeeping and tax practices](https://scalewithsearch.com/for/bookkeeping-and-tax-practices)
    - [Dental practices](https://scalewithsearch.com/for/dental-practices)
    - [Family and criminal defense law firms](https://scalewithsearch.com/for/family-and-criminal-defense-law-firms)
    - [Med spas and aesthetics practices](https://scalewithsearch.com/for/med-spas-and-aesthetics)
    - [Personal injury law firms](https://scalewithsearch.com/for/personal-injury-law-firms)
    - [Veterinary clinics](https://scalewithsearch.com/for/veterinary-clinics)
    - [Gyms and fitness studios](https://scalewithsearch.com/for/fitness)
    - [Therapy and outpatient health practices](https://scalewithsearch.com/for/therapy-and-outpatient-health)
    - [Medical billing companies](https://scalewithsearch.com/for/medical-billing)
    - [Insurance agencies](https://scalewithsearch.com/for/insurance-agencies)
    - [Financial advisors](https://scalewithsearch.com/for/financial-advisors)
    - [Property management companies](https://scalewithsearch.com/for/property-management)
    - [Recruiting and staffing agencies](https://scalewithsearch.com/for/recruiting-and-staffing)
    - [Architects and interior designers](https://scalewithsearch.com/for/architects-and-interior-designers)
    - [Logistics and supply chain companies](https://scalewithsearch.com/for/logistics-and-supply-chain)
  - Agencies, MSPs, and manufacturing
    - [IT and managed service providers](https://scalewithsearch.com/for/it-and-managed-service-providers)
    - [Machine shops and precision manufacturers](https://scalewithsearch.com/for/machine-shops-and-precision-manufacturing)
    - [Marketing agencies and freelancers](https://scalewithsearch.com/for/marketing-agencies-and-freelancers)
    - [SEO agencies and consultants](https://scalewithsearch.com/for/seo-agencies-and-consultants)
    - [Small manufacturers and fabricators](https://scalewithsearch.com/for/small-manufacturers-and-fabricators)
  - Restaurants, shops, studios, and nonprofits
    - [Restaurants and hospitality businesses](https://scalewithsearch.com/for/restaurants-and-hospitality)
    - [Retail stores and ecommerce sellers](https://scalewithsearch.com/for/retail-and-ecommerce)
    - [Photographers, event planners, and travel agents](https://scalewithsearch.com/for/photographers)
    - [Churches and nonprofits](https://scalewithsearch.com/for/churches-and-nonprofits)
  - [All industries](https://scalewithsearch.com/for/)
- Learn
  - For your office
    - [Office job guides](https://scalewithsearch.com/guides/)
    - [Browser calculators](https://scalewithsearch.com/tools/)
  - Start here
    - [How it works](https://scalewithsearch.com/how-it-works)
    - [Free Starter Kit](https://scalewithsearch.com/kit/business-memory-starter-kit.zip)
    - [Synthetic specimen](https://scalewithsearch.com/specimen/working-session-specimen.zip)
  - Guides
    - [The Complete Guide to Business Memory for AI Agents](https://scalewithsearch.com/articles/business-memory-for-ai-agents-guide)
    - [The Complete Small-Business Guide to AI Agent Governance](https://scalewithsearch.com/articles/ai-agent-governance-guide-small-business)
    - [The Complete Guide to Leaving Vendor AI Memory](https://scalewithsearch.com/articles/leaving-vendor-ai-memory-guide)
  - Articles by cluster
    - [Business memory](https://scalewithsearch.com/articles/business-memory-for-ai-agents-guide)
    - [Agent governance](https://scalewithsearch.com/articles/ai-agent-governance-guide-small-business)
    - [Migration and ownership](https://scalewithsearch.com/articles/leaving-vendor-ai-memory-guide)
  - For machines
    - [llms.txt](https://scalewithsearch.com/llms.txt)
    - [llms-full.txt](https://scalewithsearch.com/llms-full.txt)
    - [Machine view](https://scalewithsearch.com/?view=machine)
- Company
  - Evidence
    - [Proof](https://scalewithsearch.com/proof)
  - Company
    - [About](https://scalewithsearch.com/about)

# Migrate a site without losing organic traffic using a developer's checklist.

Most catastrophic losses of organic traffic have one cause. A change to URL structure, domain, or platform ships without a redirect map, content parity, and technical validation. Commonly reported figures put the loss from an unplanned migration at 20 to 40% of organic traffic, and some sites never recover.

This checklist is an engineering specification, not a strategy document. Each item is testable, most can be automated, and each has a clear pass or fail criterion. It applies to a domain change, a CMS switch, a URL restructure, a move from HTTP to HTTPS, or a redesign that changes URL patterns. For migration-type choices and failed-recovery diagnosis, use [the migration guide](/articles/site-migration-seo-guide). For sprint ownership and stakeholders, use [migration planning for product managers](/articles/site-migration-seo-product-managers). This page is the release checklist.

## Before launch: 4 to 8 weeks out

### 1. Build a complete URL inventory

Crawl the current site with Screaming Frog and export each URL that returns 200. Merge it with four more sources:

- The indexed URLs in the Google Search Console page indexing report.
- Each URL in the current XML sitemap.
- Each URL that received organic traffic in GA4 in the last 12 months.
- Each URL with inbound links in Ahrefs or Majestic.

The union of these sources is every URL that carries SEO value. A URL left out of the inventory loses its value for good.

**Pass:** every source URL appears once. **Fail:** an indexed, visited, linked, or sitemap URL has no inventory row.

**Owner:** SEO lead. **Saved evidence:** dated source exports and the deduplicated inventory.

### 2. Build the redirect map

For each inventory URL, name one destination on the new site with the same or the closest content. Apply these rules:

- Content pages map to their equivalent content page.
- Category pages map to the equivalent category page.
- Paginated pages map to the equivalent page in the new series, or to page 1 if none exists.
- Parameter URLs map to the clean equivalent.
- A URL with no equivalent maps to the most relevant parent page, never to the home page. If the content is gone for good, return 410 instead.

Keep the map in a spreadsheet with four columns: `old_url`, `new_url`, `status`, and `reason`. Use 301 for each SEO-relevant redirect. For an intentional 404 or 410, leave `new_url` empty and record the removal reason.

**Pass:** every retained URL has one relevant destination; intentional removals have a recorded 404 or 410 reason. **Fail:** an unexplained omission or default home-page mapping.

**Owner:** SEO lead and content owner. **Saved evidence:** reviewed old-to-new map with status and reason columns.

### 3. Validate content parity

For the top 50 pages by organic traffic, confirm that the new version keeps these elements, or improves them:

- The title tag and meta description.
- The heading structure: H1, H2, and H3.
- The body content, at the same length or longer.
- The [structured data](/articles/structured-data-implementation).
- Internal links to the same destinations, updated to the new URLs.

Parity keeps the signals that earned each ranking. A content redesign during a URL migration doubles the risk. Separate them when you can.

**Pass:** the agreed priority sample preserves its useful content and required metadata. **Fail:** an unapproved removal or missing task.

**Owner:** content reviewer. **Saved evidence:** old/new snapshots and the approved comparison.

### 4. Preserve the internal link graph

Export the internal link graph from Screaming Frog. The new site keeps the same structural relationships. A page with 50 internal links on the old site gets a similar number on the new site. A high-traffic page that loses all internal links becomes an orphan and loses value fast.

**Pass:** no priority page becomes an orphan; all changed links match the reviewed map. **Fail:** a broken target or unexplained link loss.

**Owner:** developer and SEO lead. **Saved evidence:** old/new crawl graphs and the exception review.

### 5. Configure server-side redirects

Implement redirects on the server or at the edge, not with JavaScript or meta refresh tags. Googlebot follows server-side 301 redirects efficiently. Client-side redirects add delay and can fail to pass signals.

Nginx:

```nginx
location /old-path/ {
  return 301 /new-path/;
}
```

Apache (`.htaccess`):

```apache
Redirect 301 /old-path/ https://example.com/new-path/
```

On Cloudflare or Vercel, use the platform's bulk redirect configuration.

**Pass:** each mapped redirect returns the configured server or edge status. **Fail:** a client-only redirect, chain, loop, or wrong destination.

**Owner:** developer. **Saved evidence:** deployed redirect configuration and response-header export.

### 6. Prepare the new XML sitemap

Generate a sitemap for the new URL structure. List only URLs that return 200 on the new site, with no old URLs.

**Pass:** sitemap URLs return 200 and match their intended self-canonicals. **Fail:** an old, redirected, missing, or noncanonical URL.

**Owner:** developer. **Saved evidence:** sitemap validation and URL/status/canonical crawl.

### 7. Record baselines

Record these baselines in Search Console and GA4 before launch:

- Total organic clicks: daily, weekly, and monthly.
- Organic clicks for the top 50 pages.
- Average position for the top 100 keywords.
- Total indexed pages.
- Core Web Vitals.

Without baselines, you cannot measure the effect of the migration.

**Pass:** the dated baselines and source definitions are saved. **Fail:** an unavailable baseline or mixed reporting scope.

**Owner:** analytics owner. **Saved evidence:** finalized exports with date, device, channel, and property definitions.

## On launch day

### 8. Deploy in the lowest-traffic window

Launch when traffic is lowest for your main audience, often between 2 and 5 a.m. local time. A problem then affects fewer users, and the team has time to verify before peak hours.

**Pass:** the release window, operator, and rollback owner are confirmed. **Fail:** nobody can verify or restore the release.

**Owner:** release manager. **Saved evidence:** approved release schedule and contact record.

### 9. Turn on all redirects at once

Do not deploy redirects in stages. Each redirect goes live with the new site. A partial rollout leaves a window in which some old URLs return 404 while others redirect, and Google can drop the unreachable pages.

**Pass:** new pages and their redirect configuration ship in the same release. **Fail:** the release serves unmapped old URLs.

**Owner:** release developer. **Saved evidence:** deployment identifier and redirect-config version.

### 10. Verify each redirect

Test each row against its recorded status. For 301 rows, request the old URL without following redirects. Confirm the mapped `Location`, then request that destination without following another redirect and confirm 200. For removal rows, confirm the recorded 404 or 410 with no redirect.

For a quick shell check, export only the 301 rows to headerless `301-map.csv` with `old_url,new_url` columns and no embedded commas. This checks their first response; the Python example below also checks final responses and removals:

```bash
while IFS=, read -r old new; do
  read -r status location < <(curl -s -o /dev/null -w "%{http_code} %{redirect_url}" "$old")
  if [ "$status" != "301" ] || [ "${location%/}" != "${new%/}" ]; then
    echo "FAIL $old -> $location ($status), expected $new"
  fi
done < 301-map.csv
```

**Pass:** each redirect row returns its mapped 301 in one hop to a 200 page; each removal returns its recorded 404 or 410. **Fail:** any wrong status, target, chain, or unreachable retained page.

**Owner:** release developer. **Saved evidence:** complete map test with status, Location, final URL, and final status.

### 11. Submit the new sitemap

Submit the new sitemap in Search Console within an hour of launch. For a domain change, add and verify the new domain property before launch day.

**Pass:** the sitemap submission names the verified production property and new URLs. **Fail:** the wrong property or an old sitemap is submitted.

**Owner:** SEO lead. **Saved evidence:** Search Console submission receipt and sitemap URL.

### 12. Test canonical tags

Each page on the new site carries a self-referencing canonical:

```html
<link rel="canonical" href="https://newdomain.com/new-path/">
```

**Pass:** every retained final page has its intended self-canonical. **Fail:** a canonical pointing to an old URL, redirect, or unrelated page.

**Owner:** SEO reviewer. **Saved evidence:** final response URL and canonical extracted from the same crawl.

### 13. Validate robots.txt

A common migration error is the staging robots.txt, which blocks all crawlers, going live in production. Confirm that the production file allows crawling and lists the sitemap:

```text
User-agent: *
Allow: /
Sitemap: https://newdomain.com/sitemap.xml
```

**Pass:** important pages and resources are crawlable, with no unintended page-level or header noindex. **Fail:** a staging block or indexing directive remains.

**Owner:** release developer. **Saved evidence:** robots.txt, response headers, and page meta-directive export.

### 14. Check HTTPS

For a move from HTTP to HTTPS, confirm four things:

- Each HTTP URL redirects to its HTTPS equivalent, not only the home page.
- No page loads HTTP resources on HTTPS (no mixed content).
- HSTS headers are set.
- The TLS certificate covers each subdomain in use.

**Pass:** HTTP mappings reach the intended HTTPS pages, certificates cover the used hosts, and no mixed content remains. **Fail:** an invalid certificate, wrong destination, or blocked resource.

**Owner:** infrastructure owner. **Saved evidence:** TLS, response-header, and mixed-content checks.

## After launch: keep a pass/fail record

| Check | Owner | Saved evidence | Fail condition |
|---|---|---|---|
| Old-to-new map | Release developer | Full response export from every map row | Wrong status, Location, or final response |
| Self-canonical | SEO reviewer | Final URL and canonical crawl | Canonical differs from intended final URL |
| Indexing directives | Release developer | Headers, meta tags, robots.txt | Unintended noindex or crawl block |
| Priority page task | Content owner | Rendered before/after review | Missing walkthrough, content, or conversion path |
| Rollback readiness | Release manager | Tested restore steps and verified prior artifact | Artifact unavailable or restore test fails |

Check the critical responses immediately, then daily during the first week. Review finalized search and conversion trends at the agreed later checkpoints. Save the date and result of each check. Search Console data can lag, so use request tests and server logs for immediate failures.

Use migration-type and recovery diagnosis to investigate a traffic decline after the release checks pass. Use the product-manager plan for sprint ownership. A fixed recovery date is not a release pass condition.

## Automate checks on large migrations

**Scripted redirect verification.** For thousands of URLs, manual checks are impractical. Run a script like this one each hour for the first 48 hours. A failure found in hours does far less damage than one found after a week of crawling.

```python
import csv
from urllib.parse import urljoin
import requests

def verify_redirects(map_file, output_file):
    results = []
    with open(map_file) as f:
        for row in csv.DictReader(f):
            expected_status = int(row['status'])
            result = {
                'old_url': row['old_url'], 'expected_url': row['new_url'],
                'expected_status': expected_status, 'reason': row['reason'],
                'actual_url': '', 'status': 0, 'final_status': '', 'match': False,
            }
            try:
                resp = requests.get(row['old_url'], allow_redirects=False, timeout=10)
                result['status'] = resp.status_code
                location = resp.headers.get('Location', '')
                if expected_status == 301:
                    actual = urljoin(row['old_url'], location) if location else ''
                    result['actual_url'] = actual
                    if resp.status_code == 301 and actual == row['new_url']:
                        final = requests.get(actual, allow_redirects=False, timeout=10)
                        result['final_status'] = final.status_code
                        result['match'] = final.status_code == 200
                elif expected_status in (404, 410):
                    result['match'] = resp.status_code == expected_status and not location
            except requests.RequestException as e:
                result['actual_url'] = f'ERROR: {e}'
            results.append(result)

    fields = ['old_url', 'expected_url', 'expected_status', 'reason',
              'actual_url', 'status', 'final_status', 'match']
    with open(output_file, 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=fields)
        writer.writeheader()
        writer.writerows(results)

    failed = [r for r in results if not r['match']]
    print(f'Verified {len(results)} map rows. {len(failed)} failures.')
    return failed
```

**Content parity audits.** For large sites, build a comparison tool. It fetches the old page, from a pre-migration snapshot or the Wayback Machine, and the new page. It compares the title, meta description, H1, internal link count, and structured data. It flags each new page that has at least 20% fewer words than the old one. This catches the most common silent failure: pages that redirect correctly but serve less content.

**Crawl monitoring.** Conductor Website Monitoring (formerly ContentKing) alerts in real time on changes to titles, meta descriptions, canonicals, and indexability. Lumar (formerly DeepCrawl) compares scheduled crawls. Without those tools, run Screaming Frog crawls at 1 hour, 24 hours, 72 hours, and 7 days after launch. Compare each crawl with the pre-launch crawl, and investigate each difference that the plan does not explain.

## Communicate and plan the rollback

**Internal teams.** Brief engineering, content, marketing, support, and sales. Each team needs to know what changes and when, what can break for a short time, and whom to contact. Sales needs advance notice when client-facing URLs change, because a link to a prospect that returns 404 damages the relationship.

**External parties.** Notify API consumers, documentation sites, and partners that link to specific URLs, and send them the redirect map. Redirects keep links working, but direct links are more reliable. For a major domain change, publish an announcement and email subscribers, which reduces confusion in brand search.

**Rollback.** Document and test the restore path before launch. Name the owner, prior artifact, configuration versions, and restoration checks. A critical broken destination or widespread unintended noindex can trigger rollback immediately. Percentage thresholds such as 5% redirect failures are illustrative, not universal. Set the actual trigger from site risk, and save the failing response evidence. Confirm the prior version works after restoration.

## Avoid four migration failures

**Redirect loops.** A redirects to B, and B redirects back to A. Crawlers stop and log an error. Test each redirect for loops.

**Redirect chains.** Old URL to intermediate URL to final URL. Google follows up to 10 hops, but each hop adds latency and a point of failure. Collapse each chain to a single hop. The [redirect chains guide for developers](/articles/redirect-chains-301-developers) shows how to find and fix them.

**Soft 404s.** The new site returns 200 for URLs that should not exist, with a generic "not found" page. Google treats those as soft 404 errors. Return a real 404 or 410.

**Lost hreflang.** International sites that lose hreflang during the move can show the wrong language version to users. Audit hreflang on each language version after launch.

## Answer common developer questions

**How long must redirects stay live?** Indefinitely for a domain change. For path changes on the same domain, at least 12 months. External links to old URLs depend on them; removing a redirect turns those links into dead ends.

**301 or 302?** Use 301 for a migration. A 301 tells Google the move is permanent and to show the new URL. A 302 says the move is temporary, so Google can keep the old URL in its index for longer. The [HTTP status codes guide](/articles/http-status-codes-seo) covers each code.

**What about pages with no equivalent?** Redirect to the most relevant parent or category page. A redirect to the home page tells Google little, and Google can treat it as a soft 404. If the content is gone for good, return 410.

**Should the redesign ship with the migration?** No. Separate them by at least 8 weeks. If traffic drops after a combined launch, you cannot tell whether the redirects, the content, or the design caused it.

**What about URL parameters?** Map the parameter combinations that Google crawls most, such as `?category=shoes&sort=price`, to their clean equivalents. The Search Console URL Parameters tool was retired in April 2022, so handle the rest on the site. Parameters that do not change content, such as session IDs and tracking codes, get a canonical to the clean URL.

**New analytics property or the same one?** Keep the existing GA4 property and update the tracking code on the new site. For a domain change, add the new domain to the existing data stream. Or add a stream in the same property. A new property loses the historical data that you need to measure the migration.


## Related: SEO by role

- [Choose the right schema markup type so each page qualifies for its rich result](/articles/schema-markup-types-guide)
- [Real estate transactions: A deal file AI can track.](/articles/ai-memory-for-real-estate-transactions)
- [Real estate SEO: Brokerage, team, and agent roles.](/articles/seo-real-estate-roles)

----

```text
                  .|########||.                                       .|########||.                                       .|########||.
               |##||.      .||##|.                                 |##||.      .||##|.                                 |##||.      .||##|.
             |#|.              .|#|.                             |#|.              .|#|.                             |#|.              .|#|.
           |#|                    |#|                          |#|                    |#|                          |#|                    |#|
         .#|                        |#.                      .#|                        |#.                      .#|                        |#.
        .#.                          .#|                    .#.                          .#|                    .#.                          .#|
       |#.                            .#|                  |#.                            .#|                  |#.                            .#|
      |#             ......             #|                |#             ......             #|                |#             ......             #|
     .#           ||#########|           #|              .#           ||#########|           #|              .#           ||#########|           #|
    .#.         |######||######|.        .#.            .#.         |######||######|.        .#.            .#.         |######||######|.        .#.
    #.        .##|###|##|#|######|        .#            #.        .##|###|##|#|######|        .#            #.        .##|###|##|#|######|        .#
   ||        |##|#||||||||||||#||#|        ||          ||        |##|#||||||||||||#||#|        ||          ||        |##|#||||||||||||#||#|        ||
   #        |#||||||||||||||||||||#|        #.         #        |#||||||||||||||||||||#|        #.         #        |#||||||||||||||||||||#|        #.
  ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||
  #       .#||||||||||||||||||||||||#|       #        #       .#||||||||||||||||||||||||#|       #        #       .#||||||||||||||||||||||||#|       #
 ||   ....|||#||||||##|#|||#|#||##||||....|. ||      ||   ....|||#||||||##|#|||#|#||##||||....|. ||      ||   ....|||#||||||##|#|||#|#||##||||....|. ||
 #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#      #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#      #.  .  ....|#  ....#|||   ||| .#|||  ....#. .#
 #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.     #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.     #   .  ||||#| .#####||  . .#| .#|||  ||||#   #.
.|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||    .|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||    .|   |||||  #. |#|||||. ||  #. |#||. .|||||   ||
||   |....  #. ....|#.      |. ...|. ....||   ||    ||   |....  #. ....|#.      |. ...|. ....||   ||    ||   |....  #. ....|#.      |. ...|. ....||   ||
#.  .||||||##||||||##||####|||||||#||||||#|   .#    #.  .||||||##||||||##||####|||||||#||||||#|   .#    #.  .||||||##||||||##||####|||||||#||||||#|   .#
#    .||####|###########################|.     #    #    .||####|###########################|.     #    #    .||####|###########################|.     #
#      .#||||||.#.|| # |. ..# #| #|||||#|      #    #      .#||||||.#.|| # |. ..# #| #|||||#|      #    #      .#||||||.#.|| # |. ..# #| #|||||#|      #
#      .#|||||| ..  |# ## |#| ...#|#|||#|      #    #      .#|||||| ..  |# ## |#| ...#|#|||#|      #    #      .#|||||| ..  |# ## |#| ...#|#|||#|      #
#      .#|||#|# .# .#| #| ##|.#..#|||||#|      #    #      .#|||#|# .# .#| #| ##|.#..#|||||#|      #    #      .#|||#|# .# .#| #| ##|.#..#|||||#|      #
#      .#||||||############|######|||||#|      #    #      .#||||||############|######|||||#|      #    #      .#||||||############|######|||||#|      #
#   |...||#||||||#||||#|#||||||#|||||#||| |.|  #    #   |...||#||||||#||||#|#||||||#|||||#||| |.|  #    #   |...||#||||||#||||#|#||||||#|||||#||| |.|  #
#. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#    #. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#    #. .. ||||# .|||##|.  |#| .|| || .|||#. #|  # .#
|| |  ...||  ...##| |  #| .|. |. #####  .. .| ||    || |  ...||  ...##| |  #| .|. |. #####  .. .| ||    || |  ...||  ...##| |  #| .|. |. #####  .. .| ||
|| ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||    || ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||    || ||||| || ||||#|  .  |. |. |#. ||||| |#| || ||
.# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.    .# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.    .# |.....#|....|#.||||.|||##.|#|....||.#||.#. #.
 #.|||||||#############################| ||| .#      #.|||||||#############################| ||| .#      #.|||||||#############################| ||| .#
 ||       ##||#||#||||||#||#||#||#||##.      ||      ||       ##||#||#||||||#||#||#||#||##.      ||      ||       ##||#||#||||||#||#||#||#||##.      ||
  #       .#|||||||||#||#|||||||||||#|       #        #       .#|||||||||#||#|||||||||||#|       #        #       .#|||||||||#||#|||||||||||#|       #
  ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||        ||       |#||||||||||||||||||||||#|       ||
  .#        |#||||||||||||||||||||#|        #.        .#        |#||||||||||||||||||||#|        #.        .#        |#||||||||||||||||||||#|        #.
   ||        |#||||||||||||||||||#|        ||          ||        |#||||||||||||||||||#|        ||          ||        |#||||||||||||||||||#|        ||
    #.        .######|#|#########|        .#            #.        .######|#|#########|        .#            #.        .######|#|#########|        .#
    .#.         |#####||||#####|         .#.            .#.         |#####||||#####|         .#.            .#.         |#####||||#####|         .#.
     |#           ||########||           #.              |#           ||########||           #.              |#           ||########||           #.
      |#             ......             #|                |#             ......             #|                |#             ......             #|
       |#.                            .#|                  |#.                            .#|                  |#.                            .#|
        |#.                          .#.                    |#.                          .#.                    |#.                          .#.
         .#|                        |#.                      .#|                        |#.                      .#|                        |#.
           |#|                    |#|                          |#|                    |#|                          |#|                    |#|
            .|#|.              .|#|.                            .|#|.              .|#|.                            .|#|.              .|#|.
               |##||.      .||##|                                  |##||.      .||##|                                  |##||.      .||##|
                 .||########||.                                      .||########||.                                      .||########||.

Scale With Search  2026  [scalewithsearch.com](https://scalewithsearch.com)
```
