syted

syted blog

Landscaping SEO: What the Sites That Rank Actually Did

Every guide to landscaping SEO gives you the same seven steps. Claim your Google Business Profile, put keywords in your title tags, add LandscapingBusiness schema, build backlinks, blog sometimes, get reviews, be patient. Five of the ten pages ranking for landscaping seo right now are that list. One of them cites a 2017 survey as if it were Google's current ranking weights, and still calls the product "Google My Business."

None of them opened a single ranking competitor and measured anything.

So that is what this article does. On 2026-10-12 we pulled the real search results for a local landscaping query, took the three landscaping companies that actually rank on it, and measured their HTTP headers, structured data, robots.txt, sitemaps and page inventory. Everything below comes from those measurements or from Google's own documentation, quoted and dated. Two of the findings contradict advice that appears on every page in that SERP.

The three sites that rank, measured

The query was landscaping austin tx. Below the map pack, three of the organic results are landscaping companies rather than directories. Here they are with the numbers Ahrefs reports for the exact ranking URL, measured 2026-10-12 (country: us), plus the platform each one runs on, read from its response headers.

Position Site DR Est. US traffic to that URL Platform
2 austinnativelandscaping.com 35 1,045 WordPress on Flywheel
5 maasverde.com 16 562 WordPress on Kinsta
9 southernlovelandscaping.com 12 1,658 Squarespace

Read the last column against the third. The site with the lowest domain rating in the group, sitting six positions below the leader, is the one Ahrefs credits with the most organic traffic to its homepage. It runs on Squarespace, the platform the WordPress guides tell landscapers to avoid.

One honest qualification before anyone screenshots that table. Those traffic figures are estimates, and they are per URL, not per site: they describe each company's homepage, not its whole domain. Three sites is also not a statistical sample. What the table rules out is narrower and still useful: whatever is driving this SERP, it is not domain authority, and it is not the CMS.

The platform detection cost nothing and you can repeat it on any competitor:

curl -sI https://austinnativelandscaping.com/ | grep -iE 'x-fw-|server:|x-powered-by'
# server: Flywheel/5.1.0

curl -sI https://maasverde.com/ | grep -iE 'wp-json|x-kinsta|x-pingback'
# link: <https://maasverde.com/wp-json/>; rel="https://api.w.org/"

curl -sI https://www.southernlovelandscaping.com/ | grep -i 'server:'
# server: Squarespace

Three ranking landscapers, three different stacks. If platform choice decided this, one stack would have swept it. The same test on a different niche produced the same answer when we compared Webflow and WordPress for SEO: the stack sets your defaults, not your ceiling.

The schema type every landscaping guide recommends does not exist

Search for landscaping SEO advice and you will be told to add LandscapingBusiness structured data. Check it:

curl -s -o /dev/null -w "%{http_code}\n" https://schema.org/LandscapingBusiness
# 404
curl -s -o /dev/null -w "%{http_code}\n" https://schema.org/LandscapeArchitect
# 404

Both return 404, verified 2026-10-12. Neither type is in the vocabulary. Markup that uses them is markup Google has nothing to match.

What does exist is HomeAndConstructionBusiness, and its complete list of more specific subtypes is eight entries long:

Electrician, GeneralContractor, HVACBusiness, HousePainter, Locksmith, MovingCompany, Plumber, RoofingContractor.

The electrician got a type. The locksmith got a type. The roofer, the plumber, the mover and the house painter all got one. The landscaper did not, and neither did the landscape architect. That is a gap in a vocabulary, not a signal about your industry, but it does mean the standard advice cannot be followed literally.

Google's own guidance pushes in the opposite direction. The local business structured data page (last updated 2026-09-08 UTC) says to "Define each local business location as a LocalBusiness type" and to "Use the most specific LocalBusiness sub-type possible; for example, Restaurant, DaySpa, HealthClub, and so on."

For a landscaper, the most specific subtype that exists is the parent. So you declare both and let the type array carry the specificity:

{
  "@context": "https://schema.org",
  "@type": ["LocalBusiness", "HomeAndConstructionBusiness"],
  "name": "Example Landscaping",
  "url": "https://example.com/",
  "telephone": "+1-512-555-0142",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "1400 Example Road",
    "addressLocality": "Austin",
    "addressRegion": "TX",
    "postalCode": "78737",
    "addressCountry": "US"
  },
  "areaServed": [
    { "@type": "City", "name": "Austin" },
    { "@type": "City", "name": "Cedar Park" }
  ],
  "hasOfferCatalog": {
    "@type": "OfferCatalog",
    "name": "Landscaping services",
    "itemListElement": [
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Paver patio installation" } },
      { "@type": "Offer", "itemOffered": { "@type": "Service", "name": "Irrigation repair" } }
    ]
  },
  "openingHoursSpecification": [{
    "@type": "OpeningHoursSpecification",
    "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
    "opens": "08:00",
    "closes": "17:00"
  }]
}

