A chain with forty stores has forty location pages, and on most cannabis sites those forty pages are one page. Not similar. One page, written once, republished under forty URLs with the city name swapped and the address block regenerated from a spreadsheet. Everybody involved knows this. Nobody planned it.
It happens because the alternative looks impossible. Forty genuinely different pages sounds like forty writing projects, and no marketing team has forty writing projects in it.
So the template gets built, the pages ship in an afternoon, and the problem is deferred until the day a reviewer opens three of them in a row and forms an opinion about all forty.
The way out is not more writing. It is a different production model, where the frame repeats and the substance does not, and where the substance is collected rather than invented. That model is what this module builds.
It is the third of six modules, and it is the part of dispensary SEO at scale that decides whether a chain compounds as it opens stores or accumulates liability with each one.
A template and a system produce the same page count
Both approaches end the quarter with forty URLs live. That is why the distinction never survives a project plan, where both appear as one line item called “location pages” with the same delivery date.
A template is a writing decision made once and applied forty times. A system is a collection decision made forty times and applied through one frame. The template scales the writing. The system scales the gathering, which is the only part that was ever the bottleneck.
The reason this matters beyond tidiness is that Google’s scaled content policy does not test whether a human wrote the page. It tests whether many pages were produced primarily to hold rankings without adding value of their own.
Forty pages from one template answer that question badly regardless of who typed them, and how quietly location pages converge when nobody is measuring is the shape of the problem before anybody names it as one.
There is a commercial argument as well, and it is the one that actually moves owners. A templated page can only ever compete on proximity, because it says nothing a nearer store’s page does not also say.
A page that names the parking, the transit stop and the two neighbourhoods it genuinely serves can win searches from people who are not standing next to the store. That is the difference between forty pages that defend and forty pages that acquire.
What actually counts as content on a location page
Before you can measure anything you have to agree on what is being measured, and this is where most audits go wrong in the first ten minutes. A location page that renders at nine hundred words is usually carrying two hundred and forty of its own.
Work through it band by band. The header, navigation and footer appear on every page of every site and contribute nothing to distinctiveness.
The address and hours block has the same shape everywhere but different values, so it distinguishes the page as a record without distinguishing it as writing.
The compliance and licence block is identical by design and should stay that way, because rewording legal text for variety is how a chain ends up with forty slightly different disclaimers and no idea which one is current.
Then there is the menu, which is usually the largest visual element on the page and contributes nothing at all. It gets its own section later, because the misunderstanding around it is worth taking slowly.
What remains is the honest ratio: the number of rendered words on this page that appear on no other page of the same site. Not the CMS word count. Not the count including the menu.
That number is almost always lower than the team expects, and the gap between what they expect and what is there is the entire content problem stated in one figure.
Setting the similarity ceiling, then letting it refuse pages
A similarity ceiling is a number you decide in advance, above which a page does not publish. Somewhere near seventy percent of body text, measured with the shared furniture stripped out, is a defensible place to put it.
Every chain that has this problem measures it eventually. Most measure it wrongly, once, after a notice arrives, and then never again. Both halves of that are worth fixing: measure it correctly, and measure it before publishing rather than after.
Compare raw HTML and you will get a number in the high eighties or nineties for any site with a substantial navigation, including sites with excellent location pages.
It is a useless number in both directions: it condemns good pages and it flatters bad ones by making every result look the same.
Strip the shared furniture first, compare only the body text, and what comes back is roughly what a reviewer forms by eye when they open three pages in sequence.
Then set a ceiling, and set it as a policy rather than as a finding. Below forty percent the pages are genuinely different documents. Between forty and seventy they are a family, which is acceptable and worth watching.
Above seventy you have one page on many URLs, whatever the intention was. A tool that samples the pages in your sitemap and scores them against each other turns that from an argument into a number, which matters mostly because arguments about page quality are unwinnable and numbers are not.
The ceiling only does work if something enforces it. A threshold that exists in a document is a preference. A threshold wired into the publishing step, where a page above it does not go live, is a system.
That distinction reappears at the end of this module and it is the single thing that separates chains that stay clean from chains that clean up periodically.
Where local substance actually comes from
Here is the part that gets skipped, and skipping it is why the template exists. Genuinely local detail is not on the internet. It cannot be researched from a desk, generated from a prompt, or inferred from a map. It has to be asked for.
Take them one at a time, because each produces a different kind of sentence.
- Geography. Not the city, which every competitor also has. The lot behind the building, the junction people turn at, the landmark they give as a reference when a friend asks where the store is. “Two blocks north of the transit hub, behind the Otto Street lot” is a sentence no other page in the state contains.
- The building. What it was before. Where the door actually is. Whether the signage is on the main road or around the side. Buildings in retail strips have histories that customers remember better than addresses.
- The people. Who works there, how long they have, what they know well. A store where two budtenders are deep on concentrates is a different store from one where nobody is, and that difference is real, checkable and useful to a customer.
- The customers. Who actually comes in, and at what hour. A store next to a hospital shift change has a different afternoon from a store next to a university. That shapes what the page should lead with.
- The calendar. The local events, the seasonal swings, the weeks the hours change. This is the material that makes a page look maintained rather than deposited.
- The competitive set. Who else is within a mile and what this store does that they do not. Later opening, a bigger lot, delivery that crosses a county line, a loyalty scheme that actually works.
Notice what is missing from that list: product descriptions, strain explainers, general cannabis education. All of it is available to every competitor, none of it is local, and a page padded with it is longer without being more distinct. Length was never the goal. Being unrepeatable was.
The intake is the system
If there is one idea in this module worth taking away, it is this one: the content system is not a writing process with a template attached. It is a collection process with a writing step at the end. The intake is the system, and everything downstream is assembly.
Three practical rules make this work, and all three are learned the hard way.
First, it is a call, not a form. Managers do not fill in forms, and the ones who do fill them in with the same three adjectives every retail manager uses. On a call they talk, and inside the talking is the parking detail you would never have thought to request.
Second, record it and transcribe it. Notes taken live are a summary, and the summary is where the specificity dies. The phrase you want is usually the one the manager throws away halfway through an answer about something else.
Third, ask questions that cannot be answered with a slogan. “What makes this store special” produces marketing language. “What do people say when they give directions here” produces a landmark. “What do customers ask at the counter every day” produces the six real FAQ entries, and they are almost never the six a content brief would have guessed.
The whole art of the intake is in the phrasing of eight questions, and once phrased they are reusable for every store the chain will ever open.
Twelve minutes per store, once. For a forty store chain that is eight hours of manager time in total, and it is the eight hours that decides whether the other three hundred hours produce forty pages or one.
The page skeleton: fixed frame, variable substance
With substance collected, the frame can be rigid, and it should be. Consistency of structure is a feature: it makes the pages faster to produce, easier to audit, and easier for a returning customer to read. Sameness in the frame was never the problem. Sameness in the sentences was.
Three classes of block, and it is worth being explicit about which is which before anybody starts drafting.
- Blocks that must differ. The H1, the opening, getting here, what the store is known for, the people, the neighbourhoods served, the FAQ. Seven blocks. If any one of them could be lifted onto another store’s page without a factual error, it has not been written yet.
- Blocks with a fixed shape and their own values. The NAP block and the schema. Same fields everywhere, different content in them, generated from one source of truth rather than typed forty times. Hand typing is how a phone number ends up correct on the page and wrong in the markup.
- The block that must never vary. Compliance and licence text. One approved wording, published identically, changed in one place when the rules change. Rewriting it for variety creates forty documents nobody can audit and no legal benefit whatsoever.
The order matters as much as the contents. Put the differentiating material above the menu embed, because that is the part of the page that is read, and because a page that opens with a menu opens with somebody else’s content.
The neighbourhood and directions material sits directly under the opening, where it does the most work for both the reader and the search that brought them.
Mapping the keywords before anybody writes
A content system for one store is a writing exercise. A content system for many stores in one metro is an allocation problem, and allocation has to happen before drafting, because it decides what each page is for.
The map is a grid: stores down the side, query types across the top. Brand plus city and the neighbourhood terms belong to the store they describe, and those assign themselves. The interesting rows are the ones that do not.
Product and service terms, such as a category page, delivery, curbside or same day, should be assigned deliberately to one page each, usually a hub page for the metro rather than to a store.
When two store pages both target the delivery term, both get written to rank for it, and the outcome is two stores fighting over one keyword where neither of them wins it. Google picks one, usually the wrong one, and it changes its mind periodically.
The generic “near me” term is the one that causes the most wasted effort in dense metros.
Two stores four miles apart cannot both own it, and in practice neither owns it, because the map pack resolves that query on proximity to the searcher rather than on which page tried harder.
Assign it to the metro hub, write the store pages for the searches proximity does not already decide, and stop spending on the one you cannot win.
When you inherit a site rather than build one, the cannibalization mapper will show you which pairs are already doing this.
Write the map down in a spreadsheet and put a name in every cell. Empty cells are opportunities. Cells with two names are the ranking problem you will otherwise diagnose in eight months’ time.
Titles and descriptions at fifty pages
The title tag is where a templated system is most visible, most damaging, and easiest to fix. It is also the only part of the page a searcher reads before deciding whether the page exists for them.
The standard pattern of service, city and brand is defensible for five pages and indefensible for fifty. It also wastes the most valuable characters on the page repeating a word the searcher already typed.
Build each title around the differentiator the intake produced: the late opening, the street name people use, the free lot, the delivery radius, the landmark two blocks away.
There is a compliance dimension here that catches people out, because a title is advertising in a way body copy sometimes is not, and what a cannabis title tag is allowed to claim is narrower than most teams assume. Price claims, potency claims and superlatives all belong to the part of the sentence you cannot use.
Meta descriptions get the same treatment for a different reason. Google rewrites them frequently, which is often taken as a reason not to bother, and that is the wrong conclusion.
It rewrites them when they do not match the query, and it uses them when they do. Fifty identical descriptions guarantee a mismatch on forty nine of them.
Checking how a title and description actually render before publishing takes seconds with a snippet preview, and doing it at draft stage rather than after indexing avoids the version of this job where you edit fifty pages twice.
The menu is not the page
This is the misunderstanding that survives every explanation, so it gets its own section. The menu is the reason the location page exists, it is what customers come for, it fills most of the screen. And it contributes nothing to whether the page ranks.
Most dispensary menus are embedded from a third party platform inside an iframe or injected by a script after the page loads. In the first case the products live on another domain entirely and belong, for indexing purposes, to that domain.
In the second they may be rendered eventually or may not, depending on how the script behaves and what the crawler waited for.
Either way, planning content on the assumption that four hundred product names are carrying the page is planning on a page that does not exist.
The technical detail behind that, and how to tell which case you are in, is what module six covers.
The practical consequence for a content system is simple and it changes the brief: everything around the menu has to carry the page alone. Two hundred and forty words of genuinely local writing above and below an embed is a real page.
Sixty words of introduction above an embed is a redirect with decoration, and it is a very common shape on chain sites because the menu makes the page look full while it is being built.
Compliance multiplies with the page count
Every system that clones copy clones its mistakes at the same rate, and this is the risk that owners underestimate most consistently, because a template feels like a control rather than an amplifier.
A chain operating across state lines is operating under different advertising rules in each of them, and those rules change, so treat anything here as a prompt to check your own regulator rather than as the rule itself. Language that is unremarkable in one market is a health claim, a price claim or an inducement in the next.
Written once into the shared part of the template, that sentence publishes on every page simultaneously, and nobody re-reads the template after page two.
The fix is structural rather than vigilant. Reusable copy, meaning anything that appears on more than one page, gets checked against every state the chain trades in, once, before it is cloned.
Store specific copy gets checked against its own state at draft. Running the wording through a compliance checker at that point costs a minute and catches the categories people forget: potency and dosage claims, medical benefit language, discount and price framing, anything that reads as an inducement, and imagery or wording that could be read as appealing to minors.
Keep the approved wordings in one place with a date on each. When a state changes a rule, the job is to edit one entry and republish, not to search fifty pages for a phrase you half remember writing.
Schema for a chain: one organisation, many branches
Structured data is where the multi location model either becomes legible to Google or becomes confusing, and confusion here undermines work done everywhere else.
The structure is straightforward. The brand is declared once, on the homepage, as an organisation, and it does not need a street address.
Each location page carries its own node for that branch, with its own address, coordinates, telephone, opening hours and canonical URL. The store node points back at the brand as its parent. That is the whole model.
Three failures account for nearly all the broken implementations I see.
- The head office address repeated on every branch page. Usually a theme setting applied globally. Forty pages claiming the same street address is a strong signal that these are not forty places.
- Product markup on cannabis items. Ineligible by policy, no rich result to gain, and an unnecessary flag on a category of site that is already reviewed more closely than most.
- A local business node with no address at all. This is a validation error rather than a judgement call, and it is the most common structured data error on cannabis sites because plugins and themes both generate a node and neither fills it in.
This is the content side of the model. What to mark up on the menu itself, and what to leave alone there, is module six.
Generate the markup from the same record that produces the on-page NAP block, so the two cannot disagree.
Match the Business Profile character for character, including suite formats, abbreviations and the phone number, because a mismatch between markup and profile is a small, silent inconsistency that costs trust at exactly the wrong layer.
The publishing gate
Everything above is a set of good intentions until something refuses a page that does not meet them. The gate is the mechanism, and it is deliberately boring: a short list of conditions, all of which must be true, checked at the moment of publishing rather than in a review afterwards.
- An intake exists for this store, recorded and dated. No intake, no page. This is the rule that does the most work and the one under the most pressure.
- Seven blocks contain material specific to this store. Read them against the nearest sibling page. If a block would be true of both, it fails.
- Body similarity against every existing location page is under the ceiling, measured with boilerplate stripped.
- The title and description are unique and neither is built from the standard pattern.
- No term on this page is already assigned to another page in the keyword map.
- Reusable copy has been compliance checked against every state, store copy against its own.
- Address, phone and hours match the Business Profile exactly, in the page, in the markup, and in the profile itself.
Seven conditions, a few minutes each, applied to every page forever. The reason to write them down rather than rely on judgement is that judgement degrades under deadline, and location pages are always built under deadline, usually the week a store opens.
Running the line without burning out
Forty pages built properly is a real amount of work and pretending otherwise is how the template comes back. What makes it survivable is treating it as a line with a rate rather than a project with a deadline.
Batch by block, not by page
Batch by block rather than by page. Ten intakes in one week. Ten opening sections in one sitting, ten directions sections in the next, ten FAQ blocks after that.
Writing the same block ten times consecutively is uncomfortable and it is exactly what you want, because by the fourth one the ways in which these stores actually differ are impossible to miss.
Writing page one end to end, then page two end to end, produces the opposite: each page is drafted in isolation and drifts towards the same defaults.
Give every stage an owner
Give each stage an owner. The manager supplies the intake and signs off the local facts. The writer drafts. Someone who is not the writer runs the compliance and similarity checks, because people do not catch their own repetition. The gate belongs to whoever is accountable for the site, not to whoever is under pressure to launch.
Where the line actually breaks
Know where it fails, because it fails in the same place every time. Not the writing. The intake. Store nine does not return the call. The launch date does not move.
So store nine gets a page assembled from the corporate website, which is a template by another name, and nobody notices until the page count is thirty and six of them were built that way.
The rule that saves this is unpopular and it is the one that works: a page without an intake does not get written. Chase the call, or ship thirty nine pages.
Measure the line, not the pages
Measure the line rather than the pages. Pages published per week, intakes outstanding, average similarity of the last ten pages against everything before them, and how many pages the gate refused. That last number should not be zero. A gate that never refuses anything is not being applied.
None of this is clever. It is a collection process, a fixed frame, an allocation table and a gate, run at a rate the team can hold.
The reason so few chains do it is that the first two weeks produce fewer pages than a template would, and that is the only stretch where the template looks like the better decision.
If setting the line up is more than the team can absorb alongside running the stores, that is what the content system work we build for chains is for, and the free audit will tell you how far the current pages are from the ceiling before you commit to anything.
The next module deals with what you are allowed to say once you have somewhere to say it.
Check your own site
Run the free check to see how your menu, age gate, and location pages appear to a search engine.
