A 28-page GoDaddy site rebuilt as 37 pages in English and 37 in Spanish
JunkHustle's old site had stock photos, four different starting prices and one broken schema block. We rebuilt it in English and Spanish, kept every old URL, and put one price table behind every page.
JunkHustle · Palm Beach County, FL · Launched September 2026 · Visit the live site

The business
JunkHustle
JunkHustle is a family-owned junk removal company. They price by how much of their 14-yard trailer a job fills, work seven days a week from 7am to 8pm, and hold a 5.0 rating from 78 Google reviews. They cover 17 cities across Palm Beach County, and each one has its own page.
Before this build they ran on a 28-page GoDaddy Website Builder site, with their Google Analytics and Google Ads tags loaded through Tag Manager. The site was built for Ads traffic first, with the groundwork for AI search in place from day one.
The old site
What they had before.
Front end: what customers saw
- Photos
- Of 25 images on the old site, 5 were stock: Getty movers in matching uniforms, a man holding a phone, and an aerial shot of a city garbage truck used as the appliance page hero. None of it was their crew or their trailer. The favicon was a different, older logo than the rhino and wordmark used everywhere else.
- Pricing
- The single-item starting price showed up four ways: $65, $75, $95 and $140. A full trailer was $525 on the homepage and $625 on the pricing page. A customer comparing two pages couldn't tell what anything cost.
- Trust signals
- The homepage said "50+ 5.0 Star Reviews" while the Google widget on the same page showed 77. There were no crew photos and no license number, insurance details or years in business anywhere on the site.
- Calls to action
- The Schedule A Pickup page told visitors to pick a date and time, but the form was a request form that warned online booking would not give pricing. The $25-off-first-pickup offer was worded three different ways across the site.
- Content
- The site said they take paint in two places and don't in two others. Two service-area lists didn't match the 17 city pages, one city page embedded a map of a different town, and typos like "FIrst" and "Pool equipmen t" were live.
- Pages and navigation
- 28 pages: home, 3 core pages, 7 services and 17 cities. No about page, no reviews page, no contact page and no privacy page. The "About Us" button jumped to a spot on the homepage. Everything was in English only.
Back end: what Google and AI saw
- Hosting
- GoDaddy Website Builder 8.0. Every page loaded GoDaddy's own analytics, a chat widget loader and GoDaddy's shared reCAPTCHA key on top of the actual content.
- Schema
- One LocalBusiness block, on the homepage only. Its url had no https, the street address field held a region name, and its @id pointed at a made-up hostname. The other 27 pages had no structured data.
- Indexing
- The /404 page returned a 200, so missing pages looked real to Google. An empty online-store page sat in the sitemap serving a copy of the homepage. Every page shared the same social preview image, and several titles were just a town name and the brand.
- Forms
- Two separate lead paths. Most pages used GoDaddy's built-in contact form, with fields that changed page to page (one page asked only for a name). The schedule page embedded a separate third-party request form.
- Tracking
- A Tag Manager container loaded Google Analytics and Google Ads. GoDaddy's page code set every Google consent signal to denied by default, and only its cookie banner switched them on.
- AI crawlers
- robots.txt had one rule for every bot (block /404) and a sitemap line pointing at http URLs. Nothing addressed AI crawlers by name.
What we built
The new site, piece by piece.
- Structure
- 37 indexable pages in each language, 74 URLs in the sitemap: 8 core pages (home, pricing, what we take, quote, about, reviews, service areas, privacy), 12 service pages and 17 city pages. Five of the services are new pages for work the old homepage only listed: construction debris, estate, eviction, hoarder and commercial cleanouts. A separate paid landing page swaps its headline for 11 services by URL parameter and stays out of search.
- Every old URL kept
- All 28 old page addresses kept their exact slug and return a 200 on the live domain. The empty store page redirects to the homepage, www and http redirect to the main https address, and unknown URLs now return a real 404.
- English and Spanish
- Every page exists in English at the root and in Spanish under /es, with Spanish slugs like /es/precios and /es/retiro-de-muebles and Spanish titles and descriptions. The language toggle lands on the same page in the other language with the query string and ad click IDs intact, and every page carries hreflang pairs. No translation widget.
- Parity check
- The 147 interface strings exist in both English and Spanish, and every content block is stored as an English and Spanish pair. A check runs before every build and fails it on a missing key, an empty value, a string left untranslated, or a price typed into the copy.
- One price table
- Nine load sizes, from a minimum up to a full 14-yard trailer, live in one file. Every page, the schema and llms.txt pull from it, so the site can't contradict itself on price again. The old prices were retired.
- Design and photos
- Exact navy and lime from their brand sheet, a condensed display face slanted to the angle of their logo, and the rhino mascot as hero art on desktop. On mobile the rhino drops out so the headline, price line and call and text buttons own the first screen. Olive text failed contrast on white, so text uses a darker green from the same brand sheet. No stock: 12 of their real job photos, with location data stripped.
- Reviews
- A reviews page with 72 Google reviews shown word for word, typos included, and filterable. Other profiles get a link, not repeated cards. There's no review or rating schema, because self-serving review markup can earn a manual action.
- Quote form
- One form, on the quote page, the homepage, and every service and city page. Spam gets caught by a hidden honeypot field, a signed timing token and a per-IP rate limit, and a real person whose token expired gets a silent retry instead of being dropped. A customer who leaves an email gets a confirmation in the language they used, English or Spanish, with a prompt to text photos of the job for a faster quote.
- Tracking
- The same Tag Manager container carried over, and it only loads on the live domain so preview builds never fire real conversions. The site pushes named events for form submits, call taps, text taps and language switches, each tagged with page and language. First-touch UTMs and Google click IDs, kept for 90 days, ride along with every quote request.
- Schema, AI search and speed
- LocalBusiness with hours, all 17 cities, the nine-tier price catalog and every profile link, plus Service, FAQPage and BreadcrumbList markup, with no street address since they're a service-area business. robots.txt allows GPTBot, OAI-SearchBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended, Googlebot and Bingbot by name, and llms.txt is built from the same data as the pages. Mobile Lighthouse on the homepage: 100 performance, 100 accessibility, 100 best practices, 1.9 s LCP, 0 layout shift.
Old vs new
Side by side.
| Old site | New site | |
|---|---|---|
| Pages | 28, plus an empty store page in the sitemap | 37 in English and 37 in Spanish, 74 sitemap URLs |
| Old URLs | 28 page addresses | All 28 kept on the same slug, all return 200 |
| Languages | English only | English and Spanish, Spanish slugs, checked for parity on every build |
| Pricing | Starting price stated 4 ways, full trailer 2 ways | One 9-tier table that every page reads from |
| Photos | 5 stock images and an off-brand favicon | 12 real job photos, no stock |
| Schema | One LocalBusiness block on the homepage, with a broken url and @id | LocalBusiness sitewide, plus Service, FAQPage and BreadcrumbList |
| Missing pages | /404 returned 200 | Unknown URLs return 404 |
| AI crawlers | One rule for all bots, no AI crawler named | 8 search and AI crawlers allowed by name, plus llms.txt |
| Mobile speed (homepage) | Not measured on the old site | Lighthouse 100 performance, 1.9 s LCP, 0 CLS |
How a build like this runs, start to finish: See how we work →