This is not a theoretical pattern. It is what maasverde.com actually ships, measured in its homepage JSON-LD on 2026-10-12: "@type": ["LocalBusiness", "HomeAndConstructionBusiness"], a PostalAddress, GeoCoordinates, nine City entries under areaServed, and an OfferCatalog of eight Service offers each paired with a city.

The review property that Google tells you not to use

There is one line in that documentation page that almost nobody follows. On the aggregateRating property, Google writes: "This property is only recommended for sites that capture reviews about other local businesses." The same restriction appears in the page's introduction, which offers to tell Google about "reviews (if your site captures reviews about other businesses)."

Reviews you collected about yourself are not what that property is for. Now compare what the two marked-up sites do:

  • maasverde.com publishes aggregateRating with "ratingValue": "5.0" and "reviewCount": "6" for its own business.
  • southernlovelandscaping.com publishes LocalBusiness with an address, three City entries, five OpeningHoursSpecification blocks and a six-question FAQPage, and no aggregateRating at all. Its Google profile carries hundreds of reviews.

The company with hundreds of reviews markups none of them. The company with six markups all of them. Measured against Google's sentence, the one that looks under-optimised is the compliant one. If you want those reviews working for you, the place they count is your profile and your reputation, which is a different exercise covered in how to get more Google reviews.

And the site in position 2 has no LocalBusiness markup at all

austinnativelandscaping.com holds the top organic position among the three and appears in the map pack. Its homepage JSON-LD contains WebPage, BreadcrumbList, WebSite, Organization and ImageObject. There is no LocalBusiness node anywhere on it.

So within one SERP: the site with the richest local markup ranks fifth, the site with no local markup ranks second, and the site in between has the most traffic. Structured data earns you eligibility for rich results and clarity about what your pages describe. On this evidence it is not the lever that sorts these three. Markup it properly because it is cheap and correct, not because it moves you up.

Your profile and your website want opposite things from your address

This is the contradiction nobody in that SERP mentions, and it bites every landscaper who works out of a truck.

Google Business Profile's service area documentation is blunt: "If you don't serve customers at your business address, remove your address from your Business Profile." A landscaper almost never has customers coming to a yard or a storage unit, so for most of them the correct profile has no address on it.

Google's structured data documentation lists exactly two required properties on LocalBusiness: address and name. Required, it says, "for your content to be eligible for display as a rich result."

One surface tells you to remove the address. The other makes it mandatory for eligibility. Both are Google. The resolution is that they govern different things: the profile is your map listing, the markup describes your web page. You can hide the address on the profile and still publish a PostalAddress in your JSON-LD, and that is what both marked-up sites in this SERP do. Decide the profile question on where you actually meet customers, not on what your schema needs.

The same page sets four more limits that quietly shape your whole site structure:

  • "You can set up to 20 service areas based on the cities, postal codes, or other areas you serve."
  • "You can't set your service area as a radius distance around your business."
  • "The boundaries of your overall area shouldn't be more than about 2 hours of driving time from where your business is based."
  • "Service-area businesses can only have one profile for the whole area that they serve."

That last one is the important one, and it kills a tactic you will still see recommended. You cannot create a profile per suburb. One profile covers everything you serve. Which means the only per-city surface you control is on your own website, and that is why city pages matter more for a landscaper than for a business with three storefronts. There is more on the profile side in Google Business Profile optimization.

City pages that are not doorway pages

Both sites in the map pack built city pages. Neither built them the way the lazy version works.

southernlovelandscaping.com has nine of them, and the page names are the interesting part:

/austin-tx-landscape-design-outdoor-living-paver-patios
/cedar-park-tx-outdoor-living-landscape-design-patios
/georgetown-tx-outdoor-living-landscape-design-lighting
/lakeway-tx-outdoor-living-landscape-design-poolscapes
/leander-tx-landscape-design-outdoor-living-poolscapes
/round-rock-tx-landscape-design-outdoor-living-patios
/steiner-ranch-tx-outdoor-living-patios-landscape-design
/tarrytown-tx-landscape-design-outdoor-living-lighting
/service-areas

