Initial commit — SEO Guidelines & SmartCrawl reference
SmartCrawl plugin reference (11 docs): - Overview, configuration, titles & meta, schema, sitemaps, social/OG, redirects, breadcrumbs, content analysis, hooks/filters, known issues SEO strategy playbook (6 docs): - Keyword research, per-page-type selection, on-page optimization, local SEO, technical SEO, content strategy Reusable templates (3): - Site audit checklist, keyword research worksheet, page optimization checklist Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
# Content Strategy
|
||||
|
||||
How to plan, prioritize, and organize content for maximum SEO impact.
|
||||
|
||||
## Topic Clusters and Pillar Pages
|
||||
|
||||
The modern approach to building topical authority.
|
||||
|
||||
### Structure
|
||||
|
||||
- **Pillar page:** A comprehensive page covering a broad topic. Targets a competitive short-tail keyword.
|
||||
- **Cluster pages:** 5-15 supporting pages each covering a subtopic in depth. Each targets a specific long-tail keyword.
|
||||
- **Internal links:** Every cluster page links to the pillar page and vice versa. Cluster pages also link to each other.
|
||||
|
||||
### Example: Motorcycle Safety School
|
||||
|
||||
**Pillar page:** "Complete Guide to Getting Your Motorcycle License in Alaska"
|
||||
- Targets: "motorcycle license Alaska"
|
||||
|
||||
**Cluster pages:**
|
||||
- "What to Expect at a Basic Rider Course" → links to pillar
|
||||
- "Motorcycle Gear Checklist for Beginners" → links to pillar
|
||||
- "Alaska Motorcycle Laws and Requirements" → links to pillar
|
||||
- "How to Choose the Right Motorcycle Safety Course" → links to pillar
|
||||
- "MSF Certification: What It Means and Why It Matters" → links to pillar
|
||||
- "Riding in Alaska: Weather, Roads, and Safety Tips" → links to pillar
|
||||
|
||||
**Why this works:** Google sees concentrated topical authority. The pillar page gets authority from all cluster pages. Cluster pages get authority from the pillar. The whole cluster ranks better than isolated pages would.
|
||||
|
||||
## Content Gap Analysis
|
||||
|
||||
Find topics competitors cover that you don't.
|
||||
|
||||
### Process
|
||||
|
||||
1. Search your primary keywords and study the top 5 results
|
||||
2. List every subtopic, question, and section they cover
|
||||
3. Compare against your own content
|
||||
4. Prioritize gaps by: search intent match → search volume → difficulty
|
||||
|
||||
### Format Gaps
|
||||
|
||||
If competitors only have text and you create a video, infographic, or interactive tool — you can rank with a differentiated asset.
|
||||
|
||||
## Seasonal Keyword Opportunities
|
||||
|
||||
### Plan Ahead
|
||||
|
||||
Create seasonal content **2-3 months before peak** to give Google time to index and rank it.
|
||||
|
||||
| Business Type | Peak Season | Content Should Be Live By |
|
||||
|--------------|-------------|--------------------------|
|
||||
| Motorcycle training (Alaska) | Spring (March-May) | January-February |
|
||||
| Event-based businesses | Season start | 2-3 months ahead |
|
||||
| Portfolio/hiring | Q4 (hiring season) | September-October |
|
||||
| General services | January (new year planning) | November-December |
|
||||
|
||||
### Seasonal Content Types
|
||||
|
||||
- "[Season] [Year] [Service] Schedule" pages
|
||||
- Seasonal preparation guides
|
||||
- Event announcements and previews
|
||||
- Year-in-review or seasonal recap posts
|
||||
|
||||
### Reuse Strategy
|
||||
|
||||
Don't create new seasonal URLs each year. Update the same page:
|
||||
- `/spring-motorcycle-courses/` (update content annually)
|
||||
- NOT `/spring-2026-motorcycle-courses/` (dead URL next year)
|
||||
|
||||
## Prioritization Framework
|
||||
|
||||
### Tier 1 — Immediate (Highest ROI)
|
||||
|
||||
| Action | Why |
|
||||
|--------|-----|
|
||||
| Pages ranking positions 5-20 | "Striking distance" — small improvements = big gains |
|
||||
| Service pages with transactional intent | Closest to revenue |
|
||||
| Pages with high impressions but low CTR | Fix title/description for quick win |
|
||||
|
||||
### Tier 2 — Soon
|
||||
|
||||
| Action | Why |
|
||||
|--------|-----|
|
||||
| Homepage optimization | Highest-authority page |
|
||||
| Core location pages | Foundation for local SEO |
|
||||
| Top blog posts that could rank higher | Already have some authority |
|
||||
|
||||
### Tier 3 — Ongoing
|
||||
|
||||
| Action | Why |
|
||||
|--------|-----|
|
||||
| New blog content (topic clusters) | Builds topical authority over time |
|
||||
| Portfolio/case study pages | Supports E-E-A-T |
|
||||
| About/contact optimization | Supports local SEO |
|
||||
| Content for identified gaps | Fills missing coverage |
|
||||
|
||||
### Golden Rule
|
||||
|
||||
**Optimize existing content before creating new content.** A page that already exists with some authority responds to improvements faster than a brand new page.
|
||||
|
||||
## Content Quality Standards
|
||||
|
||||
### Every Published Page Should Have
|
||||
|
||||
- [ ] One primary keyword targeted
|
||||
- [ ] Clear search intent match
|
||||
- [ ] Title tag optimized (50-60 chars, keyword near start)
|
||||
- [ ] Meta description hand-crafted (150-160 chars)
|
||||
- [ ] H1 with primary keyword
|
||||
- [ ] Structured subheadings (H2/H3)
|
||||
- [ ] Internal links to/from related pages
|
||||
- [ ] At least one image with descriptive alt text
|
||||
- [ ] Clear CTA (for commercial/transactional pages)
|
||||
- [ ] SmartCrawl focus keyword set and analysis reviewed
|
||||
|
||||
### Content Types and Minimum Quality
|
||||
|
||||
| Type | Minimum Length | Key Elements |
|
||||
|------|---------------|-------------|
|
||||
| Service page | 500+ words | Pricing/CTA, features, FAQ, testimonials |
|
||||
| Blog post | 800+ words | Answer the query thoroughly, internal links |
|
||||
| Pillar page | 2,000+ words | Comprehensive coverage, links to all clusters |
|
||||
| Location page | 500+ words | Unique local content, NAP, map |
|
||||
| Portfolio piece | 300+ words | Project summary, skills, outcomes |
|
||||
|
||||
**Length is a guideline, not a rule.** A 400-word service page that perfectly answers the query will outrank a 2,000-word page that buries the answer.
|
||||
|
||||
## Content Calendar
|
||||
|
||||
### Monthly Rhythm
|
||||
|
||||
| Week | Activity |
|
||||
|------|----------|
|
||||
| Week 1 | Publish 1 new blog post (from topic cluster plan) |
|
||||
| Week 2 | Optimize 2 existing pages (striking distance keywords) |
|
||||
| Week 3 | Publish 1 new blog post or update an old one |
|
||||
| Week 4 | Review Search Console data, plan next month |
|
||||
|
||||
### Quarterly Activities
|
||||
|
||||
- Review and update all service page content
|
||||
- Audit internal links (find orphan pages, fix broken links)
|
||||
- Check keyword rankings and adjust strategy
|
||||
- Update seasonal content
|
||||
|
||||
This cadence is sustainable for small business sites and compounds over time.
|
||||
@@ -0,0 +1,149 @@
|
||||
# Keyword Research
|
||||
|
||||
How to find the right keywords for any site, with an emphasis on free tools and methods applicable to small business WordPress sites.
|
||||
|
||||
## Fundamentals
|
||||
|
||||
### Primary vs Secondary Keywords
|
||||
|
||||
**Primary keyword:** The single most important search term a page should rank for. Every page gets exactly one. It should appear in the title tag, H1, URL slug, and first 100 words.
|
||||
|
||||
**Secondary keywords:** 3-5 closely related terms or synonyms that support the primary keyword. These go in H2/H3 headings, body content, and image alt text.
|
||||
|
||||
Google's NLP (BERT, MUM) understands synonyms and related concepts, so exact-match repetition is unnecessary — semantic relevance matters more.
|
||||
|
||||
**Example for a motorcycle safety course in Alaska:**
|
||||
- Primary: "motorcycle safety course Anchorage"
|
||||
- Secondary: "MSF basic rider course Alaska", "learn to ride motorcycle Anchorage", "motorcycle license training Alaska", "beginner motorcycle class near me"
|
||||
|
||||
### Long-Tail vs Short-Tail
|
||||
|
||||
| Aspect | Short-tail (1-2 words) | Long-tail (3+ words) |
|
||||
|--------|----------------------|---------------------|
|
||||
| Example | "motorcycle course" | "weekend motorcycle safety course Anchorage AK" |
|
||||
| Search volume | High | Low |
|
||||
| Competition | Very high | Low to moderate |
|
||||
| Conversion rate | Low (vague intent) | High (specific intent) |
|
||||
| Best for | Brand awareness, pillar pages | Service pages, blog posts, local pages |
|
||||
|
||||
**For small business sites, long-tail keywords are the priority.** You won't outrank national brands for "motorcycle course" but you can rank #1 for "motorcycle safety course Anchorage Alaska."
|
||||
|
||||
### Search Intent Types
|
||||
|
||||
Google categorizes every query by intent. **Matching intent is more important than keyword density or backlinks for ranking.**
|
||||
|
||||
| Intent | Signals | Content Type | Example |
|
||||
|--------|---------|-------------|---------|
|
||||
| **Informational** | "how to", "what is", "guide", questions | Blog posts, guides, FAQs | "how to prepare for a motorcycle safety course" |
|
||||
| **Navigational** | Brand names, specific products | Homepage, branded pages | "Alaska Safe Riders" |
|
||||
| **Commercial** | "best", "vs", "review", "top" | Comparison pages, service pages | "best motorcycle training courses in Alaska" |
|
||||
| **Transactional** | "buy", "register", "near me", "price" | Service pages, registration, contact | "register motorcycle safety course Anchorage" |
|
||||
|
||||
**Check the current SERP for your target keyword** to see what Google considers the correct intent. If the top results are all blog posts, Google expects informational content — don't try to rank a service page there.
|
||||
|
||||
### Keyword Difficulty vs Search Volume
|
||||
|
||||
For small/local business sites, **ignore high-difficulty keywords at first.**
|
||||
|
||||
| Combination | Strategy |
|
||||
|-------------|----------|
|
||||
| Low difficulty + moderate volume | **Best opportunities — quick wins** |
|
||||
| Low difficulty + low volume | Still valuable if commercial/transactional intent |
|
||||
| High difficulty + high volume | Long-term goals only |
|
||||
| High difficulty + low volume | Skip entirely |
|
||||
|
||||
**Quick difficulty check without paid tools:** Search your target keyword. If page 1 is dominated by Wikipedia, major publications, and government sites — too competitive. If you see other small businesses, local directories, and niche sites — achievable.
|
||||
|
||||
## Free Research Tools
|
||||
|
||||
### 1. Google Search Console (Your Best Tool)
|
||||
|
||||
Shows exactly what queries people use to find (or almost find) your site.
|
||||
|
||||
**Quick wins from Search Console:**
|
||||
|
||||
- **Performance > Queries > Sort by impressions:** See what Google shows your site for. High impressions + low clicks = fix your title/description or create dedicated content.
|
||||
- **Position 8-20 keywords ("striking distance"):** These are queries where you're on page 1-2 but not top 5. A small content improvement or better title tag can push these up.
|
||||
- **Pages report:** See which pages rank for which queries. If one page ranks for many unrelated queries, split content into separate focused pages.
|
||||
- **Filter by query containing your location:** Find local search opportunities.
|
||||
|
||||
### 2. Google Autocomplete / People Also Ask / Related Searches
|
||||
|
||||
Free and directly reflects what people search for.
|
||||
|
||||
- **Autocomplete:** Type your service in Google and note every suggestion. Use the "alphabet soup" method: type `[service] a`, `[service] b`, etc.
|
||||
- **People Also Ask (PAA):** Click on PAA questions to expand — Google loads more each time. Each question is a potential blog post or FAQ entry.
|
||||
- **Related Searches:** At the bottom of the SERP. Semantically related queries Google considers relevant.
|
||||
|
||||
**Use incognito mode** and set location to your target area for accurate local results.
|
||||
|
||||
### 3. Google Trends
|
||||
|
||||
- **Compare seasonal patterns:** When do people search for your services most?
|
||||
- **Compare keyword variations:** "motorcycle safety course" vs "motorcycle riding course" vs "motorcycle training"
|
||||
- **Filter by region:** National trends may not match Alaska or Nashville patterns
|
||||
- **Rising queries:** Terms growing in popularity — early opportunities
|
||||
|
||||
### 4. Free Tool Tiers
|
||||
|
||||
| Tool | Free Limit | Best For |
|
||||
|------|-----------|----------|
|
||||
| **Google Keyword Planner** | Unlimited (with Google Ads account) | Volume ranges, related keywords |
|
||||
| **Ubersuggest** | 3 searches/day | Volume, difficulty, suggestions |
|
||||
| **AnswerThePublic** | 3 searches/day | Questions people ask about a topic |
|
||||
| **Keyword Surfer** (Chrome ext.) | Unlimited | Volume in Google search results |
|
||||
| **AlsoAsked.com** | 3 searches/day | PAA data visualization |
|
||||
| **Ahrefs Webmaster Tools** | Unlimited (site owner) | What you currently rank for |
|
||||
|
||||
### 5. Competitor Analysis (No Paid Tools)
|
||||
|
||||
- **Search your target keywords** and study who ranks on page 1:
|
||||
- Their title tags and meta descriptions
|
||||
- Content structure and length
|
||||
- Header tags (view source)
|
||||
- What topics they cover that you don't
|
||||
- **Check competitor sitemaps:** `competitor.com/sitemap.xml` reveals their full content strategy
|
||||
- **Google `site:competitor.com [your service]`** to see their pages targeting similar keywords
|
||||
- **Ahrefs Free Backlink Checker:** Shows top backlinks for any URL
|
||||
|
||||
## The Keyword Matrix
|
||||
|
||||
For local businesses, create a grid:
|
||||
|
||||
| | Anchorage | Fairbanks | Wasilla | Eagle River |
|
||||
|---|-----------|-----------|---------|-------------|
|
||||
| motorcycle course | Target | Target | Assess | Assess |
|
||||
| rider training | Target | Assess | -- | -- |
|
||||
| motorcycle license | Target | Target | Assess | -- |
|
||||
|
||||
Each intersection with "Target" gets its own page or section. "Assess" means check volume before investing.
|
||||
|
||||
## Research Process
|
||||
|
||||
### Step 1: Seed Keywords
|
||||
|
||||
List everything you think your customers might search for. Include:
|
||||
- Service names
|
||||
- Problem descriptions ("how to get motorcycle license")
|
||||
- Location variations
|
||||
- Competitor brand names (for comparison content)
|
||||
|
||||
### Step 2: Expand with Tools
|
||||
|
||||
Run seed keywords through Google Autocomplete, PAA, Keyword Planner, and Ubersuggest. Note every relevant variation.
|
||||
|
||||
### Step 3: Classify by Intent
|
||||
|
||||
Tag each keyword as informational, navigational, commercial, or transactional.
|
||||
|
||||
### Step 4: Assess Difficulty
|
||||
|
||||
For each keyword, quick-check the SERP. Can you realistically compete?
|
||||
|
||||
### Step 5: Prioritize
|
||||
|
||||
Use the [Keyword Research Template](../templates/keyword-research-template.md) to organize and prioritize.
|
||||
|
||||
### Step 6: Map to Pages
|
||||
|
||||
Assign one primary keyword to each existing page. Create new pages for keywords that don't have a natural home.
|
||||
@@ -0,0 +1,132 @@
|
||||
# Keyword Selection by Page Type
|
||||
|
||||
Every page on the site should target one primary keyword with a clear intent match. This guide covers how to choose keywords for each common page type.
|
||||
|
||||
## Homepage
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | Core service + primary location |
|
||||
| **Intent** | Navigational + commercial |
|
||||
| **Title pattern** | `[Brand Name] \| [Primary Service] in [Location]` |
|
||||
| **Example** | "Alaska Safe Riders \| Motorcycle Safety Courses in Anchorage, AK" |
|
||||
|
||||
**Rules:**
|
||||
- Establish what you do, where, and why you're the best choice
|
||||
- Don't try to rank for everything — let inner pages handle specifics
|
||||
- Don't keyword-stuff the homepage
|
||||
|
||||
## Service / Product Pages
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | Specific service + location |
|
||||
| **Intent** | Commercial or transactional |
|
||||
| **Title pattern** | `[Service Name] in [City, State] \| [Brand]` |
|
||||
| **Example** | "Basic Rider Course in Anchorage, AK \| Alaska Safe Riders" |
|
||||
|
||||
**Rules:**
|
||||
- **Each distinct service gets its own page** — "Basic Rider Course" and "Advanced Rider Course" should be separate pages
|
||||
- Include pricing (or "contact for pricing"), what's included, duration, schedule, FAQs, testimonials
|
||||
- Clear CTA (register, contact, sign up)
|
||||
- Answer the questions a buyer would have before purchasing
|
||||
|
||||
## Blog Posts
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | Informational long-tail query |
|
||||
| **Intent** | Informational |
|
||||
| **Title pattern** | `[Question/Topic] — [Brand or Category]` |
|
||||
| **Example** | "What to Wear to a Motorcycle Safety Course \| Alaska Safe Riders" |
|
||||
|
||||
**Rules:**
|
||||
- Each post targets one specific question or topic
|
||||
- Use Google's "People Also Ask" to find questions your audience searches
|
||||
- **Internal link every blog post to relevant service pages** — this is the primary SEO purpose of blog content
|
||||
- One blog post per topic — don't split thin content across multiple posts
|
||||
|
||||
## Portfolio Pages
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | Descriptive + role-based |
|
||||
| **Intent** | Navigational or commercial investigation |
|
||||
| **Title pattern** | `[Project Name] — [Role/Skill] Portfolio \| [Brand]` |
|
||||
| **Example** | "IDT 5210 Capstone — Instructional Design Portfolio \| Chelsea Paige Mann" |
|
||||
|
||||
**Rules:**
|
||||
- Each portfolio piece: descriptive title, project summary with natural keywords, skills/tools, outcomes
|
||||
- Alt text on portfolio images should describe the work shown, not just "screenshot"
|
||||
- Link to related pieces and back to the portfolio index
|
||||
|
||||
## Contact Page
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | "contact [brand]" or "[service] [location] contact" |
|
||||
| **Intent** | Navigational / transactional |
|
||||
| **Title pattern** | `Contact [Brand] \| [Location]` |
|
||||
| **Example** | "Contact Alaska Safe Riders \| Anchorage, AK" |
|
||||
|
||||
**Rules:**
|
||||
- Include full NAP (Name, Address, Phone)
|
||||
- Embedded Google Map
|
||||
- Contact form
|
||||
- Business hours
|
||||
- These signals support local SEO even if the page itself doesn't rank for much
|
||||
|
||||
## About Page
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | "[brand name] [location]" or "about [brand name]" |
|
||||
| **Intent** | Navigational |
|
||||
| **Title pattern** | `About [Brand] — [Qualifier] \| [Location]` |
|
||||
| **Example** | "About Alaska Safe Riders — MSF-Certified Training Since 2015" |
|
||||
|
||||
**Rules:**
|
||||
- Credentials, experience, team info, location details
|
||||
- Supports E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness)
|
||||
- Natural keyword use (don't force it)
|
||||
- Link to service pages and Google Business Profile
|
||||
|
||||
## Landing Pages
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | Highly specific transactional term |
|
||||
| **Intent** | Transactional |
|
||||
| **Title pattern** | `[Specific Offer] in [Location] \| [Brand]` |
|
||||
| **Example** | "Spring 2026 Motorcycle Course — Register Now \| Alaska Safe Riders" |
|
||||
|
||||
**Rules:**
|
||||
- Minimal navigation, singular CTA
|
||||
- Everything on the page drives toward one action
|
||||
- Seasonal landing pages capture time-specific traffic
|
||||
- Can noindex after the season ends, then republish/update for the next cycle
|
||||
|
||||
## Location Pages (Multi-Location Businesses)
|
||||
|
||||
| Aspect | Guidance |
|
||||
|--------|---------|
|
||||
| **Primary keyword** | `[service] in [specific location]` |
|
||||
| **Intent** | Commercial / transactional |
|
||||
| **Title pattern** | `[Service] in [City] \| [Brand]` |
|
||||
| **Example** | "Motorcycle Courses in Fairbanks, AK \| Alaska Safe Riders" |
|
||||
|
||||
**Rules:**
|
||||
- **Each location page needs genuinely unique content** — local landmarks, directions, area-specific details, local testimonials
|
||||
- **Do NOT create thin location pages** that only swap city names — Google penalizes doorway pages
|
||||
- Only create if you have enough real content to differentiate each page
|
||||
|
||||
## Common Mistakes
|
||||
|
||||
| Mistake | Fix |
|
||||
|---------|-----|
|
||||
| Same keyword on multiple pages | One primary keyword per page. If two pages target the same term, merge them. |
|
||||
| Homepage targeting specific long-tail | Let inner pages handle specifics. Homepage = broad brand + service + location. |
|
||||
| Blog posts with no internal links to services | Every blog post should link to at least one relevant service page. |
|
||||
| Service pages with no CTA | Every service page needs a clear next step (register, contact, buy). |
|
||||
| Portfolio pages with no keywords | Add descriptive titles and summaries with natural keyword use. |
|
||||
| Contact page with just a form | Add NAP, map, hours, and service area for local SEO signals. |
|
||||
@@ -0,0 +1,201 @@
|
||||
# Local SEO
|
||||
|
||||
For small businesses with physical locations or defined service areas, local SEO often has the highest ROI of any optimization effort. This is critical for Alaska, Nashville, and other location-specific client sites.
|
||||
|
||||
## Google Business Profile (GBP)
|
||||
|
||||
The single most important local ranking factor.
|
||||
|
||||
### Setup Checklist
|
||||
|
||||
- [ ] **Business name:** Exact legal name (no keyword stuffing)
|
||||
- [ ] **Address:** Full street address (or service area if no storefront)
|
||||
- [ ] **Phone:** Local number (not toll-free if possible)
|
||||
- [ ] **Hours:** Complete and accurate, including holidays
|
||||
- [ ] **Website URL:** Link to homepage
|
||||
- [ ] **Business description:** 750 characters max, include primary keywords naturally
|
||||
- [ ] **Primary category:** Choose carefully — strongest ranking signal
|
||||
- [ ] **Secondary categories:** Add all that apply (less weight but still help)
|
||||
- [ ] **Services/Products:** List all offerings with descriptions
|
||||
- [ ] **Attributes:** Check all applicable attributes (wheelchair accessible, etc.)
|
||||
- [ ] **Photos:** Add 10+ photos at setup, then monthly updates
|
||||
|
||||
### Ongoing GBP Activities
|
||||
|
||||
| Activity | Frequency | Impact |
|
||||
|----------|-----------|--------|
|
||||
| Google Posts | Weekly | Shows activity, appears in knowledge panel |
|
||||
| Photos | Monthly | 100+ photos = 520% more calls (BrightLocal data) |
|
||||
| Review responses | Within 24-48 hours | Directly impacts ranking + trust |
|
||||
| Q&A | Seed with common questions | Prevents random/incorrect answers |
|
||||
| Hours updates | As needed | Especially holidays and seasonal changes |
|
||||
|
||||
### Getting Reviews
|
||||
|
||||
- Ask satisfied customers directly (in person or follow-up email)
|
||||
- Share a direct review link: `search.google.com/local/writereview?placeid=[YOUR_PLACE_ID]`
|
||||
- Respond to **every** review (positive and negative) professionally
|
||||
- Never buy or incentivize reviews — Google penalizes this
|
||||
|
||||
## NAP Consistency
|
||||
|
||||
**NAP = Name, Address, Phone number.** Must be identical everywhere.
|
||||
|
||||
### The Rule
|
||||
|
||||
Pick ONE format and use it everywhere:
|
||||
- "123 Main Street" vs "123 Main St." vs "123 Main St" — choose one
|
||||
- Include or exclude suite numbers consistently
|
||||
- Phone format: `(907) 555-0123` or `907-555-0123` — pick one
|
||||
|
||||
### Where NAP Must Appear
|
||||
|
||||
- Website (header, footer, contact page)
|
||||
- Google Business Profile
|
||||
- Yelp, Facebook, Instagram
|
||||
- Industry-specific directories
|
||||
- Chamber of Commerce, BBB
|
||||
- Apple Maps, Bing Places
|
||||
- Any citation or directory listing
|
||||
|
||||
### Auditing Citations
|
||||
|
||||
- Search your business name and manually check the top 20 results
|
||||
- Use Moz Local checker (free) for a broader scan
|
||||
- Fix inconsistencies immediately — they confuse Google
|
||||
|
||||
## Local Schema Markup
|
||||
|
||||
Add `LocalBusiness` schema to your website. See [Schema Markup](../smartcrawl/schema-markup.md) for SmartCrawl-specific implementation.
|
||||
|
||||
### Minimum Required
|
||||
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "LocalBusiness",
|
||||
"name": "Business Name",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": "123 Main St",
|
||||
"addressLocality": "Anchorage",
|
||||
"addressRegion": "AK",
|
||||
"postalCode": "99501",
|
||||
"addressCountry": "US"
|
||||
},
|
||||
"telephone": "+1-907-555-0123",
|
||||
"url": "https://example.com"
|
||||
}
|
||||
```
|
||||
|
||||
### Recommended Additional
|
||||
|
||||
- `openingHoursSpecification`
|
||||
- `geo` (latitude/longitude)
|
||||
- `areaServed`
|
||||
- `priceRange`
|
||||
- `image` (logo)
|
||||
- `sameAs` (social profiles, directory listings)
|
||||
|
||||
Choose the most specific `@type` subtype that applies (e.g., `EducationalOrganization`, `ProfessionalService`).
|
||||
|
||||
## Location-Based Keywords
|
||||
|
||||
### Keyword Patterns
|
||||
|
||||
| Pattern | Example |
|
||||
|---------|---------|
|
||||
| `[service] + [city]` | "motorcycle course Anchorage" |
|
||||
| `[service] + [state]` | "motorcycle safety training Alaska" |
|
||||
| `[service] + near me` | Handled by Google via GBP/location signals |
|
||||
| `[service] + [neighborhood]` | "riding lessons Eagle River" |
|
||||
| `[service] + [qualifier] + [location]` | "affordable motorcycle course Anchorage AK" |
|
||||
|
||||
### Keyword Matrix
|
||||
|
||||
List all services down one side and all locations across the top. Each intersection is a potential target:
|
||||
|
||||
| | Anchorage | Fairbanks | Wasilla |
|
||||
|---|-----------|-----------|---------|
|
||||
| Basic Rider Course | Primary | Secondary | Assess |
|
||||
| Advanced Course | Primary | -- | -- |
|
||||
| Safety Clinic | Primary | Secondary | -- |
|
||||
|
||||
### "Near Me" Optimization
|
||||
|
||||
You do **NOT** optimize for "near me" by putting "near me" on your page. Google determines "near me" results based on:
|
||||
- Searcher's physical location
|
||||
- Your GBP location
|
||||
- Local relevance signals (NAP, citations, reviews, local content)
|
||||
|
||||
**Optimize for `[service] + [city/state]` instead** — this covers both explicit geo-queries and implicit "near me" intent.
|
||||
|
||||
## Location Pages
|
||||
|
||||
### When to Create Them
|
||||
|
||||
Only if you have genuinely unique content for each location:
|
||||
- Local landmarks, directions
|
||||
- Area-specific service details
|
||||
- Local testimonials
|
||||
- Unique offerings per location
|
||||
|
||||
### When NOT to Create Them
|
||||
|
||||
**Do not create thin location pages** that only swap city names. Google penalizes doorway pages. A page that says the same thing as another page but with "Fairbanks" instead of "Anchorage" is a doorway page.
|
||||
|
||||
### Template for Good Location Pages
|
||||
|
||||
```
|
||||
# [Service] in [City], [State]
|
||||
|
||||
[2-3 paragraphs about the service specific to this location]
|
||||
|
||||
## What to Expect
|
||||
[Location-specific details]
|
||||
|
||||
## Getting Here
|
||||
[Directions, parking, landmarks]
|
||||
|
||||
## Local Testimonials
|
||||
[Reviews from customers in this area]
|
||||
|
||||
## Schedule & Pricing
|
||||
[Location-specific schedule if different]
|
||||
|
||||
[CTA to register/contact]
|
||||
```
|
||||
|
||||
## Local Content Ideas
|
||||
|
||||
Content that signals local relevance to Google:
|
||||
|
||||
- Event coverage (local events you participate in or sponsor)
|
||||
- Local partnerships and community involvement
|
||||
- Area guides related to your industry
|
||||
- Seasonal content specific to your region
|
||||
- Local news or industry updates
|
||||
- Customer success stories from the area
|
||||
|
||||
## Mobile Optimization
|
||||
|
||||
Most "near me" and local searches happen on mobile:
|
||||
|
||||
- Font size minimum 16px
|
||||
- Tap targets minimum 48x48px
|
||||
- Click-to-call phone numbers
|
||||
- Embedded Google Map on contact page
|
||||
- Fast load times (especially on mobile networks)
|
||||
|
||||
## Local SEO Checklist
|
||||
|
||||
- [ ] Google Business Profile fully completed and verified
|
||||
- [ ] NAP consistent across all platforms
|
||||
- [ ] LocalBusiness schema on website (validated)
|
||||
- [ ] Location keywords in title tags and meta descriptions of key pages
|
||||
- [ ] Contact page has full NAP + Google Map
|
||||
- [ ] Collecting and responding to reviews
|
||||
- [ ] Listed in relevant local directories
|
||||
- [ ] Mobile-friendly and fast-loading
|
||||
- [ ] Google Posts published weekly
|
||||
- [ ] Photos updated monthly on GBP
|
||||
@@ -0,0 +1,162 @@
|
||||
# On-Page Optimization
|
||||
|
||||
Current best practices (2025-2026) for optimizing individual pages. These apply regardless of the SEO plugin used.
|
||||
|
||||
## Title Tags
|
||||
|
||||
### Rules
|
||||
|
||||
- **Length:** 50-60 characters (Google truncates at ~580px pixel width)
|
||||
- **Primary keyword:** As close to the beginning as possible
|
||||
- **Unique:** Every page must have a unique title
|
||||
- **Brand name:** At the end (builds recognition)
|
||||
- **Don't stuff:** One primary keyword is enough
|
||||
|
||||
### CTR Optimization
|
||||
|
||||
Include value propositions, numbers, or power words:
|
||||
|
||||
| Weak | Strong |
|
||||
|------|--------|
|
||||
| `Home - My Website` | `Motorcycle Safety Courses Anchorage, AK \| Alaska Safe Riders` |
|
||||
| `Services` | `Basic Rider Course (MSF Certified) \| Alaska Safe Riders` |
|
||||
| `Blog Post Title` | `What to Expect at a Basic Rider Course (2026 Guide)` |
|
||||
|
||||
## Meta Descriptions
|
||||
|
||||
### Rules
|
||||
|
||||
- **Length:** 150-160 characters
|
||||
- **Include primary keyword** naturally (Google bolds matching terms)
|
||||
- **Include a CTA:** "Register today", "Learn more", "Contact us"
|
||||
- **Include differentiators:** Price, location, certifications
|
||||
- **Hand-craft** for important pages — auto-generated descriptions rarely perform well
|
||||
|
||||
### Example
|
||||
|
||||
> Learn to ride with Alaska's most experienced MSF-certified instructors. Weekend and weekday courses in Anchorage. Register online — classes fill fast.
|
||||
|
||||
**Note:** Google rewrites ~60% of meta descriptions, but well-written ones are kept and significantly improve CTR.
|
||||
|
||||
## Header Tags
|
||||
|
||||
### Hierarchy
|
||||
|
||||
- **H1:** Exactly one per page. Contains primary keyword. Closely matches the title tag.
|
||||
- **H2:** Major sections (3-8 per page). Use secondary keywords and related topics.
|
||||
- **H3:** Subsections under H2s. Use long-tail variations and questions.
|
||||
- **Never skip levels** (no H1 directly to H3)
|
||||
|
||||
### Headers are semantic, not visual
|
||||
|
||||
Using `<b>` or large font size is NOT the same as a proper `<h2>`. Headers tell search engines about content hierarchy.
|
||||
|
||||
## Content Optimization
|
||||
|
||||
### Keyword Density is Dead
|
||||
|
||||
Google's algorithms (BERT, MUM, Helpful Content System) understand topics, not word frequency. What replaces it:
|
||||
|
||||
**Topical coverage:** Cover the topic comprehensively. If writing about motorcycle safety courses, naturally mention gear requirements, licensing, MSF certification, course duration, prerequisites, etc.
|
||||
|
||||
**E-E-A-T signals:**
|
||||
- **Experience:** First-person accounts, original photos, real examples
|
||||
- **Expertise:** Deep knowledge, cite specifics, avoid filler
|
||||
- **Authoritativeness:** Author bios, credentials, industry affiliations
|
||||
- **Trustworthiness:** Accurate information, transparent business info
|
||||
|
||||
**Google's Helpful Content guidelines:**
|
||||
- Written for humans first, not search engines?
|
||||
- Demonstrates first-hand experience?
|
||||
- Reader will feel they learned enough to achieve their goal?
|
||||
|
||||
### Practical Rules
|
||||
|
||||
- Put the most important information first (inverted pyramid)
|
||||
- Short paragraphs (2-4 sentences)
|
||||
- Answer the searcher's question within the first 100-200 words
|
||||
- Use lists, tables, and structured formatting
|
||||
- Content should be as long as it needs to be — a focused 500-word service page can outrank a padded 3,000-word one
|
||||
|
||||
## Image Optimization
|
||||
|
||||
### Alt Text
|
||||
|
||||
- **Describe what the image shows** in plain language
|
||||
- **Include keywords naturally** where they genuinely describe the image
|
||||
- **Keep under 125 characters** (screen readers truncate longer)
|
||||
- **Decorative images** get empty alt (`alt=""`)
|
||||
|
||||
### File Names
|
||||
|
||||
`basic-rider-course-anchorage.jpg` beats `DSC00451.jpg`
|
||||
|
||||
### Technical
|
||||
|
||||
- Use WebP or AVIF format for smaller file sizes
|
||||
- Set explicit width and height attributes (prevents CLS)
|
||||
- Lazy load below-the-fold images
|
||||
- Compress to reasonable quality (80-85% is usually sufficient)
|
||||
|
||||
## Internal Linking
|
||||
|
||||
One of the most underused and highest-ROI SEO tactics.
|
||||
|
||||
### Rules
|
||||
|
||||
- **Every page should link to and be linked from 2-3+ other pages**
|
||||
- **Descriptive anchor text** — "our basic rider course" not "click here"
|
||||
- **Blog posts → service pages** (primary purpose of blog content for SEO)
|
||||
- **Service pages → related services** (keeps users on site)
|
||||
- **Fix orphan pages** — any page with zero internal links is nearly invisible to Google
|
||||
|
||||
### Site Structure
|
||||
|
||||
```
|
||||
Homepage
|
||||
├── Service Page 1
|
||||
│ ├── Blog Post A (links back to Service 1)
|
||||
│ └── Blog Post B (links back to Service 1)
|
||||
├── Service Page 2
|
||||
│ ├── Blog Post C
|
||||
│ └── Blog Post D
|
||||
├── About
|
||||
└── Contact
|
||||
```
|
||||
|
||||
This pyramid distributes authority downward from the homepage.
|
||||
|
||||
## URL Slugs
|
||||
|
||||
### Rules
|
||||
|
||||
- **Short and descriptive:** `/basic-rider-course/`
|
||||
- **Include primary keyword:** `/motorcycle-safety-course-anchorage/`
|
||||
- **Hyphens, not underscores:** Google treats hyphens as word separators
|
||||
- **Lowercase only**
|
||||
- **No dates in URLs** unless truly time-bound content
|
||||
- **Never change URLs without 301 redirects**
|
||||
|
||||
### Bad vs Good
|
||||
|
||||
| Bad | Good |
|
||||
|-----|------|
|
||||
| `/2026/04/09/blog-post/` | `/how-to-prepare-for-motorcycle-course/` |
|
||||
| `/services/` | `/motorcycle-safety-courses-anchorage/` |
|
||||
| `/page_about_us/` | `/about/` |
|
||||
|
||||
## Quick Optimization Checklist
|
||||
|
||||
For any page:
|
||||
|
||||
- [ ] Title tag: 50-60 chars, primary keyword near start, unique
|
||||
- [ ] Meta description: 150-160 chars, keyword included, CTA, hand-crafted
|
||||
- [ ] H1: Exactly one, contains primary keyword
|
||||
- [ ] H2/H3: Use secondary keywords in subheadings
|
||||
- [ ] Content: Answers the searcher's question in the first 200 words
|
||||
- [ ] Images: Descriptive alt text, optimized file size, descriptive file names
|
||||
- [ ] Internal links: 2-3+ links to/from related pages, descriptive anchors
|
||||
- [ ] URL: Short, keyword-included, lowercase, hyphens
|
||||
- [ ] Focus keyword set in SmartCrawl (up to 3)
|
||||
- [ ] SmartCrawl SEO analysis: all green or justified yellow
|
||||
- [ ] Readability: Flesch-Kincaid 60-70 target
|
||||
@@ -0,0 +1,194 @@
|
||||
# Technical SEO
|
||||
|
||||
Technical foundations that must be in place for any SEO effort to succeed. These affect how Google crawls, indexes, and ranks your site.
|
||||
|
||||
## Core Web Vitals
|
||||
|
||||
Google's page experience signals. Content relevance is still more important, but poor performance can hold you back.
|
||||
|
||||
### Metrics
|
||||
|
||||
| Metric | Target | What It Measures |
|
||||
|--------|--------|-----------------|
|
||||
| **LCP** (Largest Contentful Paint) | Under 2.5s | How fast the main content loads |
|
||||
| **INP** (Interaction to Next Paint) | Under 200ms | How responsive the page is to input |
|
||||
| **CLS** (Cumulative Layout Shift) | Under 0.1 | How much the layout shifts during load |
|
||||
|
||||
### How to Improve
|
||||
|
||||
**LCP:**
|
||||
- Optimize images (WebP/AVIF, proper sizing, lazy loading for below-fold)
|
||||
- Reduce server response time (caching, CDN)
|
||||
- Preload critical resources (fonts, hero images)
|
||||
- Minimize render-blocking CSS/JS
|
||||
|
||||
**INP:**
|
||||
- Minimize JavaScript execution time
|
||||
- Break up long tasks
|
||||
- Optimize event handlers
|
||||
- Defer non-critical JavaScript
|
||||
|
||||
**CLS:**
|
||||
- Set explicit width/height on images and embeds
|
||||
- Don't insert content above existing content dynamically
|
||||
- Use `font-display: swap` or preload web fonts
|
||||
- Reserve space for ads/embeds
|
||||
|
||||
### WordPress Specifics
|
||||
|
||||
- Use server-level caching (EA-Nginx proxy cache is already configured on our server)
|
||||
- Optimize images on upload (Smush or similar)
|
||||
- Minimize plugin count — each plugin adds overhead
|
||||
- Use Hummingbird or LiteSpeed Cache for asset optimization
|
||||
- Purge Nginx cache after changes: `rm -rf /var/cache/ea-nginx/proxy/<account>/*`
|
||||
|
||||
## Mobile-First Indexing
|
||||
|
||||
Google uses the **mobile version** of your site for indexing and ranking. There is no separate desktop index.
|
||||
|
||||
### Requirements
|
||||
|
||||
- [ ] All desktop content is also visible on mobile
|
||||
- [ ] Viewport meta tag present: `<meta name="viewport" content="width=device-width, initial-scale=1">`
|
||||
- [ ] Font size minimum 16px body text
|
||||
- [ ] Tap targets minimum 48x48px with 8px spacing
|
||||
- [ ] No horizontal scrolling
|
||||
- [ ] Content hidden in accordions/tabs is fine (as long as it's in the HTML)
|
||||
|
||||
### Testing
|
||||
|
||||
- Google's Mobile-Friendly Test
|
||||
- Search Console > Mobile Usability report
|
||||
- Chrome DevTools device emulator
|
||||
|
||||
## Crawlability and Indexability
|
||||
|
||||
### XML Sitemap
|
||||
|
||||
- Submit to Google Search Console
|
||||
- SmartCrawl generates this automatically
|
||||
- Verify at `yoursite.com/sitemap.xml`
|
||||
- Include all important pages, exclude thin/duplicate content
|
||||
|
||||
### Robots.txt
|
||||
|
||||
Recommended content:
|
||||
|
||||
```
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Disallow: /wp-admin/
|
||||
Allow: /wp-admin/admin-ajax.php
|
||||
|
||||
Sitemap: https://yoursite.com/sitemap.xml
|
||||
```
|
||||
|
||||
**Do NOT block CSS/JS files** — Google needs them for mobile-first rendering.
|
||||
|
||||
### Crawl Budget
|
||||
|
||||
For small sites (<500 pages), crawl budget is rarely an issue. For larger sites:
|
||||
- Don't waste budget on filter pages, parameter URLs, or thin pagination
|
||||
- Use `noindex` on pages with no SEO value
|
||||
- Keep the sitemap clean (only valuable URLs)
|
||||
|
||||
### Index Status
|
||||
|
||||
Check Search Console > Pages report for:
|
||||
|
||||
| Status | Meaning | Action |
|
||||
|--------|---------|--------|
|
||||
| Indexed | Page is in Google | Good |
|
||||
| Discovered — not indexed | Google knows about it but hasn't indexed it | Improve content quality, add internal links |
|
||||
| Crawled — not indexed | Google crawled it but chose not to index | Content isn't valuable enough — improve or noindex |
|
||||
| Excluded by noindex | You set noindex | Intentional? If not, fix it |
|
||||
|
||||
### What to Noindex
|
||||
|
||||
- Thank you / confirmation pages
|
||||
- Internal search results
|
||||
- Tag archives with thin content
|
||||
- Author archives on single-author sites
|
||||
- Admin/login pages
|
||||
- Paginated archives
|
||||
- Media attachment pages
|
||||
|
||||
## Canonical URLs
|
||||
|
||||
### Self-Referencing Canonicals
|
||||
|
||||
Every page should have: `<link rel="canonical" href="https://example.com/current-page/">`
|
||||
|
||||
SmartCrawl handles this automatically for most cases.
|
||||
|
||||
### Choose One Format
|
||||
|
||||
Pick one and redirect all variations to it:
|
||||
|
||||
| Decision | Options |
|
||||
|----------|---------|
|
||||
| www vs non-www | `example.com` or `www.example.com` |
|
||||
| HTTP vs HTTPS | Always HTTPS |
|
||||
| Trailing slash | `/page/` or `/page` — pick one |
|
||||
|
||||
Redirect the other variations via `.htaccess` or server config (not SmartCrawl — this is a server-level concern).
|
||||
|
||||
## Structured Data
|
||||
|
||||
See [Schema Markup](../smartcrawl/schema-markup.md) for SmartCrawl implementation.
|
||||
|
||||
### Priority Order
|
||||
|
||||
| Schema Type | Rich Result | Priority |
|
||||
|-------------|-------------|----------|
|
||||
| **LocalBusiness** | Knowledge panel, maps | Every local business |
|
||||
| **FAQ** | Expandable Q&A in SERPs | Pages with Q&A content |
|
||||
| **BreadcrumbList** | Breadcrumb trail in SERPs | All pages (via Breadcrumbs module) |
|
||||
| **Event** | Date/time/location in SERPs | Event listings |
|
||||
| **Course** | Course listing | Educational offerings |
|
||||
| **Article** | Article metadata | Blog posts |
|
||||
| **Product** | Price, availability, rating | WooCommerce products |
|
||||
| **Review / AggregateRating** | Stars in results | Review pages (genuine reviews only) |
|
||||
|
||||
### Validation
|
||||
|
||||
Always validate after deployment:
|
||||
|
||||
1. [Google Rich Results Test](https://search.google.com/test/rich-results)
|
||||
2. [Schema.org Validator](https://validator.schema.org/)
|
||||
3. Google Search Console > Enhancements (ongoing monitoring)
|
||||
|
||||
## HTTPS
|
||||
|
||||
- **Required.** No exceptions. Google uses HTTPS as a ranking signal.
|
||||
- All HTTP URLs should 301 redirect to HTTPS
|
||||
- Mixed content (HTTP resources on HTTPS pages) must be fixed
|
||||
- SSL certificates are managed via cPanel on our server
|
||||
|
||||
## Page Speed Quick Wins
|
||||
|
||||
| Action | Impact | Effort |
|
||||
|--------|--------|--------|
|
||||
| Enable server-level caching | High | Already done (EA-Nginx) |
|
||||
| Optimize images (WebP, compression) | High | Low |
|
||||
| Lazy load below-fold images | Medium | Low |
|
||||
| Minimize active plugins | Medium | Low |
|
||||
| Preload critical fonts | Medium | Low |
|
||||
| Defer non-critical JavaScript | Medium | Medium |
|
||||
| Use a CDN | Medium | Medium |
|
||||
| Inline critical CSS | Low | High |
|
||||
|
||||
## Technical SEO Audit Checklist
|
||||
|
||||
- [ ] Site loads over HTTPS (no mixed content)
|
||||
- [ ] XML sitemap exists and is submitted to Search Console
|
||||
- [ ] Robots.txt is correct (not blocking important resources)
|
||||
- [ ] All pages have self-referencing canonical tags
|
||||
- [ ] One URL format (www/non-www, slash/no-slash) with redirects for the rest
|
||||
- [ ] No orphan pages (every page has internal links)
|
||||
- [ ] Core Web Vitals pass (LCP < 2.5s, INP < 200ms, CLS < 0.1)
|
||||
- [ ] Mobile-friendly test passes
|
||||
- [ ] No 404 errors on important pages (check Search Console)
|
||||
- [ ] Structured data validates without errors
|
||||
- [ ] No duplicate title tags or meta descriptions
|
||||
- [ ] Images have alt text and are optimized
|
||||
Reference in New Issue
Block a user