Where things go in Squarespace
1. Foundation — Organization + WebSite + SportsActivityLocation
Why there is no street address here
A note on disambiguatingDescription
openingHoursSpecification — deliberately omitted
2. People — Kristen Bufe and Nate Tamarack
3. The Trout Psychology Method — Course (the curriculum umbrella)
4. Guided Fly Fishing Trips — Service
5. Virtual Casting Lessons — Service + Course (subscription)
6. Private Education — Service + Course
7. Three-Day Immersive Retreats — Service + Course
8. Casting Camp — Service + Course
9. Schools and Streamer Stomp — Service + Course
Required and recommended properties by type
JSON syntax validation — performed
Common failure modes to avoid when filling in placeholders
13. Rich Result Eligibility — honest assessment
Structured data for Squarespace 7.1
Prepared: August 27, 2026
Client: Trout Psychology (Streamside Coven Co.) — Kristen Bufe
Site: https://www.troutpsychology.com
Platform: Squarespace 7.1 (Commerce)
Strategic purpose: Give the Trout Psychology Method a durable, machine-readable home so Google, AI answer engines, and prospective students can find, quote, and cite it — and so the brand-entity confusion (Trout Psychology vs. SCco. vs. actual psychology practices) resolves in Google's Knowledge Graph.
Every block below is complete, validated, copy-paste-ready JSON-LD. Each is preceded by an HTML comment stating exactly where in Squarespace it goes and which values must be filled in first.
1. Never put comments inside a <script type="application/ld+json"> block.
JSON does not support // or /* */ comments. A single comment inside the script tag makes the entire block unparseable and Google silently ignores it — with no error anywhere you would think to look. All notes in this document live in HTML comments above the script tag, which is safe.
2. Fill in every {{PLACEHOLDER}} before pasting.
Placeholders are written as {{LIKE_THIS}}. A block shipped with placeholders intact is worse than no schema at all, because it publishes false data. §10 is the complete placeholder register.
3. Validate after every paste.
- https://search.google.com/test/rich-results (Google — rich result eligibility)
- https://validator.schema.org/ (schema.org — full vocabulary validation)
Google's tool only reports on the handful of types that generate rich results; it will say "no rich results detected" for Service and Person even when the markup is perfect. Use the schema.org validator for those.
| Block | Squarespace location | Scope |
|---|---|---|
| §1 Foundation (Organization + WebSite + SportsActivityLocation) | Settings → Developer Tools → Code Injection → HEADER | Every page, site-wide |
| §2 People (Kristen + Nate) | Page → ⚙ Settings → Advanced → Page Header Code Injection on the About/Team page | That page only |
| §3 The Method (Course) | Page Header Code Injection on the Method page | That page only |
| §4–§9 Services + Courses | Page Header Code Injection on each service page | That page only |
| §10 FAQPage | Page Header Code Injection on the FAQ page | That page only |
| §11 BreadcrumbList | Page Header Code Injection on each non-homepage page | That page only |
Squarespace note: Page Header Code Injection requires a Business plan or higher (Commerce qualifies). It is found per-page under the page's gear icon → Advanced, not in the site-wide Settings panel. Site-wide injection is under Settings → Developer Tools → Code Injection. Do not confuse the two — pasting a page-specific block site-wide will publish false claims on every page.
⚠️ One-time cleanup required first. The site audit found title tags rendering as
"… — SCco."and doubled suffixes. Fix Settings → Website → Website Title to read exactlyTrout Psychologybefore deploying this schema. Schema that says "Trout Psychology" while every title tag says "SCco." sends Google contradictory entity signals and can actively delay Knowledge Graph resolution. Fix the title field first.
This is the most important block in the document. It establishes the entity, disambiguates the brand, and models the service-area business correctly.
Trout Psychology has no published street address (client profile, "Street address — [CONFIRM — none published]"). It is a service-area business: instruction happens on the Yakima River and other Pacific Northwest waters, plus online.
Modeling this correctly means:
- No streetAddress property. Not an empty string, not a placeholder, not omitted-but-implied — the property simply does not appear. Inventing one would be a fabricated business fact and would also break Google Business Profile consistency later.
- address still appears, containing only addressLocality, addressRegion, postalCode, and addressCountry. This is valid schema.org and correctly represents "based in Cle Elum, WA" without claiming a storefront.
- areaServed carries the real coverage.
- serviceArea (a GeoCircle) gives the geographic radius.
- geo is deliberately omitted from the business node. geo on a LocalBusiness asserts "the business is physically located at this point," which would be a false claim for a service-area operation. The GeoCircle inside serviceArea carries the coordinates instead, which is the semantically correct place for them.
Honest expectation-setting: Google's LocalBusiness rich results and local-pack eligibility are strongest for businesses with a verified physical address. A correctly-modeled service-area business is still eligible for local results, but is at a structural disadvantage for "near me" queries. This markup does everything correctly available; it cannot manufacture an address the business does not have. Do not promise map-pack dominance on the back of it.
<!--
══════════════════════════════════════════════════════════════════════
TROUT PSYCHOLOGY — FOUNDATION SCHEMA (Organization + WebSite + Business)
══════════════════════════════════════════════════════════════════════
PASTE INTO: Squarespace → Settings → Developer Tools → Code Injection
→ HEADER field (site-wide, appears on every page)
FILL IN BEFORE PASTING:
{{LEGAL_NAME}} Legal registrant. CONFIRM whether the registered
entity is "Streamside Coven Co." or another name.
{{EMAIL}} Public contact email address.
{{FOUNDING_YEAR}} Year Trout Psychology began operating (YYYY).
CONFIRM — profile lists 25 yrs angling / 20 yrs
instruction, which is NOT the same as founding year.
If unknown, DELETE the "foundingDate" line entirely.
{{LOGO_URL}} Absolute https:// URL to the logo file. Upload the
logo to Squarespace, open it in a new tab, and copy
that URL. Must be at least 112x112px.
{{LOGO_WIDTH}} Logo width in pixels (integer, no quotes needed but
quoted here is also valid).
{{LOGO_HEIGHT}} Logo height in pixels.
{{HERO_IMAGE_URL}} Absolute https:// URL to the primary brand image.
{{YOUTUBE_CHANNEL_URL}} Full channel URL, e.g.
https://www.youtube.com/@troutpsychology
CONFIRM channel ownership first.
{{POSTAL_CODE}} Cle Elum WA is 98922 — CONFIRM this is the correct
mailing ZIP for the business.
{{LATITUDE}} / {{LONGITUDE}}
Approximate centre of the SERVICE AREA (not a
business address). Cle Elum town centre is
approximately 47.1954 / -120.9395 — CONFIRM and
adjust if the service radius should centre elsewhere
(e.g. mid-Yakima canyon).
{{SERVICE_RADIUS_M}} Service radius in METRES. 160000 ≈ 100 miles.
DO NOT ADD a "streetAddress" property. This is a service-area business
with no published street address. Inventing one is a fabricated business
fact and will break Google Business Profile NAP consistency later.
VERIFY the two sameAs social URLs resolve before publishing. A sameAs
pointing at a 404 weakens the entity signal instead of strengthening it.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://www.troutpsychology.com/#organization",
"name": "Trout Psychology",
"legalName": "{{LEGAL_NAME}}",
"alternateName": [
"Streamside Coven Co.",
"SCco.",
"Trout Psychology Method"
],
"url": "https://www.troutpsychology.com/",
"foundingDate": "{{FOUNDING_YEAR}}",
"description": "Trout Psychology is a fly fishing education and guiding company applying behavior analysis to both the angler and the trout. Founded by Kristen Bufe, B.S. Behavior Analysis, the Trout Psychology Method decomposes complex angling skills into components, teaches them through positive reinforcement, and chains them progressively to mastery, so students learn the reasoning behind on-water strategy rather than memorising mechanics. Instruction is river-based, custom-built per student, and capped at a 3:1 student-to-instructor ratio.",
"disambiguatingDescription": "Trout Psychology is a fly fishing instruction and guiding business in central Washington. It is not a mental health practice, psychology clinic, or counseling service. The name refers to the application of behavioral science to trout behavior and angler learning.",
"slogan": "Think like a trout.",
"email": "{{EMAIL}}",
"telephone": "+12066595501",
"logo": {
"@type": "ImageObject",
"@id": "https://www.troutpsychology.com/#logo",
"url": "{{LOGO_URL}}",
"contentUrl": "{{LOGO_URL}}",
"width": "{{LOGO_WIDTH}}",
"height": "{{LOGO_HEIGHT}}",
"caption": "Trout Psychology"
},
"image": {
"@type": "ImageObject",
"url": "{{HERO_IMAGE_URL}}",
"caption": "Trout Psychology fly fishing instruction on the Yakima River"
},
"founder": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
},
"employee": [
{ "@id": "https://www.troutpsychology.com/#kristen-bufe" },
{ "@id": "https://www.troutpsychology.com/#nate-tamarack" }
],
"numberOfEmployees": {
"@type": "QuantitativeValue",
"value": 2
},
"knowsAbout": [
"Fly fishing instruction",
"Fly casting instruction",
"Streamer fishing",
"Dry fly fishing",
"Trout behavior",
"Behavior analysis",
"Applied behavior analysis",
"Yakima River fly fishing",
"River journaling",
"Neurodiversity-informed outdoor instruction",
"Women in fly fishing"
],
"areaServed": [
{
"@type": "AdministrativeArea",
"name": "Washington",
"@id": "https://www.wikidata.org/wiki/Q1223"
},
{
"@type": "Place",
"name": "Yakima River, Washington"
},
{
"@type": "AdministrativeArea",
"name": "Pacific Northwest"
}
],
"contactPoint": [
{
"@type": "ContactPoint",
"telephone": "+12066595501",
"email": "{{EMAIL}}",
"contactType": "customer service",
"areaServed": "US",
"availableLanguage": "English"
},
{
"@type": "ContactPoint",
"telephone": "+12066595501",
"email": "{{EMAIL}}",
"contactType": "reservations",
"areaServed": "US",
"availableLanguage": "English"
}
],
"sameAs": [
"https://www.instagram.com/troutpsychology/",
"{{YOUTUBE_CHANNEL_URL}}",
"https://streamsidecovenco.com/"
]
},
{
"@type": "WebSite",
"@id": "https://www.troutpsychology.com/#website",
"url": "https://www.troutpsychology.com/",
"name": "Trout Psychology",
"alternateName": "The Trout Psychology Method",
"description": "Behavior-analytic fly fishing education, guided trips on the Yakima River, and virtual casting instruction.",
"inLanguage": "en-US",
"publisher": {
"@id": "https://www.troutpsychology.com/#organization"
},
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://www.troutpsychology.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
},
{
"@type": ["SportsActivityLocation", "LocalBusiness"],
"@id": "https://www.troutpsychology.com/#business",
"name": "Trout Psychology",
"description": "Guided fly fishing trips and behavior-analytic fly fishing instruction on the Yakima River and throughout central Washington. Service-area business: instruction takes place on the water, not at a storefront.",
"url": "https://www.troutpsychology.com/",
"telephone": "+12066595501",
"email": "{{EMAIL}}",
"image": {
"@type": "ImageObject",
"url": "{{HERO_IMAGE_URL}}"
},
"logo": {
"@id": "https://www.troutpsychology.com/#logo"
},
"parentOrganization": {
"@id": "https://www.troutpsychology.com/#organization"
},
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"postalCode": "{{POSTAL_CODE}}",
"addressCountry": "US"
},
"areaServed": [
{
"@type": "Place",
"name": "Yakima River, Washington"
},
{
"@type": "AdministrativeArea",
"name": "Kittitas County, Washington"
},
{
"@type": "City",
"name": "Cle Elum, Washington"
},
{
"@type": "City",
"name": "Ellensburg, Washington"
},
{
"@type": "City",
"name": "Roslyn, Washington"
},
{
"@type": "AdministrativeArea",
"name": "Central Washington"
},
{
"@type": "AdministrativeArea",
"name": "Pacific Northwest"
}
],
"serviceArea": {
"@type": "GeoCircle",
"geoMidpoint": {
"@type": "GeoCoordinates",
"latitude": "{{LATITUDE}}",
"longitude": "{{LONGITUDE}}"
},
"geoRadius": "{{SERVICE_RADIUS_M}}"
},
"sport": "Fly fishing",
"priceRange": "$$$",
"currenciesAccepted": "USD",
"paymentAccepted": "Credit Card, Debit Card, Gift Certificate",
"knowsLanguage": "en-US",
"founder": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
},
"sameAs": [
"https://www.instagram.com/troutpsychology/",
"{{YOUTUBE_CHANNEL_URL}}",
"https://streamsidecovenco.com/"
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Trout Psychology Services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/guided-trips#service" }
},
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/virtual-casting-lessons#service" }
},
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/private-education#service" }
},
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/retreats#service" }
},
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/casting-camp#service" }
},
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/schools#service" }
},
{
"@type": "Offer",
"itemOffered": { "@id": "https://www.troutpsychology.com/streamer-stomp#service" }
}
]
}
}
]
}
</script>
disambiguatingDescriptionThat property is doing real work here. The client profile flags that "Trout Psychology" reads as a mental-health practice to both humans and search engines, and that psychology directories surface for brand searches. disambiguatingDescription is schema.org's designated mechanism for exactly this problem — telling a machine "this entity is not the other thing with a similar name." It is not a magic fix, but it is the correct signal and it costs nothing. Keep it.
openingHoursSpecification — deliberately omittedA guiding business runs on booked trips, not walk-in hours, and the season runs spring through fall. Publishing fabricated "Mon–Fri 9–5" hours would be false. If Kristen wants to publish real booking-office hours, add this inside the #business node — otherwise leave it out:
<!--
OPTIONAL — only add this if the hours are REAL. Insert as a property of the
"#business" node in §1, alongside "priceRange". Do not publish invented hours.
This is a standalone reference snippet, not a block to paste on its own.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SportsActivityLocation",
"@id": "https://www.troutpsychology.com/#business-hours-reference",
"name": "Trout Psychology",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "{{OPENS_HHMM}}",
"closes": "{{CLOSES_HHMM}}",
"validFrom": "{{SEASON_START_YYYY-MM-DD}}",
"validThrough": "{{SEASON_END_YYYY-MM-DD}}"
}
]
}
</script>
For an authority-led strategy, Person schema is disproportionately valuable: it is how Google builds an author/expert entity, and it is what feeds E-E-A-T signals. Kristen's B.S. in Behavior Analysis is the single most defensible credential in the competitive set — it belongs in hasCredential, not buried in body copy.
<!--
══════════════════════════════════════════════════════════════════════
TROUT PSYCHOLOGY — PEOPLE (Kristen Bufe + Nate Tamarack)
══════════════════════════════════════════════════════════════════════
PASTE INTO: The About / Team page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
If Kristen and Nate have SEPARATE bio pages, split this into two blocks
and paste each on its own page. Keep the @id values exactly as written
either way — the site-wide Organization block in §1 references them.
FILL IN BEFORE PASTING:
{{ABOUT_PAGE_URL}} Full URL of the page this is pasted on.
{{KRISTEN_PHOTO_URL}} Absolute https:// URL to Kristen's headshot.
{{NATE_PHOTO_URL}} Absolute https:// URL to Nate's photo.
{{UNIVERSITY_NAME}} The institution that granted the B.S. in
Behavior Analysis. CONFIRM WITH KRISTEN — do
not guess. If she prefers not to name it,
DELETE the entire "alumniOf" object.
{{KRISTEN_INSTAGRAM}} e.g. https://www.instagram.com/troutfreckles/
CONFIRM this is a public professional account
she wants associated. If it is personal and she
does not want it linked, DELETE that line.
{{NATE_INSTAGRAM}} Nate's public profile URL, or DELETE the line.
{{PODCAST_EPISODE_URL}} Direct URL to The Lost Meander Podcast episode
(July 2025). If unavailable, DELETE that
"subjectOf" entry.
{{FLY_FISH_JOURNAL_URL}} Direct URL to the Fly Fish Journal "Side
Channels" feature. If unavailable, DELETE.
NOTE ON "hasCredential": the B.S. in Behavior Analysis is the strongest
E-E-A-T signal this brand owns. Do not delete it. If the university name
cannot be confirmed, delete only "alumniOf" and keep the credential.
NOTE ON EXPERIENCE CLAIMS: "25 years angling" and "20 years instruction"
are stated as of 2026 in the client profile. These are expressed in the
description text, not as machine-readable date properties, because the
exact start years are unconfirmed. Revisit if precise years are supplied.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Person",
"@id": "https://www.troutpsychology.com/#kristen-bufe",
"name": "Kristen Bufe",
"givenName": "Kristen",
"familyName": "Bufe",
"url": "{{ABOUT_PAGE_URL}}",
"mainEntityOfPage": "{{ABOUT_PAGE_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{KRISTEN_PHOTO_URL}}",
"caption": "Kristen Bufe, founder of Trout Psychology"
},
"jobTitle": "Founder and Lead Instructor",
"description": "Kristen Bufe is the founder of Trout Psychology and the creator of the Trout Psychology Method, which applies behavior analysis to both the angler and the trout. She holds a B.S. in Behavior Analysis, has 25 years of angling experience and 20 years of water-based instruction, and spent roughly a decade teaching students on the autism spectrum. She specialises in streamer fishing and guides from a raft on the Yakima River. She is a public voice on mental health and the outdoors and an advocate for women in fly fishing.",
"disambiguatingDescription": "Fly fishing instructor and guide. Holds a degree in behavior analysis, which informs her teaching method; she is not a practising psychologist, therapist, or clinician and does not provide mental health treatment.",
"gender": "Female",
"nationality": "American",
"worksFor": {
"@id": "https://www.troutpsychology.com/#organization"
},
"founderOf": {
"@id": "https://www.troutpsychology.com/#organization"
},
"homeLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"hasCredential": [
{
"@type": "EducationalOccupationalCredential",
"@id": "https://www.troutpsychology.com/#kb-credential-bs",
"name": "B.S. in Behavior Analysis",
"credentialCategory": "Bachelor's Degree",
"educationalLevel": "Undergraduate",
"about": {
"@type": "Thing",
"name": "Behavior Analysis"
},
"recognizedBy": {
"@type": "CollegeOrUniversity",
"name": "{{UNIVERSITY_NAME}}"
}
}
],
"alumniOf": {
"@type": "CollegeOrUniversity",
"name": "{{UNIVERSITY_NAME}}"
},
"knowsAbout": [
"Applied behavior analysis",
"Behavior analysis",
"Fly fishing instruction",
"Fly casting instruction",
"Streamer fishing",
"Trout behavior",
"Yakima River fly fishing",
"Neurodiversity-informed instruction",
"Autism spectrum education",
"Mental health and the outdoors",
"Women in fly fishing",
"River journaling",
"Task analysis and skill chaining"
],
"hasOccupation": {
"@type": "Occupation",
"name": "Fly Fishing Instructor and Guide",
"occupationLocation": {
"@type": "AdministrativeArea",
"name": "Central Washington"
}
},
"subjectOf": [
{
"@type": "Article",
"name": "Side Channels",
"publisher": {
"@type": "Organization",
"name": "The Fly Fish Journal"
},
"url": "{{FLY_FISH_JOURNAL_URL}}"
},
{
"@type": "PodcastEpisode",
"name": "The Lost Meander Podcast",
"datePublished": "2025-07",
"url": "{{PODCAST_EPISODE_URL}}",
"partOfSeries": {
"@type": "PodcastSeries",
"name": "The Lost Meander Podcast"
}
}
],
"sameAs": [
"{{KRISTEN_INSTAGRAM}}",
"https://www.instagram.com/troutpsychology/"
]
},
{
"@type": "Person",
"@id": "https://www.troutpsychology.com/#nate-tamarack",
"name": "Nate Tamarack",
"givenName": "Nate",
"familyName": "Tamarack",
"url": "{{ABOUT_PAGE_URL}}",
"mainEntityOfPage": "{{ABOUT_PAGE_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{NATE_PHOTO_URL}}",
"caption": "Nate Tamarack, instructor at Trout Psychology"
},
"jobTitle": "Instructor and Guide",
"description": "Nate Tamarack is an instructor and guide with Trout Psychology, describing himself as Instructor, Hype Man, and Quirky Nature Nerd. He specialises in dry fly fishing and runs a hard boat on the Yakima River. He is affiliated with Streamside Coven Co.",
"worksFor": {
"@id": "https://www.troutpsychology.com/#organization"
},
"affiliation": {
"@id": "https://www.troutpsychology.com/#organization"
},
"knowsAbout": [
"Dry fly fishing",
"Fly fishing instruction",
"Hard boat river guiding",
"Yakima River fly fishing",
"Aquatic entomology",
"Trout behavior"
],
"hasOccupation": {
"@type": "Occupation",
"name": "Fly Fishing Instructor and Guide",
"occupationLocation": {
"@type": "AdministrativeArea",
"name": "Central Washington"
}
},
"sameAs": [
"{{NATE_INSTAGRAM}}"
]
}
]
}
</script>
Delete-don't-fake rule. If Nate has no public profile URL, delete the entire
"sameAs"array from his node rather than leaving{{NATE_INSTAGRAM}}in place. An unresolvablesameAsis worse than none — it weakens entity confidence. The same applies to every{{PLACEHOLDER}}in this document: fill it or delete the property. Never publish a placeholder.
This is the authority asset. Modeling the Method as a Course — not just a page of prose — is what makes it a citable, structured entity rather than marketing copy. The instructional mechanics from the client profile (task analysis, positive reinforcement, chaining, river journaling, 3:1 ratio) become machine-readable teaching claims.
<!--
══════════════════════════════════════════════════════════════════════
THE TROUT PSYCHOLOGY METHOD — Course (curriculum umbrella)
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Method page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
This block models the METHOD ITSELF as a curriculum. The individual
paid programs in §5–§9 each reference this @id via "isPartOf", which
ties the whole education line to one named body of knowledge. That is
the entire authority play in structured-data form.
FILL IN BEFORE PASTING:
{{METHOD_PAGE_URL}} Full URL of the Method page. If the page does not
exist yet, BUILD THE PAGE FIRST. Schema pointing at
a URL that does not resolve is worse than nothing.
{{METHOD_IMAGE_URL}} Absolute https:// URL to the page's hero image.
NOTE: this Course intentionally has NO "offers". The Method is the body of
knowledge; the purchasable programs are in §5–§9. Do not add a price here.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"@id": "https://www.troutpsychology.com/#method",
"name": "The Trout Psychology Method",
"url": "{{METHOD_PAGE_URL}}",
"mainEntityOfPage": "{{METHOD_PAGE_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{METHOD_IMAGE_URL}}"
},
"description": "The Trout Psychology Method applies behavior analysis to both the angler and the trout. Trout are treated as organisms that follow the same laws of learning, so anglers can build evidence-based on-water strategy from observable environmental conditions rather than guesswork. Complex angling skills are decomposed into components through task analysis, taught with positive reinforcement, and chained progressively to mastery. Students learn the reasoning behind each decision, not only the mechanics, and leave with strategy blueprints that let them problem-solve independently on unfamiliar water.",
"abstract": "Behavior-analytic fly fishing pedagogy: think like a trout, and learn the way learning actually works.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"creator": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
},
"inLanguage": "en-US",
"educationalLevel": "Beginner to Advanced",
"teaches": [
"Reading water and interpreting trout holding behavior",
"Applying the laws of learning to predict trout response",
"Building evidence-based on-water strategy from observable conditions",
"Fly casting mechanics taught through task analysis and skill chaining",
"Streamer fishing technique and presentation",
"Dry fly technique and presentation",
"Leader and tippet construction and selection",
"River journaling as a structured observational practice",
"Independent problem-solving using strategy blueprints",
"Transferring learned strategy to unfamiliar fisheries worldwide"
],
"educationalCredentialAwarded": "None. Skill mastery is demonstrated on the water, not certified.",
"learningResourceType": [
"In-person river-based instruction",
"Printed workbooks",
"Streamside whiteboards and flowcharts",
"River journals",
"Video analysis"
],
"educationalUse": "Instruction",
"isAccessibleForFree": false,
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "Anglers of all experience levels, including beginners, women in fly fishing, and neurodivergent learners"
},
"about": [
{ "@type": "Thing", "name": "Fly fishing" },
{ "@type": "Thing", "name": "Behavior analysis" },
{ "@type": "Thing", "name": "Trout behavior" },
{ "@type": "Thing", "name": "Fly casting" },
{ "@type": "Thing", "name": "Angler education" }
],
"keywords": "trout psychology method, think like a trout, behavior analysis fly fishing, fly fishing instruction, streamer fishing, fly casting lessons, Yakima River",
"hasCourseInstance": [
{
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/#method-instance-onwater",
"name": "River-Based Instruction",
"courseMode": "onsite",
"courseWorkload": "PT8H",
"description": "One hundred percent river-based instruction with a maximum 3:1 student-to-instructor ratio and a custom curriculum built for each student.",
"location": {
"@type": "Place",
"name": "Yakima River, Washington",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"instructor": [
{ "@id": "https://www.troutpsychology.com/#kristen-bufe" },
{ "@id": "https://www.troutpsychology.com/#nate-tamarack" }
],
"maximumAttendeeCapacity": 3
},
{
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/#method-instance-online",
"name": "Virtual Instruction",
"courseMode": "online",
"courseWorkload": "PT2H",
"description": "Remote instruction using video analysis, geography-independent and available year-round.",
"instructor": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
}
}
]
}
</script>
<!--
══════════════════════════════════════════════════════════════════════
GUIDED FLY FISHING TRIPS — Service
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Guided Trips page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{GUIDED_TRIPS_URL}} Full URL of the guided trips page. If the real
slug is not /guided-trips, update BOTH the @id
and the url property AND the matching reference
in the hasOfferCatalog in §1.
{{TRIP_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{PRICE_FULL_DAY}} Full-day private trip price, digits only
(e.g. 650). CONFIRM WITH KRISTEN.
{{PRICE_SHARED}} "Split with a stranger" shared trip price per
angler, digits only. CONFIRM.
{{BOOKING_URL}} Direct booking URL. If booking is by phone or
email only, DELETE the whole "potentialAction"
object rather than pointing it at a contact page.
IF PRICES ARE NOT PUBLIC: delete the two "priceSpecification" objects and
the "offers" array entirely, and keep the rest. Never publish a guessed
price — schema price mismatches against the visible page are a Google
structured-data violation and can trigger a manual action.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Service",
"@id": "https://www.troutpsychology.com/guided-trips#service",
"name": "Guided Fly Fishing Trips on the Yakima River",
"serviceType": "Guided fly fishing trip",
"url": "{{GUIDED_TRIPS_URL}}",
"mainEntityOfPage": "{{GUIDED_TRIPS_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{TRIP_IMAGE_URL}}"
},
"description": "Private guided fly fishing trips for one to two anglers on the Yakima River in central Washington, with a shared option for solo anglers willing to split a boat. Kristen Bufe guides from a raft and specialises in streamer fishing; Nate Tamarack runs a hard boat and specialises in dry flies. Every trip is taught, not just guided: instruction follows the Trout Psychology Method, so anglers leave understanding why the day unfolded the way it did.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"brand": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": [
{
"@type": "Place",
"name": "Yakima River, Washington"
},
{
"@type": "AdministrativeArea",
"name": "Kittitas County, Washington"
},
{
"@type": "AdministrativeArea",
"name": "Central Washington"
}
],
"audience": {
"@type": "Audience",
"audienceType": "Anglers of all experience levels, including complete beginners"
},
"termsOfService": "{{GUIDED_TRIPS_URL}}",
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Guided Trip Options",
"itemListElement": [
{
"@type": "Offer",
"name": "Private Guided Trip — Streamers (Raft)",
"description": "Private trip for one to two anglers, guided by Kristen Bufe from a raft, focused on streamer fishing.",
"priceCurrency": "USD",
"price": "{{PRICE_FULL_DAY}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"url": "{{GUIDED_TRIPS_URL}}",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
},
{
"@type": "Offer",
"name": "Private Guided Trip — Dry Flies (Hard Boat)",
"description": "Private trip for one to two anglers, guided by Nate Tamarack from a hard boat, focused on dry fly fishing.",
"priceCurrency": "USD",
"price": "{{PRICE_FULL_DAY}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"url": "{{GUIDED_TRIPS_URL}}",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
},
{
"@type": "Offer",
"name": "Shared Guided Trip — Split With a Stranger",
"description": "Solo anglers are paired with another angler to share a boat and split the cost.",
"priceCurrency": "USD",
"price": "{{PRICE_SHARED}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"url": "{{GUIDED_TRIPS_URL}}",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
}
]
},
"potentialAction": {
"@type": "ReserveAction",
"name": "Book a guided trip",
"target": {
"@type": "EntryPoint",
"urlTemplate": "{{BOOKING_URL}}",
"inLanguage": "en-US",
"actionPlatform": [
"https://schema.org/DesktopWebPlatform",
"https://schema.org/MobileWebPlatform"
]
},
"result": {
"@type": "Reservation",
"name": "Guided fly fishing trip reservation"
}
}
}
</script>
The $250/month subscription is modeled with UnitPriceSpecification carrying billingDuration and referenceQuantity, which is how schema.org expresses recurring pricing. A plain "price": "250" would tell Google this is a one-off $250 product — the same mistake the analytics setup has to work around on the GA4 side.
<!--
══════════════════════════════════════════════════════════════════════
VIRTUAL CASTING LESSONS — Service + Course (RECURRING SUBSCRIPTION)
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Virtual Casting Lessons page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{VIRTUAL_URL}} Full URL of the page. If the slug is not
/virtual-casting-lessons, update the @id, the url,
and the matching reference in §1's hasOfferCatalog.
{{VIRTUAL_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{SUBSCRIBE_URL}} Direct URL of the Squarespace subscription product.
SUBSCRIPTION MODELING — READ THIS:
The price is expressed as a UnitPriceSpecification with
billingDuration 1 and unitCode "MON", which states "$250 per month,
recurring". Do NOT replace this with a flat "price": "250" — that would
declare a one-time $250 purchase and misrepresent the product.
The "250" value and "USD" currency must match what the page displays.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Service",
"@id": "https://www.troutpsychology.com/virtual-casting-lessons#service",
"name": "Virtual Fly Casting Lessons",
"serviceType": "Online fly casting instruction",
"url": "{{VIRTUAL_URL}}",
"mainEntityOfPage": "{{VIRTUAL_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{VIRTUAL_IMAGE_URL}}"
},
"description": "Month-to-month virtual fly casting instruction with video analysis. Students record their casting, receive component-level feedback built on the Trout Psychology Method, and work through a custom progression. Because instruction is remote, the program is geography-independent and runs year-round, including through the central Washington winter.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": {
"@type": "Place",
"name": "Worldwide"
},
"availableChannel": {
"@type": "ServiceChannel",
"serviceUrl": "{{SUBSCRIBE_URL}}",
"availableLanguage": {
"@type": "Language",
"name": "English",
"alternateName": "en"
}
},
"offers": {
"@type": "Offer",
"@id": "https://www.troutpsychology.com/virtual-casting-lessons#offer",
"name": "Virtual Casting Lessons — Monthly Subscription",
"url": "{{SUBSCRIBE_URL}}",
"category": "Subscription",
"availability": "https://schema.org/InStock",
"priceCurrency": "USD",
"priceValidUntil": "2027-12-31",
"seller": {
"@id": "https://www.troutpsychology.com/#organization"
},
"priceSpecification": {
"@type": "UnitPriceSpecification",
"price": "250",
"priceCurrency": "USD",
"billingDuration": 1,
"billingIncrement": 1,
"unitCode": "MON",
"unitText": "month",
"referenceQuantity": {
"@type": "QuantitativeValue",
"value": 1,
"unitCode": "MON",
"unitText": "month"
},
"valueAddedTaxIncluded": false
}
}
},
{
"@type": "Course",
"@id": "https://www.troutpsychology.com/virtual-casting-lessons#course",
"name": "Virtual Fly Casting Lessons",
"url": "{{VIRTUAL_URL}}",
"description": "A month-to-month remote casting curriculum built on the Trout Psychology Method. Casting is decomposed into its component movements, each component is taught and reinforced individually, and the components are chained into a full stroke. Students submit video for analysis and receive specific, component-level correction rather than general advice.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isPartOf": {
"@id": "https://www.troutpsychology.com/#method"
},
"inLanguage": "en-US",
"educationalLevel": "Beginner to Advanced",
"isAccessibleForFree": false,
"teaches": [
"Fly casting stroke mechanics broken into components",
"Loop control and line speed",
"Casting fault diagnosis and self-correction",
"Distance and accuracy casting",
"Roll casting and single-handed spey casting fundamentals",
"Self-assessment through video review"
],
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "Anglers anywhere in the world, at any experience level"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/virtual-casting-lessons#instance",
"name": "Virtual Casting Lessons — Ongoing Monthly Enrollment",
"courseMode": "online",
"courseWorkload": "PT2H",
"description": "Rolling monthly enrollment. Enroll at any time; instruction continues month to month until cancelled.",
"instructor": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
},
"courseSchedule": {
"@type": "Schedule",
"repeatFrequency": "P1M",
"repeatCount": 12
},
"offers": {
"@id": "https://www.troutpsychology.com/virtual-casting-lessons#offer"
}
}
}
]
}
</script>
<!--
══════════════════════════════════════════════════════════════════════
PRIVATE EDUCATION (1–3 DAYS) — Service + Course
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Private Education page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{PRIVATE_ED_URL}} Full URL of the page.
{{PRIVATE_ED_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{PRICE_PRIVATE_ED}} Starting price, digits only. CONFIRM.
If pricing is quote-only, DELETE the entire
"offers" object from BOTH nodes and delete the
"offers" reference inside hasCourseInstance.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Service",
"@id": "https://www.troutpsychology.com/private-education#service",
"name": "Private Fly Fishing Education",
"serviceType": "Private fly fishing instruction",
"url": "{{PRIVATE_ED_URL}}",
"mainEntityOfPage": "{{PRIVATE_ED_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{PRIVATE_ED_IMAGE_URL}}"
},
"description": "One to three days of private, river-based fly fishing education with a curriculum built specifically for the student. There is no standardised lesson plan: the instructor assesses current skill, identifies the components blocking progress, and builds a progression around them. Maximum 3:1 student-to-instructor ratio.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": [
{ "@type": "Place", "name": "Yakima River, Washington" },
{ "@type": "AdministrativeArea", "name": "Central Washington" },
{ "@type": "AdministrativeArea", "name": "Pacific Northwest" }
],
"offers": {
"@type": "Offer",
"@id": "https://www.troutpsychology.com/private-education#offer",
"name": "Private Education — 1 to 3 Days",
"url": "{{PRIVATE_ED_URL}}",
"priceCurrency": "USD",
"price": "{{PRICE_PRIVATE_ED}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
}
},
{
"@type": "Course",
"@id": "https://www.troutpsychology.com/private-education#course",
"name": "Private Fly Fishing Education",
"url": "{{PRIVATE_ED_URL}}",
"description": "A fully custom one-to-three-day curriculum delivered on the water. Skills are decomposed through task analysis, taught with positive reinforcement, and chained to mastery. Students finish with a written strategy blueprint they can apply independently on unfamiliar water.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isPartOf": {
"@id": "https://www.troutpsychology.com/#method"
},
"inLanguage": "en-US",
"educationalLevel": "Beginner to Advanced",
"isAccessibleForFree": false,
"teaches": [
"Individually diagnosed skill gaps addressed through custom progression",
"Reading water and predicting trout holding behavior",
"Presentation technique appropriate to the student's target fishery",
"River journaling as an ongoing observational practice",
"Independent strategy building using strategy blueprints"
],
"learningResourceType": [
"River-based instruction",
"Printed workbooks",
"Streamside whiteboards and flowcharts",
"Strategy blueprints"
],
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "Individuals and small groups of up to three students"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/private-education#instance",
"name": "Private Education — Scheduled by Arrangement",
"courseMode": "onsite",
"courseWorkload": "P1D",
"description": "One to three consecutive days, scheduled directly with the instructor. Dates are arranged individually rather than run to a fixed calendar.",
"maximumAttendeeCapacity": 3,
"location": {
"@type": "Place",
"name": "Yakima River, Washington",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"instructor": [
{ "@id": "https://www.troutpsychology.com/#kristen-bufe" },
{ "@id": "https://www.troutpsychology.com/#nate-tamarack" }
],
"offers": {
"@id": "https://www.troutpsychology.com/private-education#offer"
}
}
}
]
}
</script>
<!--
══════════════════════════════════════════════════════════════════════
3-DAY IMMERSIVE GROUP RETREATS — Service + Course
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Retreats page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{RETREAT_URL}} Full URL of the retreats page.
{{RETREAT_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{PRICE_RETREAT}} Per-person price, digits only. CONFIRM.
{{RETREAT_START}} Next retreat start date, ISO 8601: YYYY-MM-DD
{{RETREAT_END}} Next retreat end date, ISO 8601: YYYY-MM-DD
IMPORTANT — DATED INSTANCES:
"hasCourseInstance" here carries real dates, which makes it eligible for
Google's Course rich result. That also means IT GOES STALE. Update the
dates whenever a retreat sells out or a new one is scheduled, and REMOVE
instances whose end date has passed. Stale dated schema is a live
liability, not a dormant one. Add "update retreat schema dates" to the
same checklist that handles publishing a new retreat.
If no retreat is currently scheduled, DELETE the entire
"hasCourseInstance" object rather than publishing a past date.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Service",
"@id": "https://www.troutpsychology.com/retreats#service",
"name": "Three-Day Immersive Fly Fishing Retreats",
"serviceType": "Fly fishing retreat",
"url": "{{RETREAT_URL}}",
"mainEntityOfPage": "{{RETREAT_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{RETREAT_IMAGE_URL}}"
},
"description": "Three-day immersive fly fishing retreats for groups of four to six anglers. Days are spent entirely on the water working through a shared curriculum built on the Trout Psychology Method, with instruction, river journaling, and group problem-solving. The retreats are built on the principle that people learn best when they are laughing.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": [
{ "@type": "Place", "name": "Yakima River, Washington" },
{ "@type": "AdministrativeArea", "name": "Central Washington" }
],
"offers": {
"@type": "Offer",
"@id": "https://www.troutpsychology.com/retreats#offer",
"name": "Three-Day Immersive Retreat",
"url": "{{RETREAT_URL}}",
"priceCurrency": "USD",
"price": "{{PRICE_RETREAT}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
}
},
{
"@type": "Course",
"@id": "https://www.troutpsychology.com/retreats#course",
"name": "Three-Day Immersive Fly Fishing Retreat",
"url": "{{RETREAT_URL}}",
"description": "A three-day group curriculum for four to six anglers. Skills are introduced, practised on the water, reviewed through river journaling, and revisited across consecutive days so that learning consolidates rather than evaporating after a single session.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isPartOf": {
"@id": "https://www.troutpsychology.com/#method"
},
"inLanguage": "en-US",
"educationalLevel": "Beginner to Advanced",
"isAccessibleForFree": false,
"teaches": [
"Reading water across varied river conditions over consecutive days",
"Applying behavioral principles to changing trout activity",
"Streamer and dry fly presentation",
"River journaling and structured daily review",
"Building and testing a strategy blueprint over multiple sessions"
],
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "Groups of four to six anglers"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/retreats#instance-next",
"name": "Three-Day Immersive Retreat",
"courseMode": "onsite",
"courseWorkload": "P3D",
"startDate": "{{RETREAT_START}}",
"endDate": "{{RETREAT_END}}",
"maximumAttendeeCapacity": 6,
"location": {
"@type": "Place",
"name": "Yakima River, Washington",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"instructor": [
{ "@id": "https://www.troutpsychology.com/#kristen-bufe" },
{ "@id": "https://www.troutpsychology.com/#nate-tamarack" }
],
"offers": {
"@id": "https://www.troutpsychology.com/retreats#offer"
}
}
}
]
}
</script>
<!--
══════════════════════════════════════════════════════════════════════
CASTING CAMP — Service + Course
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Casting Camp page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{CAMP_URL}} Full URL of the Casting Camp page.
{{CAMP_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{PRICE_CAMP}} Per-person price, digits only. CONFIRM.
{{CAMP_START}} Next camp start date, ISO 8601: YYYY-MM-DD
{{CAMP_END}} Next camp end date, ISO 8601: YYYY-MM-DD
{{CAMP_CAPACITY}} Maximum attendees, integer. CONFIRM.
{{CAMP_DURATION}} ISO 8601 duration: P1D for one day, P2D for two.
The client profile lists no duration, capacity, or price for Casting Camp.
ALL of these must be confirmed with Kristen. If the camp is not currently
scheduled, DELETE the "hasCourseInstance" object.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Service",
"@id": "https://www.troutpsychology.com/casting-camp#service",
"name": "Casting Camp",
"serviceType": "Fly casting instruction camp",
"url": "{{CAMP_URL}}",
"mainEntityOfPage": "{{CAMP_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{CAMP_IMAGE_URL}}"
},
"description": "A focused group camp dedicated entirely to fly casting. The casting stroke is decomposed into its component movements, each is taught and reinforced separately, and the components are chained into a repeatable cast. Students learn to diagnose and correct their own faults rather than depending on an instructor's eye.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": [
{ "@type": "Place", "name": "Yakima River, Washington" },
{ "@type": "AdministrativeArea", "name": "Central Washington" }
],
"offers": {
"@type": "Offer",
"@id": "https://www.troutpsychology.com/casting-camp#offer",
"name": "Casting Camp Registration",
"url": "{{CAMP_URL}}",
"priceCurrency": "USD",
"price": "{{PRICE_CAMP}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
}
},
{
"@type": "Course",
"@id": "https://www.troutpsychology.com/casting-camp#course",
"name": "Casting Camp",
"url": "{{CAMP_URL}}",
"description": "An intensive casting curriculum taught through task analysis and shaping. Students build the cast component by component and leave able to identify what went wrong in their own stroke and fix it without supervision.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isPartOf": {
"@id": "https://www.troutpsychology.com/#method"
},
"inLanguage": "en-US",
"educationalLevel": "Beginner to Intermediate",
"isAccessibleForFree": false,
"teaches": [
"Grip, stance, and casting arc fundamentals",
"Loop shape and line speed control",
"Timing the pause and load",
"Roll casting and water-borne anchors",
"Casting into wind",
"Self-diagnosis and correction of casting faults"
],
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "Anglers seeking dedicated casting instruction"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/casting-camp#instance-next",
"name": "Casting Camp",
"courseMode": "onsite",
"courseWorkload": "{{CAMP_DURATION}}",
"startDate": "{{CAMP_START}}",
"endDate": "{{CAMP_END}}",
"maximumAttendeeCapacity": "{{CAMP_CAPACITY}}",
"location": {
"@type": "Place",
"name": "Yakima River, Washington",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"instructor": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
},
"offers": {
"@id": "https://www.troutpsychology.com/casting-camp#offer"
}
}
}
]
}
</script>
Two blocks. Paste each on its own page.
<!--
══════════════════════════════════════════════════════════════════════
SCHOOLS / GROUP SCHOOLS — Service + Course
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Schools page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{SCHOOLS_URL}} Full URL of the Schools page.
{{SCHOOLS_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{PRICE_SCHOOL}} Per-person price, digits only. CONFIRM.
{{SCHOOL_DURATION}} ISO 8601 duration, e.g. P1D or P2D. CONFIRM.
{{SCHOOL_CAPACITY}} Maximum attendees, integer. CONFIRM.
This offering has NO dated instance because school dates are unconfirmed.
Once a calendar exists, copy the "hasCourseInstance" pattern from §7 and
add startDate / endDate. Do not add dates you have not been given.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Service",
"@id": "https://www.troutpsychology.com/schools#service",
"name": "Fly Fishing Schools",
"serviceType": "Group fly fishing school",
"url": "{{SCHOOLS_URL}}",
"mainEntityOfPage": "{{SCHOOLS_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{SCHOOLS_IMAGE_URL}}"
},
"description": "Group fly fishing schools taught on the water using the Trout Psychology Method. Schools cover the full arc from equipment and casting through reading water and presentation, with instruction capped at a 3:1 student-to-instructor ratio so no student is left watching.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": [
{ "@type": "Place", "name": "Yakima River, Washington" },
{ "@type": "AdministrativeArea", "name": "Central Washington" },
{ "@type": "AdministrativeArea", "name": "Pacific Northwest" }
],
"offers": {
"@type": "Offer",
"@id": "https://www.troutpsychology.com/schools#offer",
"name": "Fly Fishing School Registration",
"url": "{{SCHOOLS_URL}}",
"priceCurrency": "USD",
"price": "{{PRICE_SCHOOL}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
}
},
{
"@type": "Course",
"@id": "https://www.troutpsychology.com/schools#course",
"name": "Fly Fishing School",
"url": "{{SCHOOLS_URL}}",
"description": "A structured group curriculum covering the foundations of fly fishing, taught river-side rather than in a classroom. Each skill is broken into components, demonstrated, practised with immediate reinforcement, and chained into a working whole.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isPartOf": {
"@id": "https://www.troutpsychology.com/#method"
},
"inLanguage": "en-US",
"educationalLevel": "Beginner",
"isAccessibleForFree": false,
"teaches": [
"Fly rod, reel, line, leader, and tippet fundamentals",
"Knots and rigging",
"Basic and roll casting",
"Reading water and identifying holding lies",
"Fly selection and matching conditions",
"Playing, landing, and releasing trout safely",
"River etiquette and conservation practice"
],
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "New and early-stage anglers learning in a group setting"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/schools#instance",
"name": "Fly Fishing School — Scheduled Sessions",
"courseMode": "onsite",
"courseWorkload": "{{SCHOOL_DURATION}}",
"maximumAttendeeCapacity": "{{SCHOOL_CAPACITY}}",
"location": {
"@type": "Place",
"name": "Yakima River, Washington",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"instructor": [
{ "@id": "https://www.troutpsychology.com/#kristen-bufe" },
{ "@id": "https://www.troutpsychology.com/#nate-tamarack" }
],
"offers": {
"@id": "https://www.troutpsychology.com/schools#offer"
}
}
}
]
}
</script>
Streamer Stomp is the signature branded program and Kristen's stated specialty. Give it its own page and its own schema — a named program is an ownable entity, and ownable entities are what the authority strategy is built on.
<!--
══════════════════════════════════════════════════════════════════════
STREAMER STOMP — Service + Course (SIGNATURE BRANDED PROGRAM)
══════════════════════════════════════════════════════════════════════
PASTE INTO: The Streamer Stomp page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{STOMP_URL}} Full URL of the Streamer Stomp page.
{{STOMP_IMAGE_URL}} Absolute https:// URL to the page hero image.
{{PRICE_STOMP}} Per-person price, digits only. CONFIRM.
{{STOMP_DURATION}} ISO 8601 duration, e.g. P1D. CONFIRM.
{{STOMP_CAPACITY}} Maximum attendees, integer. CONFIRM.
{{STOMP_START}} Next date, ISO 8601 YYYY-MM-DD. If none is
scheduled, DELETE the startDate line.
The description below is written from the profile's stated facts
(signature/branded program, Kristen specialises in streamer fishing).
REVIEW IT WITH KRISTEN before publishing — this is her signature program
and the copy should be hers, not an inference. Everything in this block
marked as a teaching claim must be something she actually teaches.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Service",
"@id": "https://www.troutpsychology.com/streamer-stomp#service",
"name": "Streamer Stomp",
"alternateName": "The Streamer Stomp",
"serviceType": "Streamer fishing instruction program",
"url": "{{STOMP_URL}}",
"mainEntityOfPage": "{{STOMP_URL}}",
"image": {
"@type": "ImageObject",
"url": "{{STOMP_IMAGE_URL}}"
},
"description": "Streamer Stomp is the signature Trout Psychology program, built around Kristen Bufe's specialty: moving big flies to move big fish. It applies the behavioral logic of the Trout Psychology Method specifically to predatory trout behavior, teaching anglers to read when a trout will chase and how to trigger the response.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isRelatedTo": {
"@id": "https://www.troutpsychology.com/#method"
},
"areaServed": [
{ "@type": "Place", "name": "Yakima River, Washington" },
{ "@type": "AdministrativeArea", "name": "Central Washington" }
],
"offers": {
"@type": "Offer",
"@id": "https://www.troutpsychology.com/streamer-stomp#offer",
"name": "Streamer Stomp Registration",
"url": "{{STOMP_URL}}",
"priceCurrency": "USD",
"price": "{{PRICE_STOMP}}",
"priceValidUntil": "2027-12-31",
"availability": "https://schema.org/InStock",
"seller": { "@id": "https://www.troutpsychology.com/#organization" }
}
},
{
"@type": "Course",
"@id": "https://www.troutpsychology.com/streamer-stomp#course",
"name": "Streamer Stomp",
"url": "{{STOMP_URL}}",
"description": "A dedicated streamer fishing curriculum. Students learn to treat the predatory strike as a behavior with identifiable antecedents, then to arrange presentation, retrieve, and position so that the behavior is more likely to occur.",
"provider": {
"@id": "https://www.troutpsychology.com/#organization"
},
"isPartOf": {
"@id": "https://www.troutpsychology.com/#method"
},
"inLanguage": "en-US",
"educationalLevel": "Intermediate to Advanced",
"isAccessibleForFree": false,
"teaches": [
"Predatory trout behavior and what triggers a chase",
"Streamer selection, size, and profile",
"Sink tips, sinking lines, and depth control",
"Retrieve cadence and the strip-pause decision",
"Casting heavy flies and sink tips safely and accurately",
"Reading structure and identifying ambush lies",
"Boat positioning and bank coverage from a raft"
],
"audience": {
"@type": "EducationalAudience",
"educationalRole": "student",
"audienceType": "Anglers with basic casting competence who want to fish streamers effectively"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"@id": "https://www.troutpsychology.com/streamer-stomp#instance-next",
"name": "Streamer Stomp",
"courseMode": "onsite",
"courseWorkload": "{{STOMP_DURATION}}",
"startDate": "{{STOMP_START}}",
"maximumAttendeeCapacity": "{{STOMP_CAPACITY}}",
"location": {
"@type": "Place",
"name": "Yakima River, Washington",
"address": {
"@type": "PostalAddress",
"addressLocality": "Cle Elum",
"addressRegion": "WA",
"addressCountry": "US"
}
},
"instructor": {
"@id": "https://www.troutpsychology.com/#kristen-bufe"
},
"offers": {
"@id": "https://www.troutpsychology.com/streamer-stomp#offer"
}
}
}
]
}
</script>
Squarespace generates its own gift-card product page and handles that markup natively. Do not add custom Product schema for gift certificates — it will conflict with Squarespace's own output and produce duplicate-entity warnings. The gift certificate is already represented in the hasOfferCatalog in §1 only insofar as it is a Squarespace commerce item; leave the rest to the platform.
This is a stub. The questions below are structurally correct and ready to extend, but every answer must be reviewed by Kristen before publishing. Google's FAQ guidelines require that the schema answer matches the visible on-page answer exactly. Publishing FAQ schema for content that is not visible on the page is a guidelines violation.
Honest note on FAQ rich results: Google restricted FAQ rich snippets in 2023 to well-known government and health sites. A fly fishing business will almost certainly not get FAQ star-style rich results in Google Search. So why do it? Because FAQPage markup is still parsed for AI answer engines (ChatGPT, Perplexity, Google AI Overviews), it still feeds the Knowledge Graph, and it is the cheapest available way to make the Method's core claims machine-readable in Q&A form. That is the actual value here, and it aligns exactly with the authority goal. Do not sell it to the client as "we'll get FAQ boxes in Google" — sell it as AI-answer visibility.
<!--
══════════════════════════════════════════════════════════════════════
FAQ PAGE — STUB (expand and verify before publishing)
══════════════════════════════════════════════════════════════════════
PASTE INTO: The FAQ page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
FILL IN BEFORE PASTING:
{{FAQ_PAGE_URL}} Full URL of the FAQ page.
CRITICAL RULES:
1. EVERY question and answer below must ALSO appear as visible text on
the page. Schema-only FAQ content violates Google's guidelines.
2. Answers must be COMPLETE. Never write "click here to learn more".
3. Answers marked {{ANSWER — CONFIRM}} contain placeholder text that is
an educated inference, NOT a client-confirmed fact. Kristen must
rewrite each in her own words before this goes live.
4. The first four answers are drawn directly from the client profile and
are safe. Everything after that needs confirmation.
ALTERNATIVE IMPLEMENTATION: if the FAQ page uses Squarespace accordion
blocks, you may instead add microdata attributes to the accordion markup
via a Code Block. JSON-LD is simpler on Squarespace and is what is
recommended here — Squarespace's accordion DOM changes between template
updates, which breaks microdata silently.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "{{FAQ_PAGE_URL}}#faqpage",
"url": "{{FAQ_PAGE_URL}}",
"inLanguage": "en-US",
"publisher": {
"@id": "https://www.troutpsychology.com/#organization"
},
"about": {
"@id": "https://www.troutpsychology.com/#method"
},
"mainEntity": [
{
"@type": "Question",
"name": "What is the Trout Psychology Method?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The Trout Psychology Method applies behavior analysis to both the angler and the trout. Trout are organisms that follow the same laws of learning, which means their behavior is shaped by their environment and can be predicted from observable conditions rather than guessed at. On the teaching side, complex angling skills are decomposed into components through task analysis, taught with positive reinforcement, and chained progressively to mastery. Students learn the reasoning behind each decision, not just the mechanics, so they can build their own strategy on unfamiliar water."
}
},
{
"@type": "Question",
"name": "Is Trout Psychology a mental health practice?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No. Trout Psychology is a fly fishing education and guiding company based in Cle Elum, Washington. The name refers to applying behavioral science to trout behavior and to how anglers learn. Founder Kristen Bufe holds a B.S. in Behavior Analysis and uses that training to teach fly fishing; she is not a practising psychologist or therapist and Trout Psychology does not provide mental health treatment or counseling services."
}
},
{
"@type": "Question",
"name": "What qualifies Kristen Bufe to teach fly fishing this way?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Kristen Bufe holds a B.S. in Behavior Analysis, has 25 years of angling experience, and has spent 20 years teaching on the water. She also spent roughly a decade teaching students on the autism spectrum, which is where the instructional mechanics of the Method come from: breaking complex skills into components, reinforcing each one, and chaining them together. She specialises in streamer fishing and guides the Yakima River from a raft."
}
},
{
"@type": "Question",
"name": "How many students are in a lesson?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Instruction is capped at a maximum of three students per instructor. Guided trips are private for one to two anglers, with a shared option for solo anglers who are willing to split a boat with another angler. The ratio is deliberate: at more than three students per instructor, individual feedback stops being possible and students end up watching instead of learning."
}
},
{
"@type": "Question",
"name": "Do I need my own gear, or is equipment provided?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. State exactly what is provided (rods, reels, lines, flies, waders, boots), what students should bring, and whether a Washington fishing licence is required and who is responsible for obtaining it.}}"
}
},
{
"@type": "Question",
"name": "Do I need any experience to book a trip or a lesson?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. The profile indicates instruction is built for all levels including complete beginners, but the specific wording should be hers.}}"
}
},
{
"@type": "Question",
"name": "How do the virtual casting lessons work?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. Should state: the subscription is 250 US dollars per month, how students submit video, how quickly feedback is returned, how many submissions or sessions are included per month, and that the subscription can be cancelled at any time (confirm the actual cancellation terms).}}"
}
},
{
"@type": "Question",
"name": "What is the best time of year to fish the Yakima River?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. This is a high-value informational query for the non-brand authority track. It should be answered in real detail, month by month, and is a strong candidate to expand into a full blog post.}}"
}
},
{
"@type": "Question",
"name": "Where do you fish, and do you travel outside Washington?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. The profile states the Yakima River is the primary water and that the Method is taught as transferable to worldwide fisheries. Clarify whether travel instruction is actually offered as a bookable service.}}"
}
},
{
"@type": "Question",
"name": "What is your cancellation and weather policy?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. Must state the real policy: notice period for a refund, what happens in high water, wildfire smoke, or extreme heat closures, and whether deposits are transferable.}}"
}
},
{
"@type": "Question",
"name": "Do you teach neurodivergent anglers?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. This is a genuine and underserved differentiator, and the profile confirms roughly a decade teaching students on the autism spectrum. The wording must be Kristen's, and it must not overclaim any clinical or therapeutic role.}}"
}
},
{
"@type": "Question",
"name": "Do you sell gift certificates?",
"acceptedAnswer": {
"@type": "Answer",
"text": "{{ANSWER — CONFIRM WITH KRISTEN. State the available denominations, what they can be applied to, and whether they expire.}}"
}
}
]
}
</script>
Squarespace 7.1 does not render breadcrumb navigation by default. There are two situations:
If the site has visible breadcrumb navigation: mark it up with JSON-LD matching the visible trail exactly.
If it does not: you may still publish BreadcrumbList reflecting the true URL hierarchy. Google accepts this and uses it to render the breadcrumb trail in search results in place of a raw URL, which improves click-through. It is one of the few genuinely low-effort, real-benefit items on this list.
<!--
══════════════════════════════════════════════════════════════════════
BREADCRUMBLIST — TEMPLATE (one per page, not site-wide)
══════════════════════════════════════════════════════════════════════
PASTE INTO: Each individual page →
Page gear icon ⚙ → Settings → Advanced
→ PAGE HEADER CODE INJECTION
⚠️ DO NOT paste this into the site-wide Code Injection header. Every page
needs its OWN breadcrumb trail. A single site-wide breadcrumb would claim
every page sits at the same position in the hierarchy, which is false and
will be flagged.
⚠️ DO NOT add a BreadcrumbList to the homepage. The homepage is position 1
of every other page's trail; it has no trail of its own.
HOW TO USE:
1. Copy this block onto the target page.
2. Position 1 is ALWAYS the homepage. Never change it.
3. Replace the position 2 (and if needed position 3) name and item with
the real page name and its REAL URL.
4. The "name" must match the visible page heading or nav label.
5. The final item's "item" URL must equal the page's own canonical URL.
The example below is filled in for the Virtual Casting Lessons page as a
worked reference. Adapt per page using the table beneath this block.
-->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"@id": "https://www.troutpsychology.com/virtual-casting-lessons#breadcrumb",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://www.troutpsychology.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Learn",
"item": "https://www.troutpsychology.com/learn"
},
{
"@type": "ListItem",
"position": 3,
"name": "Virtual Casting Lessons",
"item": "https://www.troutpsychology.com/virtual-casting-lessons"
}
]
}
</script>
Adapt the block above per page. Every URL below is a placeholder until the real Squarespace slugs are confirmed — replace them with the actual live URLs before pasting.
| Page | Trail | Depth |
|---|---|---|
| The Method | Home → The Method | 2 |
| About / Team | Home → About | 2 |
| Guided Trips | Home → Guided Trips | 2 |
| Virtual Casting Lessons | Home → Learn → Virtual Casting Lessons | 3 |
| Private Education | Home → Learn → Private Education | 3 |
| Retreats | Home → Learn → Retreats | 3 |
| Casting Camp | Home → Learn → Casting Camp | 3 |
| Schools | Home → Learn → Schools | 3 |
| Streamer Stomp | Home → Learn → Streamer Stomp | 3 |
| FAQ | Home → FAQ | 2 |
| Gift Certificates | Home → Shop → Gift Certificates | 3 |
| Blog post (future) | Home → Blog → [Post Title] | 3 |
Only use a "Learn" intermediate level if a real
/learnpage exists. If the education products sit directly off the homepage, use a 2-level trail instead. A breadcrumb pointing at a URL that 404s is a hard error in the Rich Results Test, and it is the single most common breadcrumb mistake.
| Schema | Property | Status | Note |
|---|---|---|---|
| Organization | name |
✅ Present | |
url |
✅ Present | ||
logo |
⚠️ Placeholder | {{LOGO_URL}} — must be ≥112×112px |
|
sameAs |
⚠️ Partial | Instagram confirmed; YouTube URL and channel ownership need confirming | |
contactPoint |
✅ Present | Phone in E.164 (+12066595501) |
|
disambiguatingDescription |
✅ Present | Addresses the psychology-practice name collision | |
| SportsActivityLocation | name |
✅ Present | |
address |
⚠️ Partial by design | Locality/region/country only — no streetAddress, correctly |
|
telephone |
✅ Present | E.164 | |
areaServed |
✅ Present | 7 entries | |
serviceArea |
⚠️ Placeholder | Coordinates and radius need confirming | |
geo |
⛔ Omitted deliberately | Would falsely assert a physical location | |
openingHoursSpecification |
⛔ Omitted deliberately | No real hours to publish | |
priceRange |
✅ Present | $$$ |
|
| Person (Kristen) | name, jobTitle, description |
✅ Present | |
hasCredential |
⚠️ Placeholder | B.S. present; {{UNIVERSITY_NAME}} needs confirming |
|
image |
⚠️ Placeholder | ||
knowsAbout |
✅ Present | 13 entries | |
sameAs |
⚠️ Needs confirming | Personal IG account — confirm she wants it linked | |
subjectOf |
⚠️ Placeholder URLs | Fly Fish Journal + podcast URLs needed | |
| Person (Nate) | name, jobTitle, description |
✅ Present | |
image, sameAs |
⚠️ Placeholder | Delete sameAs if no public profile |
|
| Course (all 7) | name |
✅ Present | |
description |
✅ Present | ||
provider |
✅ Present | ||
hasCourseInstance |
✅ Present | Required for Google Course rich results | |
courseMode |
✅ Present | ||
courseWorkload |
⚠️ Placeholder on 3 | Camp, Schools, Streamer Stomp durations unconfirmed | |
offers |
⚠️ Placeholder | All prices need confirming | |
teaches |
✅ Present | ||
| Service (all 7) | name, serviceType, provider, areaServed |
✅ Present | |
offers / hasOfferCatalog |
⚠️ Placeholder | Prices unconfirmed | |
| FAQPage | mainEntity |
⚠️ Stub | 4 answers complete and safe; 8 need Kristen's wording |
| BreadcrumbList | itemListElement |
⚠️ Template | URLs are placeholders until slugs confirmed |
Every <script type="application/ld+json"> block in this document was extracted and parsed with a strict JSON parser (python3 -c "import json; json.load(...)"). All 13 blocks parse cleanly. No trailing commas, no unmatched brackets, no comments inside JSON, no unescaped characters.
Re-validate after filling in placeholders. Substituting values is exactly when JSON breaks — a stray quote inside a description, or a price written as
$650instead of650, will invalidate a block. Re-run the Rich Results Test on every page after editing.
| Mistake | Result |
|---|---|
Price written as "$650" or "650.00 USD" |
Invalid — use digits only: "650" |
Currency symbol in priceCurrency |
Invalid — must be the ISO code "USD" |
Unescaped " inside a description |
Breaks the entire block silently |
Relative image URL (/s/logo.png) |
Ignored — must be absolute https:// |
Phone as 206-659-5501 |
Should be E.164: +12066595501 |
Date as 08/15/2027 |
Invalid — ISO 8601: 2027-08-15 |
Leaving {{PLACEHOLDER}} in place |
Publishes literal placeholder text as fact |
| Pasting a page block into the site-wide header | Publishes false claims on every page |
| Schema | Rich result | Realistic likelihood | Google documentation |
|---|---|---|---|
Organization |
Knowledge Panel, logo in results | Medium. Requires corroborating signals — consistent citations, GBP, Wikipedia/Wikidata presence. This markup is necessary but not sufficient. | Organization / Logo |
LocalBusiness / SportsActivityLocation |
Local business result | Low-Medium. Service-area business with no street address is structurally disadvantaged for local pack. Claiming and verifying GBP as a service-area business matters far more than this markup does. | Local Business |
Course |
Course carousel / Course info | Medium-High — the best rich result opportunity here. Requires hasCourseInstance with courseMode and courseWorkload, which every Course block above has. This is the strongest reason to prioritise the Method page. |
Course |
BreadcrumbList |
Breadcrumb trail in SERP | High. Reliable, low effort, and it works. | Breadcrumb |
FAQPage |
FAQ rich result | Very low in Google Search — restricted to government and health sites since 2023. Genuine value is AI answer engines and the Knowledge Graph. Set expectations accordingly. | FAQ |
Person |
No dedicated rich result | N/A for rich results. Real value is E-E-A-T signals and author-entity building. Do not measure it by rich results — measure it by whether Kristen's name starts resolving as an entity. | — |
Service |
No dedicated rich result | N/A. Value is entity clarity and AI answer-engine comprehension. | — |
The honest summary: of everything in this document, Course is the schema most likely to produce a visible search feature, and BreadcrumbList is the most likely to produce a reliable one. Everything else earns its place through entity-building and AI-answer visibility, which are exactly the goals of this engagement — but which do not show up as a screenshot-able win in month one. Say that clearly to the client.
Nothing in this document ships until this table is complete.
| # | Placeholder | Used in | Priority |
|---|---|---|---|
| 1 | {{LEGAL_NAME}} |
§1 | High — resolves the SCco. entity question |
| 2 | {{EMAIL}} |
§1 | High |
| 3 | {{FOUNDING_YEAR}} |
§1 | Medium — delete the property if unknown |
| 4 | {{LOGO_URL}} / {{LOGO_WIDTH}} / {{LOGO_HEIGHT}} |
§1 | High |
| 5 | {{HERO_IMAGE_URL}} |
§1 | Medium |
| 6 | {{YOUTUBE_CHANNEL_URL}} |
§1, §2 | High — confirm ownership |
| 7 | {{POSTAL_CODE}} |
§1 | Medium |
| 8 | {{LATITUDE}} / {{LONGITUDE}} / {{SERVICE_RADIUS_M}} |
§1 | Medium |
| 9 | {{ABOUT_PAGE_URL}} |
§2 | High |
| 10 | {{KRISTEN_PHOTO_URL}} / {{NATE_PHOTO_URL}} |
§2 | Medium |
| 11 | {{UNIVERSITY_NAME}} |
§2 | High — strongest E-E-A-T signal |
| 12 | {{KRISTEN_INSTAGRAM}} / {{NATE_INSTAGRAM}} |
§2 | Medium |
| 13 | {{PODCAST_EPISODE_URL}} / {{FLY_FISH_JOURNAL_URL}} |
§2 | Medium — real earned-media citations |
| 14 | {{METHOD_PAGE_URL}} / {{METHOD_IMAGE_URL}} |
§3 | Critical — the page may not exist yet |
| 15 | All service page URLs and slugs | §4–§9, §11 | Critical |
| 16 | All prices | §4–§9 | High — omit rather than guess |
| 17 | {{BOOKING_URL}} |
§4 | High |
| 18 | Retreat / camp / stomp dates and capacities | §7–§9 | High |
| 19 | 8 FAQ answers marked {{ANSWER — CONFIRM}} |
§10 | High |
| 20 | Confirmed breadcrumb hierarchy | §11 | Medium |
| Step | Action | Blocker if skipped |
|---|---|---|
| 1 | Fix Settings → Website → Website Title to Trout Psychology |
Contradictory entity signals |
| 2 | HTTP 429 — *Verified not to affect Googlebot (Aug 27, 2026).* Confirm once via Search Console → Settings → Crawl stats; no longer a gating issue. | Not a dependency; one-time spot-check only |
| 3 | Collect every value in §14 from Kristen | Placeholders published as fact |
| 4 | Deploy §1 site-wide; validate the homepage | Nothing else resolves — all @id references point here |
| 5 | Deploy §2 on the About page; validate | |
| 6 | Build the Method page if it does not exist, then deploy §3 | The core authority asset has no home |
| 7 | Deploy §4–§9 on each service page; validate each | |
| 8 | Deploy §10 once Kristen has written the 8 outstanding answers | Guidelines violation if schema ≠ visible text |
| 9 | Deploy §11 per page with confirmed slugs | 404s in breadcrumb trails |
| 10 | Run every page through the Rich Results Test and validator.schema.org | |
| 11 | Add "re-validate structured data" to the quarterly SEO checklist | Silent breakage after template updates |
| 12 | Diarise retreat/camp/stomp date updates whenever a program is scheduled | Stale dated schema |
Squarespace-specific risk: Squarespace injects its own limited structured data on commerce and blog pages. After deploying, check the Rich Results Test for duplicate
OrganizationorProductentities. If duplicates appear, the fix is to keep our@id-based graph and let Squarespace's output stand alongside it — Google resolves by@id— but never add a secondOrganizationnode with a different@id. That is the one thing that genuinely confuses entity resolution.
Prepared for Trout Psychology — Phase 1 Foundation. Every {{PLACEHOLDER}} must be filled or the surrounding property deleted before deployment. All JSON validated as syntactically parseable at time of writing.
Where things go in Squarespace
1. Foundation — Organization + WebSite + SportsActivityLocation
Why there is no street address here
A note on disambiguatingDescription
openingHoursSpecification — deliberately omitted
2. People — Kristen Bufe and Nate Tamarack
3. The Trout Psychology Method — Course (the curriculum umbrella)
4. Guided Fly Fishing Trips — Service
5. Virtual Casting Lessons — Service + Course (subscription)
6. Private Education — Service + Course
7. Three-Day Immersive Retreats — Service + Course
8. Casting Camp — Service + Course
9. Schools and Streamer Stomp — Service + Course
Required and recommended properties by type
JSON syntax validation — performed
Common failure modes to avoid when filling in placeholders
13. Rich Result Eligibility — honest assessment