Austin is paired with paver patios. Lakeway and Leander get poolscapes. Georgetown and Tarrytown get lighting. The service mix changes with the suburb, which is what a page looks like when somebody thought about what sells in each place rather than running a template over a list of zip codes.

austinnativelandscaping.com solved the same problem with URL structure instead. Its services live under a city-bearing path:

/austin-landscape-design/
/austin-landscape-design/hardscaping/
/austin-landscape-design/landscape-design/
/austin-landscape-design/outdoor-lighting/
/austin-landscape-design/artificial-turf/
/austin-landscape-design/drip-irrigation/

One city, five services, each on its own URL, with the city in every path. It is the mirror image of the other approach and it ranks higher. Both work because each page has a reason to exist.

The version that does not work is twelve pages where only the city name changes. The cure is specific local content: soil type, freeze dates, water restrictions, HOA rules, which neighbourhoods have clay and which have caliche. If you cannot write a different second paragraph for a city, that city does not get a page. The same judgment applies to service pages in any trade, which is the ground covered in SEO for contractors.

One more thing in that first list is worth copying. The URL carries city plus service, not just the city. A page called /austin-tx competes with your homepage for the same query. A page called /austin-tx-paver-patios does not. URL shape is a decision you make once and live with, as anyone who has tried to change one later knows.

Why the lowest-authority site has the most traffic

Here is the measurement that explains the table at the top. We pulled every sitemap on all three domains and counted the URLs.

Site Blog posts Other pages Total in sitemaps
southernlovelandscaping.com (DR 12) 253 48 301
austinnativelandscaping.com (DR 35) 67 171 238
maasverde.com (DR 16) 65 45 110

The site with the most traffic has the most URLs. The site with the least traffic has the fewest. The DR column does not order anything here, and neither does structured data completeness: the 110-URL site has the best markup in the group. Two sites with a domain rating of literally zero hold organic positions in the cleaning results we measured.

The cadence is visible too, because the older posts still carry dates in their paths:

curl -s https://www.southernlovelandscaping.com/sitemap.xml \
  | grep -oE '<loc>[^<]+</loc>' | sed 's/<[^>]*>//g' \
  | grep -oE '/blogs/(20[0-9]{2})/' | sort | uniq -c
#   45 /blogs/2023/
#   48 /blogs/2024/
#   48 /blogs/2025/

Forty-five, forty-eight, forty-eight. That is one post a week, held for three consecutive years, by a landscaping company in Cedar Park. It is the single least glamorous fact in this article and it is the one that correlates with the traffic.

What they publish is not generic either. Thirty-four of those posts carry a city in the slug, and the pattern is service plus city plus a decision:

/blogs/paver-patio-installation-in-austin-tx-the-grade-is-set-before-the-first-paver
/blogs/drainage-company-in-austin-tx-judge-the-diagnosis-before-the-price
/blogs/irrigation-system-installation-in-austin-tx-the-decisions-made-before-anyone-digs
/blogs/artificial-grass-installation-in-cedar-park-tx-a-smarter-lawn-for-the-texas-climate
/blogs/how-french-drain-installation-reduces-irrigation-costs-in-austin-tx

Each one targets a query a homeowner types when they have a problem and have not yet picked a contractor. The seasonal ones do the same with timing: a January post on whether to install hardscaping in winter, a February post on spring yard cleanup, a December post on freeze-proof pergolas. Landscaping demand swings hard with the calendar and none of the five ranking guides mentions seasonality once.

The other two sites are not failing, they are playing a different shape. austinnativelandscaping.com has 171 pages that are not blog posts, including a 44-page plant catalogue and a materials taxonomy with its own URLs for Texas limestone, Oklahoma sandstone, Corten steel, concrete pavers and composite decking. Those are nouns customers search by name. It is a content moat built out of pages instead of posts, and it holds the better position of the two.

So the honest conclusion from three sites is not "blog more." It is that the lever is the number of specific pages that answer a specific question, whether you build them as posts or as a catalogue.

Nobody can guarantee a ranking from doing this, and the company publishing weekly for three years sits in position nine, which should tell you how little any single input decides. But between three sites in one SERP, the one with the most pages earns the most. Whether that pays for itself is the arithmetic in is SEO worth it.

Read the CPC before you write the page

There is a second measurement worth making before you write anything, and it takes one keyword lookup.

Here is the landscaping SEO keyword family, measured 2026-10-12 (country: us), sorted by what advertisers pay per click:

Keyword Volume KD CPC
seo for landscaping companies 200 0 $0.60
seo for landscaping company 250 1 $2.00
seo for landscaping 1,100 7 $3.50
landscaping seo 1,300 3 $4.00
landscaping seo company 300 0 $7.00
landscaping seo services 250 0 $7.00
lawn care seo 600 0 $8.00
landscaping seo service 150 0 $35.00

Same subject, top to bottom. The price of a click moves from sixty cents to thirty-five dollars, a factor of fifty-eight, and the thing that moves it is one word. seo for landscaping companies is somebody who wants to do the work. landscaping seo service is somebody about to hire. Advertisers know the difference and bid accordingly, which means the CPC column is a free readout of who else wants that click.

Why a landscaper should care: the identical split exists in your own keyword list. how much does a paver patio cost in austin is a homeowner three weeks from a decision. paver patio installers austin is a homeowner ready to call today, and every competitor in town is bidding on it. The cheap-click queries are where a 253-post blog beats a DR 35 domain, because nobody is fighting over them.

This is also the check we run on ourselves before writing anything here, and it is why this article exists and an article on lawn care seo does not: at $8.00 a click, that SERP fills up with agencies selling to landscapers rather than answering them. Opening the real results and comparing who ranks against who you sell to is the whole discipline, and it is the one step the seven-step guides never include. The paid-versus-organic side of the same arithmetic is in SEO vs Google Ads.

A detail from this particular SERP makes the point by accident. The People Also Ask box on landscaping seo mixes "How much should I pay for SEO services?" with "Is $100 an hour too much for landscape work?" Google is not sure whether the searcher is a landscaper buying SEO or a homeowner buying landscaping. When the PAA box cannot decide who you are, expect the top results to be split too.

What your robots.txt is already doing without you

Every site in this group ships a robots.txt somebody else wrote. Two of them contain something worth knowing about.

southernlovelandscaping.com serves a Squarespace default that opens with twenty-nine named crawlers, most of them AI: GPTBot, ClaudeBot, anthropic-ai, CCBot, Google-Extended, Bytespider, Amazonbot, Meta-ExternalAgent, DuckAssistBot, YouBot, Quora-Bot, TikTokSpider, and the three AdsBot-Google variants. It reads at a glance like a wall against AI crawlers. It is not one.

Read the structure, not the names:

User-agent: GPTBot
...
User-agent: AdsBot-Google-Mobile-Apps
User-agent: *
Disallow: /config
Disallow: /search
Disallow:/*?format=json
...

The twenty-nine names run consecutively straight into User-agent: *, and the rules come after. Google's robots.txt specification (last updated 2026-08-31 UTC) says "You can group together rules that apply to multiple user agents by repeating user-agent lines for each crawler," and that "Only one group is valid for a particular crawler." Consecutive user-agent lines are one group. So all thirty agents get the same permissive ruleset: no /config, no /search, no query-string format variants, everything else allowed.

Nothing in that file blocks an AI crawler. If you run a Squarespace site and assumed those names meant you were protected, or excluded, you were reading a list of names as a decision. Check the structure before you believe either story. Whether you want those crawlers reading you at all is a real decision with real consequences, which is the subject of LLM SEO.

The second one is quieter. maasverde.com serves a Yoast block that reads:

User-agent: *
Disallow:

Sitemap: https://maasverde.com/sitemap_index.xml

That Disallow: with no path does nothing at all. Google's spec: "Crawlers ignore the rule without a path," and "By default, there are no restrictions for crawling for the designated crawlers." It is a decorative line that looks like a directive, and it is harmless. The useful line in that file is the Sitemap: one.

austinnativelandscaping.com has the one real misconception: Crawl-delay: 3. Google does not support that field. Its documentation lists the fields Google's crawlers honour (user-agent, allow, disallow, sitemap) and crawl-delay is not among them, a position Google has held publicly since 2019. Other search engines may respect it. Googlebot will not. The same file also carries Disallow: /*?, which blocks every URL with a query string, so think twice before relying on a tracked landing URL on that site.

Measuring your own competitors in ten minutes

None of the above cost anything except the keyword data. Here is the whole recipe, which works on any competitor in any trade:

SITE="https://example-competitor.com"
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/131.0"

# 1. What are they running on?
curl -sI -A "$UA" "$SITE/" | grep -iE 'server:|x-powered-by|wp-json|x-fw-|x-kinsta'

# 2. What does their robots.txt actually allow?
curl -s -A "$UA" "$SITE/robots.txt"

# 3. How many pages do they have, and of what kind?
curl -s -A "$UA" "$SITE/sitemap.xml" | grep -oE '<loc>[^<]+</loc>' | sed 's/<[^>]*>//g' \
  | sed "s|$SITE||" | awk -F/ '{print "/"$2}' | sort | uniq -c | sort -rn

# 4. What structured data do they publish?
curl -s --compressed -A "$UA" "$SITE/" \
  | grep -oE '"@type"[[:space:]]*:[[:space:]]*("[^"]+"|\[[^]]*\])' | sort | uniq -c

Add sleep 4 between sites if you loop it. Some hosts rate-limit fast repeat requests and will start answering 429, which looks exactly like a broken site if you are not watching the status code. If a sitemap probe returns 301, follow it: both WordPress sites here redirect /sitemap.xml to /sitemap_index.xml, and a script that treats the 301 as a miss will tell you a site has no sitemap when it has four.

Four commands, zero cost, and you will know more about your competition than any report you could buy on a $500 monthly retainer. What you do with that knowledge is the subject of DIY SEO for small business, and the publishing side of it is in does blogging help SEO. If your pages are not showing up at all, start with why your website is not showing up on Google before touching any of this.

FAQ

Is SEO still worth it for a landscaping company in 2026?

On the evidence in this SERP, the organic surface still pays: the three landscaping companies ranking for one city query draw an estimated 1,045, 562 and 1,658 US visits a month to their homepages alone, from traffic they do not pay per click for.

What has changed is that the cheap version stopped working. A five-page site with a service list and LandscapingBusiness markup that does not exist competes with a 301-page site publishing weekly. Nobody can guarantee a ranking outcome from any of this, and the position of each site here is not explained by effort alone. The comparison worth running is against your current cost per lead, not against a hypothetical.

How much should I pay for SEO services?

Published retainers in this niche run roughly $500 to $1,500 a month, and one of the ranking pages quotes agency rates of $100 to $200 an hour buying three to twelve hours of work a month. Those numbers are the agency's own, not ours, and the arithmetic in that same article does not reconcile at its endpoints. Before paying any of it, price the alternative: the measurements in this article took four curl commands, and the one input that correlated with traffic was the number of pages published. Ask any provider what the deliverable is in pages, then compare. More on the ranges in how much SEO costs.

What is the 80/20 rule in SEO?

It is shorthand, not a Google rule: the idea that a small share of your pages produces most of your organic traffic, so you should find them and feed them. It is usually true and it is often misread. On a landscaping site with five pages there is no 20 percent to find yet, and the instruction becomes "publish enough pages that a top 20 percent can exist." Once you have a hundred, the rule earns its keep: pull the pages with impressions and no clicks out of Search Console and fix those first, which is the method in SEO content audit.

Do I need LocalBusiness schema to show up in the map pack?

The evidence here says no. austinnativelandscaping.com appears in the map pack for landscaping austin tx and publishes no LocalBusiness node at all: its JSON-LD is WebPage, WebSite, BreadcrumbList and Organization. Map pack placement is driven by your Business Profile, and Google names the inputs plainly: "Local results are mainly based on relevance, distance, and popularity," with the blunt follow-up that "There's no way to request or pay for a better local ranking on Google." Mark up your site properly because it makes your pages eligible for rich results and unambiguous about what they describe, not because it buys you a pin.

Should I create a separate Google Business Profile for each city I serve?

No, and Google's documentation closes the door explicitly: "Service-area businesses can only have one profile for the whole area that they serve." You get up to 20 service areas on that single profile, defined by city or postal code, never by radius, and the whole boundary "shouldn't be more than about 2 hours of driving time from where your business is based." Extra profiles for suburbs you drive to are a suspension risk, not a strategy. The per-city surface you legitimately control is on your own website, which is what the city pages section above is about.

How many blog posts does a landscaping website need?

There is no threshold, but there is a measured data point: the highest-traffic landscaper in this SERP has 253 posts, published at 45, 48 and 48 per year across 2023, 2024 and 2025. That is roughly one a week for three years, and it is the input that separates it from a DR 35 competitor with 67 posts. The useful way to read that is as a rate, not a total. One specific page a week about one real question beats forty generic pages published in a month, and the pages that work are the ones naming a service, a place and a decision the homeowner has not made yet.

Get cited by ChatGPT. Rank on Google.

You found this article through search. That is the whole product.

  • One researched article a day
  • Published on your own domain
  • Keywords checked against live results
Start writing

Get cited by ChatGPT. Rank on Google.

You found this article through search. That is the whole product.

  • One researched article a day
  • Published on your own domain
  • Keywords checked against live results
Start writing