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:
2026-04-17 13:32:17 -05:00
commit 6eff12e8ac
21 changed files with 3301 additions and 0 deletions
+66
View File
@@ -0,0 +1,66 @@
# SEO Guidelines — SmartCrawl
A comprehensive reference repository for configuring and using the [SmartCrawl SEO plugin](https://wpmudev.com/project/smartcrawl-wordpress-seo/) across Keylink IT managed WordPress sites. Includes SmartCrawl configuration guides, SEO keyword strategy, and reusable templates.
## Purpose
When working on SEO for any Keylink IT client site that uses SmartCrawl, this repository serves as:
1. **Configuration reference** — How to set up every SmartCrawl module with optimal settings
2. **SEO strategy playbook** — Keyword research, on-page optimization, local SEO, and content strategy
3. **Reusable templates** — Audit checklists, keyword research worksheets, and per-page optimization checklists
## Repository Structure
```
├── smartcrawl/
│ ├── overview.md Feature inventory, Pro vs Free, version info
│ ├── configuration.md Module-by-module setup with recommended settings
│ ├── titles-and-meta.md Template macros, per-page overrides, best practices
│ ├── schema-markup.md All supported types, LocalBusiness, WooCommerce
│ ├── sitemaps.md XML, News, Image sitemaps config + exclusions
│ ├── social-og-twitter.md Open Graph + Twitter Card setup
│ ├── redirects.md 301/302/307, regex, bulk import, gotchas
│ ├── breadcrumbs.md Shortcode usage, schema output, styling
│ ├── content-analysis.md Focus keywords, SEO checks, readability scoring
│ ├── hooks-and-filters.md Developer API reference (wds_* hooks)
│ └── known-issues.md Gotchas, conflicts, limitations
├── seo-strategy/
│ ├── keyword-research.md Fundamentals, free tools, competitor analysis
│ ├── keyword-selection-by-page.md Strategy per page type (home, service, blog, etc.)
│ ├── on-page-optimization.md Title tags, meta descriptions, headers, content, images
│ ├── local-seo.md GBP, NAP consistency, local schema, geo-keywords
│ ├── technical-seo.md Core Web Vitals, mobile-first, crawlability, canonicals
│ └── content-strategy.md Topic clusters, gap analysis, seasonal, prioritization
└── templates/
├── site-audit-checklist.md Pre-optimization audit template
├── keyword-research-template.md Worksheet for keyword research per site
└── page-optimization-template.md Per-page SEO checklist
```
## How to Use
### Starting SEO on a new site
1. Run the [Site Audit Checklist](templates/site-audit-checklist.md) to assess current state
2. Follow [SmartCrawl Configuration](smartcrawl/configuration.md) to set up the plugin
3. Use the [Keyword Research Template](templates/keyword-research-template.md) to identify targets
4. Apply the [Page Optimization Template](templates/page-optimization-template.md) to each priority page
### Optimizing an existing site
1. Review [On-Page Optimization](seo-strategy/on-page-optimization.md) for current best practices
2. Check [Known Issues](smartcrawl/known-issues.md) for any relevant gotchas
3. Use Search Console data mining from [Keyword Research](seo-strategy/keyword-research.md) to find quick wins
### Local business sites
Start with [Local SEO](seo-strategy/local-seo.md) — for small businesses, local optimization often has the highest ROI.
## SmartCrawl Version
This documentation is based on **SmartCrawl v3.15.0** (January 2026). Check for updates at [WPMU DEV](https://wpmudev.com/project/smartcrawl-wordpress-seo/).
## License
Internal reference — Keylink IT
+147
View File
@@ -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.
+149
View File
@@ -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.
+132
View File
@@ -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. |
+201
View File
@@ -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
+162
View File
@@ -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
+194
View File
@@ -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
+146
View File
@@ -0,0 +1,146 @@
# Breadcrumbs
SmartCrawl provides breadcrumb navigation with built-in Schema.org `BreadcrumbList` markup. Breadcrumbs improve both UX (users can navigate up the site hierarchy) and SEO (Google displays breadcrumb trails in search results).
## Enabling Breadcrumbs
1. Go to **SmartCrawl > Advanced Tools > Breadcrumbs**
2. Toggle the module ON
3. Configure separator and display options
4. Add the breadcrumb output to your theme
## Adding Breadcrumbs to Your Theme
### Method 1: Shortcode
```
[smartcrawl_breadcrumbs]
```
Place this in any post, page, widget, or theme template.
### Method 2: Shortcode with Custom Wrapper
```
[smartcrawl_breadcrumbs before="<nav aria-label='Breadcrumb'>" after="</nav>"]
```
The `before` and `after` parameters wrap the breadcrumb trail with custom HTML.
### Method 3: PHP (Theme Template)
```php
<?php
if ( function_exists( 'smartcrawl_breadcrumbs' ) ) {
smartcrawl_breadcrumbs();
}
?>
```
Place this in your theme's `header.php`, `single.php`, `page.php`, or a custom template part.
## Configuration
### Separator
Choose from presets or enter custom HTML:
| Preset | Output |
|--------|--------|
| `>` | Home > Category > Page |
| `/` | Home / Category / Page |
| `»` | Home » Category » Page |
| Custom | Any HTML character or element |
**Recommendation:** Use `>` or `»` — they visually indicate hierarchy.
### Display Options
| Option | Description |
|--------|-------------|
| Show on homepage | Whether breadcrumbs appear on the homepage (usually no — it would just show "Home") |
| Home link text | Default "Home" — can be customized (e.g., site name) |
| Post breadcrumb type | Show category hierarchy or just parent page |
## Schema Output
SmartCrawl automatically outputs `BreadcrumbList` schema markup alongside the visible breadcrumbs:
```json
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Home",
"item": "https://example.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Services",
"item": "https://example.com/services/"
},
{
"@type": "ListItem",
"position": 3,
"name": "Basic Rider Course"
}
]
}
```
This produces breadcrumb navigation in Google search results:
```
example.com > Services > Basic Rider Course
```
## Styling
SmartCrawl outputs breadcrumbs with CSS classes you can target:
```css
/* Breadcrumb container */
.smartcrawl-breadcrumbs {
font-size: 14px;
padding: 10px 0;
color: #666;
}
/* Individual breadcrumb links */
.smartcrawl-breadcrumbs a {
color: #0066cc;
text-decoration: none;
}
.smartcrawl-breadcrumbs a:hover {
text-decoration: underline;
}
/* Separator */
.smartcrawl-breadcrumbs .separator {
margin: 0 8px;
color: #999;
}
/* Current page (last item, no link) */
.smartcrawl-breadcrumbs .current {
color: #333;
font-weight: 500;
}
```
## White Label Support
SmartCrawl Pro supports white labeling the breadcrumb module — you can remove WPMU DEV branding from the output.
## Best Practices
1. **Place breadcrumbs near the top of the page** — above the main content, below the header
2. **Don't show on homepage** — it adds no value (just "Home")
3. **Keep the trail short** — Home > Category > Page is ideal. Avoid deep nesting.
4. **Validate the schema** at [Google Rich Results Test](https://search.google.com/test/rich-results)
5. **Ensure the hierarchy makes sense** — breadcrumbs should reflect the actual site structure
+230
View File
@@ -0,0 +1,230 @@
# SmartCrawl Configuration Guide
Module-by-module setup with recommended settings for production WordPress sites.
## Initial Setup
### 1. Install and Activate
Install SmartCrawl from the WordPress plugin repository or upload the WPMU DEV Pro version. On activation, the Setup Wizard launches.
### 2. Setup Wizard
The wizard enables all modules by default. Recommended approach:
- **Run the wizard** — accept all defaults
- **Then configure each module** per the sections below
- **If migrating from another SEO plugin** (Yoast, Rank Math, AIOSEO): use the Import tool in Settings to pull in existing titles, descriptions, and meta data before making changes
### 3. Conflict Check
SmartCrawl detects other SEO plugins. **Never run two SEO plugins simultaneously** — they will output duplicate meta tags. Deactivate the old plugin after importing its data.
---
## Module: Titles & Meta
See [titles-and-meta.md](titles-and-meta.md) for the full macro reference.
### Recommended Global Settings
**Homepage:**
```
Title: %%sitename%% %%sep%% [Primary service/value proposition]
Description: Hand-write this — 150-160 characters, include primary keyword + CTA
```
**Posts:**
```
Title: %%title%% %%sep%% %%sitename%%
Description: %%excerpt%% (override per-post for important pages)
```
**Pages:**
```
Title: %%title%% %%sep%% %%sitename%%
Description: Leave blank at template level — hand-write per page
```
**Categories/Tags:**
```
Title: %%term_title%% %%sep%% %%sitename%%
Description: %%term_description%%
```
**Separator:** Use `|` or `—` (clean, modern look in SERPs)
### Key Settings
- **Noindex tag archives** unless your tags have substantial unique content
- **Noindex author archives** on single-author sites (duplicate of your posts page)
- **Noindex paginated archives** (`/page/2/`, `/page/3/`) — thin content
- **Check custom post types** — WooCommerce products, portfolio items, etc. must be explicitly enabled
---
## Module: Social (Open Graph & Twitter)
### Global Settings
| Setting | Recommendation |
|---------|---------------|
| Default OG Image | Set a branded fallback image (1200x630px) |
| Facebook OG | Enable for all post types |
| Twitter Cards | Enable — use `summary_large_image` card type |
| Pinterest Verification | Add your Pinterest meta tag if applicable |
### Per-Post Type Settings
- **Posts/Pages:** Enable OG and Twitter, use post title and excerpt as defaults
- **Products (WooCommerce):** Enable the "WooCommerce Product Open Graph" toggle — auto-adds `og:type=product`, price, availability
- **Custom post types:** Enable and verify OG tags render correctly
### Per-Post Overrides
For important pages, always set custom OG title, description, and image:
- OG title can differ from the SEO title (e.g., more engaging/clickable for social)
- OG image should be exactly **1200x630px** for best rendering across platforms
- OG description can be longer than meta description (up to ~300 characters)
---
## Module: Sitemap
### Recommended Settings
| Setting | Value |
|---------|-------|
| XML Sitemap | Enable |
| Include post types | Posts, Pages, Products, and any public custom post types |
| Include taxonomies | Categories (yes), Tags (only if indexable), custom taxonomies |
| Image Sitemap | Enable — helps with Google Images indexing |
| Google News Sitemap | Enable only if the site publishes news-style content |
| Notify search engines | Automatic mode |
### Exclusions
Exclude from sitemap:
- Thank you / confirmation pages
- Internal-use pages (login, dashboard, etc.)
- Any page set to `noindex`**SmartCrawl does not do this automatically**
- Thin content pages with little SEO value
### Important Notes
- Sitemap is limited to **1,000 most recent posts** to prevent memory errors
- After making sitemap changes, use the **"New Crawl" button** to notify Google
- Verify your sitemap loads at `yoursite.com/sitemap.xml`
- Submit the sitemap URL in Google Search Console
---
## Module: Schema / Structured Data
See [schema-markup.md](schema-markup.md) for the full type reference.
### Recommended Setup
1. **Organization Schema** — Enable globally with:
- Business name, logo, contact info
- Social media profile URLs
- Same-as links to directory listings
2. **LocalBusiness Schema** — For local businesses, add with:
- Full NAP (name, address, phone)
- Opening hours
- Geo coordinates
- Area served
- Appropriate subtype (60+ available)
3. **Article/WebPage Schema** — Default for posts and pages respectively
4. **Per-page schema** — Add specific types where applicable:
- **FAQ** on pages with Q&A content
- **Event** on event listing pages
- **Course** on educational offerings
- **Product** on WooCommerce products (auto-handled)
5. **Validate schema** at [Google Rich Results Test](https://search.google.com/test/rich-results) after deploying
---
## Module: Redirects
See [redirects.md](redirects.md) for the full reference.
### Quick Setup
- Enable the Redirects module
- Set default redirect type to **301 (Permanent)**
- Enable **"Auto-redirect deleted posts"** (v3.9.0+) to catch deleted content
- Import any existing redirects from `.htaccess` or a previous plugin
---
## Module: Content Analysis
See [content-analysis.md](content-analysis.md) for scoring details.
### Recommended Approach
- **Always set a focus keyword** for every published page/post
- Use **up to 3 keywords** per page (1 primary + 2 secondary)
- Aim for **all green checks** on the SEO analysis tab
- Target a **Flesch-Kincaid readability score of 60-70** (8th-grade level)
- Don't chase a perfect score at the expense of natural writing
---
## Module: Breadcrumbs
See [breadcrumbs.md](breadcrumbs.md) for implementation details.
### Quick Setup
1. Enable Breadcrumbs in the Advanced Tools module
2. Add `[smartcrawl_breadcrumbs]` shortcode to your theme template or use the PHP function
3. Choose a separator (` > ` or ` / ` are most common)
4. Verify the breadcrumb trail renders correctly and the schema output validates
---
## Module: Robots.txt (Pro Only)
### Recommended Content
```
User-agent: *
Allow: /
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php
Sitemap: https://yoursite.com/sitemap.xml
```
**Important:** Use full absolute URLs for sitemap directives.
**Do not block CSS/JS files** — Google needs them to render pages for mobile-first indexing.
---
## Settings: Import/Export
- **Export** your SmartCrawl configuration as JSON after setting up a site
- **Import** that configuration when setting up similar sites to save time
- Settings are transferable between sites but **titles/descriptions are templates, not content** — they'll adapt to each site's content via macros
---
## Post-Setup Checklist
After configuring SmartCrawl:
- [ ] Run the **SEO Health Checkup** and address all red/yellow items
- [ ] Verify `sitemap.xml` loads and is submitted in Google Search Console
- [ ] Check 5-10 key pages for correct title tags and meta descriptions (view source)
- [ ] Verify Open Graph tags render correctly (use [Facebook Sharing Debugger](https://developers.facebook.com/tools/debug/))
- [ ] Validate schema markup with [Google Rich Results Test](https://search.google.com/test/rich-results)
- [ ] Check robots.txt at `yoursite.com/robots.txt`
- [ ] Confirm no duplicate SEO plugins are active
- [ ] Set focus keywords on all priority pages
+169
View File
@@ -0,0 +1,169 @@
# Content Analysis
SmartCrawl provides real-time SEO and readability analysis in both the Classic Editor and Block Editor. This module is the primary tool for optimizing individual posts and pages.
## Focus Keywords
### How They Work
- Set **up to 3 focus keywords** per post/page (1 primary + 2 secondary)
- Enter as comma-separated values in the SmartCrawl meta box
- SmartCrawl checks the page content against each keyword
- The primary keyword gets the most checks; secondary keywords supplement
### Best Practices for Focus Keywords
| Rule | Details |
|------|---------|
| One primary keyword per page | The single most important search term this page should rank for |
| 1-2 secondary keywords | Closely related terms or long-tail variations |
| Match search intent | The keyword should match what the page actually delivers |
| Check for cannibalization | SmartCrawl shows the 10 most recent posts using the same keyphrase — avoid duplicates |
| Use natural language | "motorcycle safety course Anchorage" not "motorcycle+safety+course+anchorage" |
### Keyword Selection Per Page Type
| Page Type | Primary Keyword Pattern | Example |
|-----------|------------------------|---------|
| Homepage | Core service + location | "motorcycle safety courses Alaska" |
| Service page | Specific service + location | "basic rider course Anchorage" |
| Blog post | Informational long-tail | "what to wear to a motorcycle safety course" |
| Portfolio | Role + qualifier | "instructional design portfolio" |
| Contact | Brand + contact | "contact Alaska Safe Riders" |
| Landing page | Transactional long-tail | "register motorcycle course Anchorage May 2026" |
## SEO Analysis Checks
SmartCrawl runs these checks against your focus keyword(s):
### Title Tag
| Check | Pass Criteria |
|-------|---------------|
| Keyphrase in title | Primary keyphrase appears in the title tag |
| Title length | Between 50-60 characters |
| Title uniqueness | Not used by other posts |
### URL / Slug
| Check | Pass Criteria |
|-------|---------------|
| Keyphrase in URL | Primary keyphrase appears in the URL slug |
| URL structure | Uses hyphens (not underscores), reasonable length |
### Meta Description
| Check | Pass Criteria |
|-------|---------------|
| Keyphrase in description | Primary keyphrase appears in the meta description |
| Description length | 120-160 characters |
| Hand-crafted | Not auto-generated from content excerpt |
### Content
| Check | Pass Criteria |
|-------|---------------|
| Keyphrase in H1 | Primary keyphrase in the main heading |
| Keyphrase in subheadings | At least one H2/H3 contains the keyphrase |
| Keyphrase density | Appears a reasonable number of times (not too few, not stuffed) |
| Keyphrase in first paragraph | Appears within the first 100-200 words |
| Keyphrase in image alt text | At least one image has the keyphrase in its alt attribute |
| Content length | Sufficient content for the topic (no specific minimum enforced) |
### Links
| Check | Pass Criteria |
|-------|---------------|
| External links | At least one dofollow external link to a relevant, authoritative source |
| Internal links | Links to other pages on the site |
### Images
| Check | Pass Criteria |
|-------|---------------|
| Image optimization | Images have alt text, reasonable file names |
| Keyphrase in alt | At least one image alt includes the focus keyphrase |
## SEO Analysis Color Coding
| Color | Meaning |
|-------|---------|
| Green | Check passed — well optimized |
| Yellow/Gray | Needs improvement — suggestion provided |
| Red | Critical issue — should be fixed |
### Interpreting Results
- **Aim for all green** on important pages
- **Yellow is acceptable** when the suggestion would make content unnatural
- **Red should always be addressed** unless you have a specific reason to deviate
- **Don't sacrifice readability for a green check** — natural writing always wins
## Readability Analysis
SmartCrawl uses the **Flesch-Kincaid readability test** along with structural checks.
### Flesch-Kincaid Score
| Score | Reading Level | Assessment |
|-------|---------------|-----------|
| 90-100 | 5th grade | Very easy to read |
| 80-89 | 6th grade | Easy to read |
| 70-79 | 7th grade | Fairly easy |
| **60-69** | **8th-9th grade** | **Target range** |
| 50-59 | 10th-12th grade | Fairly difficult |
| 30-49 | College level | Difficult |
| 0-29 | Graduate level | Very difficult |
**Target: 60-70** (8th-grade level). This is readable by the widest audience while still sounding professional.
### Readability Checks
| Check | Standard |
|-------|----------|
| Sentence length | Average under 20 words. 14+ words = hard. 25+ words = very hard. |
| Passive voice | Minimize passive constructions (aim for <10% of sentences) |
| Paragraph length | 2-4 sentences per paragraph |
| Subheading distribution | Use subheadings every 200-300 words |
| Transition words | Use transition words to connect ideas |
### Readability Tips
- **Break up long sentences** — if a sentence has a comma and "and", it can usually be split
- **Use active voice** — "We teach motorcycle safety" not "Motorcycle safety is taught by us"
- **Short paragraphs** — walls of text hurt both readability scores and user engagement
- **Use lists and tables** where appropriate — they are easier to scan than prose
- **Write at 8th-grade level** — this is not "dumbing down," it is clear communication
> **Note:** SmartCrawl's readability analysis is reportedly "more difficult to please" than other plugins. A yellow readability score is acceptable if the content reads naturally.
## Content Analysis in the Editor
### Where to Find It
- **Classic Editor:** SmartCrawl meta box below the editor
- **Block Editor:** SmartCrawl panel in the right sidebar
### Real-Time Updates
Analysis updates as you type (with a short delay). No need to save/publish to see results.
### Keyword Cannibalization Check
When you enter a focus keyword, SmartCrawl checks your other posts and shows the **10 most recent posts using the same keyphrase**. If duplicates are found:
- Consider whether both pages are needed
- Differentiate their focus (e.g., one informational, one transactional)
- If truly duplicated, merge content into one page and redirect the other
## Workflow Recommendation
For every page you publish or optimize:
1. **Set the focus keyword(s)** before writing or after outlining
2. **Write naturally first** — don't write "for the SEO checker"
3. **Run the analysis** after drafting
4. **Address red items** — these are genuine issues
5. **Review yellow items** — fix what makes sense, skip what would make content unnatural
6. **Check readability** — simplify where possible without losing substance
7. **Preview the Google snippet** — verify title and description look good in the preview
+156
View File
@@ -0,0 +1,156 @@
# Hooks and Filters (Developer API)
SmartCrawl exposes **99 documented hooks** for developers, using the `wds_` prefix. These allow programmatic control over SmartCrawl's output without modifying the plugin directly.
The complete hooks documentation is maintained in the [WPMU DEV hooks-documentation repository](https://github.com/wpmudev/hooks-documentation) in the `smartcrawl-seo-hooks-doc.html` file.
## Key Filters
### Title and Meta
```php
// Filter the SEO title output
add_filter( 'wds_title', function( $title ) {
// Modify the title tag output
return $title;
});
// Filter the meta description output
add_filter( 'wds_metadesc', function( $description ) {
// Modify the meta description
return $description;
});
```
### Open Graph
```php
// Customize Open Graph title
add_filter( 'wds_custom_og_title', function( $title ) {
return $title;
});
// Customize Open Graph description
add_filter( 'wds_custom_og_description', function( $description ) {
return $description;
});
// Customize Open Graph image(s)
add_filter( 'wds_custom_og_image', function( $images ) {
// $images is an array of image URLs
return $images;
});
```
### Defaults and Options
```php
// Filter SmartCrawl default options
add_filter( 'wds_defaults', function( $defaults ) {
// Modify default option values
return $defaults;
});
```
### Admin UI
```php
// Control admin bar visibility
add_filter( 'wds-admin-ui-show_bar', function( $show ) {
// Return false to hide the SmartCrawl admin bar item
return $show;
});
```
### Sitemap
```php
// Exclude specific taxonomy terms from sitemaps
add_filter( 'wds_terms_sitemap_include_term_ids', function( $term_ids, $taxonomy ) {
// Remove specific term IDs
$exclude = array( 15, 23, 42 );
return array_diff( $term_ids, $exclude );
}, 10, 2 );
// Add extra images to sitemap entries
add_filter( 'wds_sitemap_extra_images', function( $images, $post_id ) {
// Add additional image URLs for a post
return $images;
}, 10, 2 );
```
## Key Actions
```php
// Fires after SmartCrawl saves post meta data
// Useful for syncing SEO data with external systems
add_action( 'wds_saved_postdata', function( $post_id ) {
// Handle post meta save cleanup
// SmartCrawl uses this internally to handle unchecked checkbox cleanup
});
```
## Common Use Cases
### Force a Specific Title on a Page
```php
add_filter( 'wds_title', function( $title ) {
if ( is_page( 'special-landing-page' ) ) {
return 'Custom Landing Page Title | Brand Name';
}
return $title;
});
```
### Add Custom OG Image for a Post Type
```php
add_filter( 'wds_custom_og_image', function( $images ) {
if ( is_singular( 'product' ) ) {
$custom_image = get_field( 'social_share_image' ); // ACF field
if ( $custom_image ) {
return array( $custom_image );
}
}
return $images;
});
```
### Hide SmartCrawl Admin Bar for Non-Admins
```php
add_filter( 'wds-admin-ui-show_bar', function( $show ) {
if ( ! current_user_can( 'manage_options' ) ) {
return false;
}
return $show;
});
```
### Exclude a Specific Category from Sitemap
```php
add_filter( 'wds_terms_sitemap_include_term_ids', function( $term_ids, $taxonomy ) {
if ( $taxonomy === 'category' ) {
$exclude = array( get_cat_ID( 'Uncategorized' ) );
return array_diff( $term_ids, $exclude );
}
return $term_ids;
}, 10, 2 );
```
## Hook Naming Convention
All SmartCrawl hooks follow these patterns:
- **Filters:** `wds_{feature}` — e.g., `wds_title`, `wds_metadesc`
- **Actions:** `wds_{event}` — e.g., `wds_saved_postdata`
- **UI filters:** `wds-{area}-{feature}` — e.g., `wds-admin-ui-show_bar`
## Notes
- The `wds_` prefix stands for "WPMU DEV SmartCrawl" (originally "WPMU DEV SEO")
- 96 of the 99 hooks were undocumented as of the last GitHub update — the three listed above are the most commonly used
- For the full list, inspect the plugin source code or check the hooks documentation repository
- Hook availability may vary between SmartCrawl Free and Pro versions
+126
View File
@@ -0,0 +1,126 @@
# Known Issues and Gotchas
Confirmed issues, limitations, and workarounds for SmartCrawl v3.15.0.
## Fixed in v3.15.0 (Verify You're Updated)
These were bugs in prior versions — confirm you're on 3.15.0+:
| Issue | Description |
|-------|-------------|
| Editor freezing | Editor got stuck when typing for >2 minutes with SmartCrawl enabled |
| Focus keywords with numbers | SmartCrawl failed to detect focus keywords containing numbers |
| Large content pages | SEO checks failed on very large content pages |
| Social accounts erased | Social accounts wiped from Schema General Settings on save |
| Taxonomy archives | Categories/tags not saving under Taxonomy Archives settings |
| Blog/Posts archive | Global Titles & Meta didn't apply to blog archive when static front page was set |
## Current Known Issues
### Redirect Ordering
**Issue:** Redirects cannot be reordered once added.
**Workaround:** Delete the redirect and recreate it. For complex redirect lists, consider exporting as JSON, editing the order, and re-importing.
### Regex Redirects Inconsistency
**Issue:** Some users report regex patterns not working in SmartCrawl despite being valid on regex101.com.
**Workaround:** Use simpler patterns. Test thoroughly after creating. For complex regex redirects, consider handling them at the server level (`.htaccess` or Nginx config).
### Sitemap 1,000 Post Limit
**Issue:** Sitemaps are limited to 1,000 most recent posts per post type to prevent memory errors.
**Impact:** Older posts on large sites may not appear in the sitemap.
**Workaround:** For sites with 1,000+ posts, consider supplementing with a manual sitemap or contacting WPMU DEV support.
### Noindex + Sitemap Disconnect
**Issue:** Setting a page to `noindex` does NOT automatically exclude it from the sitemap.
**Workaround:** Manually exclude noindexed pages from the sitemap by post ID. **Always do both when noindexing a page.**
### No IndexNow Support
**Issue:** SmartCrawl does not support the IndexNow protocol (unlike Yoast and Rank Math).
**Impact:** Bing and Yandex won't get instant notification of content changes. Google does not support IndexNow anyway (they use their own crawl notification).
**Workaround:** Not critical — SmartCrawl's "Instant Indexing" feature notifies Google directly.
### Auto-Linking + WooCommerce Conflict (Pro)
**Issue:** Auto-linking can cause issues with WooCommerce cart and account page caching.
**Workaround:** Exclude WooCommerce cart, checkout, and account pages from auto-linking in the settings.
### WPML Duplicate Sitemap URLs
**Issue:** When using WPML (multilingual plugin), duplicate homepage URLs appear in the sitemap.
**Workaround:** Manually exclude duplicate URLs from the sitemap.
### OpenGraph Persistence After Disabling
**Issue:** OG tags can remain active on the homepage even after deactivating Open Graph in the setup wizard.
**Workaround:** Manually disable OG for the homepage in SmartCrawl > Social settings, or clear any cached pages.
### Auto-Linking Tab in Free Version
**Issue:** The auto-linking tab appears in the free version UI but the feature does not function without Pro.
**Impact:** Cosmetic only — confusing but not harmful.
### Plugin Update Data Loss (Rare)
**Issue:** At least one user reported keywords, descriptions, and titles being wiped on plugin update.
**Workaround:** Always export SmartCrawl settings (JSON backup) before updating the plugin. This is a rare issue but catastrophic when it happens.
## Plugin Conflicts
### Google Web Stories
**Issue:** SmartCrawl conflicts with the Google Web Stories editor.
**Workaround:** Exclude Web Stories post type from SmartCrawl processing, or use a different SEO plugin for Web Stories.
### Other SEO Plugins
**Issue:** Running multiple SEO plugins simultaneously causes duplicate meta tags, conflicting sitemaps, and schema errors.
**Fix:** Only run one SEO plugin at a time. Use SmartCrawl's import tool when migrating from another plugin.
### Caching Plugins
**Issue:** Page caching can serve stale meta tags after SmartCrawl changes.
**Fix:** Clear the cache after making SEO changes. On your server with EA-Nginx:
```bash
rm -rf /var/cache/ea-nginx/proxy/<account>/*
```
### WP Hummingbird
SmartCrawl and Hummingbird (both WPMU DEV) generally work well together. No known conflicts.
## Best Practices to Avoid Issues
1. **Export settings before every plugin update** — JSON backup takes 10 seconds
2. **Keep SmartCrawl updated** — many issues are fixed in recent versions
3. **Never run two SEO plugins** — deactivate the old one after importing
4. **Manually sync noindex and sitemap exclusions** — SmartCrawl doesn't auto-sync these
5. **Test redirects after creating** — especially regex patterns
6. **Clear cache after SEO changes** — especially on sites with server-level caching
7. **Be patient with Google** — title/description changes can take up to a week to reflect in SERPs
8. **Use the SEO Health Checkup** periodically — catches configuration drift
## Where to Get Help
- [WPMU DEV Documentation](https://wpmudev.com/docs/wpmu-dev-plugins/smartcrawl/)
- [WPMU DEV Support](https://wpmudev.com/hub/support/) (Pro members)
- [WordPress.org Support Forum](https://wordpress.org/support/plugin/smartcrawl-seo/) (Free version)
+101
View File
@@ -0,0 +1,101 @@
# SmartCrawl Overview
SmartCrawl is a WordPress SEO plugin by WPMU DEV. Current version: **3.15.0** (January 26, 2026). Available as a free plugin on WordPress.org and a Pro version through WPMU DEV membership. Supports WordPress Multisite and has been translated into 16 locales.
## Full Feature Inventory
### Core Modules
| Module | Description |
|--------|-------------|
| **Dashboard** | One-click Setup Wizard, SEO Health score, import/export settings (JSON) |
| **SEO Health / Checkup** | Full site SEO scan with color-coded grading and recommendations |
| **Titles & Meta** | Global templates with macros + per-post overrides, Google preview snippet |
| **Social** | Open Graph (Facebook, Instagram, LinkedIn, Pinterest) + Twitter/X Cards |
| **Sitemap Generator** | XML, Google News, and Image sitemaps with configurable inclusions/exclusions |
| **Schema / Structured Data** | 20+ pre-built types + custom schema builder |
| **Content Analysis** | In-editor SEO analysis + readability scoring, up to 3 focus keywords |
### Advanced Tools (Sub-modules)
| Sub-module | Description |
|------------|-------------|
| **Redirects** | 301/302/307 redirects, regex support, bulk import/export |
| **Automatic Linking** | Auto-convert keywords to links (Pro only) |
| **Breadcrumbs** | Shortcode-based breadcrumb navigation with schema markup |
| **Moz Integration** | Domain authority and link metrics in the WP dashboard |
| **Robots.txt Editor** | Edit robots.txt from the admin (Pro only) |
| **Meta Robots** | Per-post index/noindex, follow/nofollow controls |
### Additional Features
| Feature | Description |
|---------|-------------|
| **WooCommerce SEO** | Product schema, OG tags, category SEO settings |
| **Instant Indexing** | Notifies Google when content is added/updated (not IndexNow) |
| **Import/Export** | JSON-based settings transfer between sites |
| **Role-based Access** | Control which user roles can access SEO settings |
## Free vs Pro
### Free Version Includes
- One-click setup wizard
- Titles & Meta descriptions (global templates + per-post overrides)
- XML Sitemap generator (with exclusions)
- Google News Sitemap
- Image Sitemap
- Open Graph & Twitter Cards
- SEO content analysis & readability checks (up to 3 focus keywords)
- Schema markup (all pre-built types + custom schema builder)
- 301/302/307 Redirects (basic)
- Breadcrumbs with schema
- Moz integration
- Meta robots (index/noindex, follow/nofollow)
- Multisite support
- Import/Export settings
- WooCommerce SEO
### Pro Adds
| Feature | Details |
|---------|---------|
| Scheduled SEO Audits | Automated URL crawls with email reports |
| Automatic Linking | Keyword-to-link automation across all content |
| Location-based Redirects | Geolocation rules for redirect targeting |
| Site Crawler | Broken URL detection, 404 monitoring, redirect chain detection |
| Robots.txt Editor | Edit robots.txt from the admin panel |
| White Label | Custom branding (remove WPMU DEV references) |
| MaxMind DB | Geolocation integration for location-based features |
| Priority Support | 24/7 live chat with WPMU DEV team |
### Pricing
Pro requires WPMU DEV membership (~$7.50/month), which includes all WPMU DEV premium plugins (Hummingbird, Smush, Defender, Forminator, etc.).
## Comparison: SmartCrawl vs Yoast vs Rank Math
| Feature | SmartCrawl Free | Yoast Free | Rank Math Free |
|---------|----------------|------------|----------------|
| Focus keywords per post | 3 | 1 | 5 |
| Schema types | Many + custom builder | Basic | 18+ pre-defined |
| Redirects | Yes (301/302/307) | No (Pro only) | Yes + 404 monitor |
| Breadcrumbs | Yes | Yes | Yes |
| XML Sitemap | Yes | Yes | Yes |
| News Sitemap | Yes | No (Pro) | Pro only |
| Image Sitemap | Yes | Included in main | Included in main |
| Open Graph / Twitter | Yes | Yes | Yes |
| Readability analysis | Yes (Flesch-Kincaid) | Yes (more detailed) | Yes |
| Google Search Console | No | No (limited) | Yes (built-in) |
| Google Analytics | No | No | Yes (GA4) |
| IndexNow | No | Yes | Yes |
| Auto-linking | Pro only | No | Pro only |
| WooCommerce SEO | Yes | Yes (Pro) | Yes |
| White label | Pro only | No | Pro only |
| Moz integration | Yes | No | No |
### Positioning Summary
- **SmartCrawl** — Simplest UI, least overwhelming. Best for WPMU DEV ecosystem users. Generous free tier for schema. Weakest on analytics integration and IndexNow.
- **Yoast** — Most beginner-friendly (traffic-light system). Most detailed readability. Locks more behind Pro.
- **Rank Math** — Most feature-rich free tier. Best analytics integration. Most focus keywords. Rapidly adding AI-era features.
+126
View File
@@ -0,0 +1,126 @@
# Redirects
SmartCrawl's Redirects module manages URL redirection from within WordPress, without editing `.htaccess` or server config. Found under Advanced Tools > Redirects.
## Redirect Types
| Code | Type | When to Use |
|------|------|-------------|
| **301** | Permanent | Page permanently moved. Passes ~90-99% of link equity. Default choice. |
| **302** | Temporary | Page temporarily moved. Does not pass link equity permanently. Use for A/B tests, maintenance. |
| **307** | Temporary (method preserved) | Like 302 but preserves the HTTP method and body. Rare use case. |
**Default recommendation:** Always use **301** unless you have a specific reason for temporary.
## Creating Redirects
### Basic (Plain Text)
1. Go to SmartCrawl > Advanced Tools > Redirects
2. Click "Add Redirect"
3. Enter the **source URL** (old URL path, e.g., `/old-page/`)
4. Enter the **destination URL** (new URL, e.g., `/new-page/` or full URL)
5. Select redirect type (301/302/307)
6. Save
### Regex Pattern
Switch to "Regex" mode for pattern-based redirects:
```
Source: /blog/(\d{4})/(\d{2})/(.*)
Destination: /blog/$3
Type: 301
```
This redirects dated blog URLs to non-dated versions.
**Regex tips:**
- Test patterns on [regex101.com](https://regex101.com) before applying
- Use capture groups `()` and backreferences `$1`, `$2`, etc.
- Some users report regex patterns not working despite being valid — test thoroughly
### Wildcard Redirects
Use regex mode for wildcards:
```
Source: /old-section/(.*)
Destination: /new-section/$1
Type: 301
```
This redirects all URLs under `/old-section/` to `/new-section/` while preserving the path.
## Auto-Redirect Deleted Posts (v3.9.0+)
Enable this to automatically create a 301 redirect when a post or page is deleted. The redirect points to:
- The parent page (if it was a child page)
- The homepage (if no logical parent)
**Recommendation:** Enable this to prevent 404s when content is removed.
## Bulk Import/Export
### Export
- SmartCrawl exports redirects as JSON
- Useful for backing up redirects before changes
### Import
- Import redirects from JSON file
- Useful when migrating between sites or restoring from backup
### Bulk Edit
- Change redirect types in bulk (e.g., convert all 302s to 301s)
- Delete all redirects at once (use with caution)
## Pro Features
### Location-Based Redirects
With SmartCrawl Pro + MaxMind GeoIP database:
- Redirect visitors based on their country or region
- Example: Redirect Canadian visitors to a `.ca` domain
- Requires MaxMind DB configuration in settings
## When to Use Redirects
| Scenario | Action |
|----------|--------|
| Page URL changed | 301 from old URL to new URL |
| Page deleted, replacement exists | 301 to the replacement page |
| Page deleted, no replacement | 301 to the most relevant parent or category page |
| Site migration (domain change) | 301 all old URLs to new domain equivalents |
| HTTP to HTTPS migration | 301 all HTTP URLs to HTTPS (better handled at server level) |
| www to non-www (or vice versa) | 301 (better handled at server level) |
| Temporary maintenance | 302 to a maintenance page |
| A/B testing | 302 to the test variant |
| Consolidating duplicate content | 301 all duplicates to the canonical version |
## Common Redirect Chains to Avoid
A redirect chain is when URL A redirects to URL B, which redirects to URL C. This wastes crawl budget and dilutes link equity.
**Bad:** `/old-page/``/newer-page/``/newest-page/`
**Good:** `/old-page/``/newest-page/` (and `/newer-page/``/newest-page/`)
When adding a new redirect, check if the destination already has a redirect pointing elsewhere. If so, update the chain to point directly to the final destination.
## Known Limitations
| Issue | Workaround |
|-------|-----------|
| Cannot reorder redirects | Delete and recreate in the desired order |
| Regex patterns sometimes fail | Test on regex101.com first; try simpler patterns |
| No 404 monitoring (Free) | Pro includes a site crawler that detects 404s |
| No redirect chain detection | Manually audit for chains |
| Large redirect lists can be slow | Consider moving high-volume redirects to `.htaccess` or server config |
## Best Practices
1. **Always redirect, never delete** — A 404 loses all SEO value the old URL had
2. **Redirect to the most relevant page** — not always the homepage
3. **Audit redirects quarterly** — remove redirects for URLs that no longer receive traffic
4. **Keep redirect lists manageable** — if you have 500+ redirects, consider server-level handling
5. **Test after creating** — visit the old URL in an incognito window to verify the redirect works
6. **Check redirect response code** — use [httpstatus.io](https://httpstatus.io) or browser dev tools Network tab
+190
View File
@@ -0,0 +1,190 @@
# Schema / Structured Data
SmartCrawl provides both pre-built schema types and a custom schema builder. Schema markup generates rich results in search (star ratings, FAQ dropdowns, event dates, breadcrumbs, etc.) that significantly increase SERP visibility and click-through rates.
## Pre-Built Schema Types
SmartCrawl includes the following ready-to-use types:
| Schema Type | Rich Result | Best For |
|-------------|-------------|----------|
| **Article** | Article metadata | Blog posts, news articles |
| **Web Page** | Page metadata | Static pages |
| **FAQ** | Expandable Q&A in SERPs | FAQ pages, service pages with Q&A sections |
| **HowTo** | Step-by-step instructions in SERPs | Tutorial content, guides |
| **Product** | Price, availability, rating | WooCommerce products |
| **Local Business** | Knowledge panel, maps | Business homepages, location pages |
| **Recipe** | Rich recipe card | Food/recipe content |
| **Job Posting** | Job listing in Google Jobs | Career/hiring pages |
| **Movie** | Movie info panel | Entertainment/review sites |
| **Course** | Course listing | Educational offerings |
| **Book** | Book info panel | Book reviews, author sites |
| **Software Application** | App info | Software product pages |
| **Event** | Date, time, location in SERPs | Event listing pages |
| **Rating / Review** | Star ratings | Review pages (use only with genuine reviews) |
| **Video** | Video thumbnail in SERPs | Pages with embedded video |
| **Person** | Person knowledge panel | About pages, team pages |
| **Organization** | Org knowledge panel | Company about pages |
## Custom Schema Type Builder
SmartCrawl includes a **free** custom schema builder for creating schema types not in the pre-built list. Features:
- Define unlimited custom schema types
- Three property structures: **Simple**, **Nested**, or **Collection**
- Associate custom schemas with specific posts, pages, or taxonomies
- Full JSON-LD output
## Priority Schema Types to Implement
### Tier 1 — Every site should have these
1. **Organization** — Set globally in SmartCrawl's Schema settings
- Business name, logo URL, contact info
- Social media profile URLs (`sameAs`)
- Founding date, description
2. **LocalBusiness** (for businesses with a physical location or service area)
- 60+ subtypes available (e.g., `MotorcycleDealer`, `EducationalOrganization`, `ProfessionalService`)
- Full NAP: name, street address, city, state, ZIP, country
- Telephone, email
- Opening hours specification
- Geo coordinates (latitude, longitude)
- Area served
- Price range
3. **BreadcrumbList** — Automatic when Breadcrumbs module is enabled
### Tier 2 — Add where applicable
4. **FAQ** — Any page with Q&A content
- Can generate expandable FAQ directly in search results
- Each question/answer pair is a separate `Question` entity
- High-visibility rich result
5. **Event** — For event-based businesses
- Start date, end date, location
- Offers (price, availability, URL)
- Performer/organizer
- Shows date/time/location directly in SERPs
6. **Course** — For educational offerings
- Course name, description, provider
- Duration, schedule
- Price, enrollment URL
7. **Article / BlogPosting** — For blog content (usually default)
### Tier 3 — Situational
8. **Product** — WooCommerce (auto-handled)
9. **Video** — Pages with embedded video content
10. **HowTo** — Instructional/tutorial content
11. **Person** — Individual portfolio/about pages
## LocalBusiness Schema Setup
This is the most important schema for local businesses. Set it up in SmartCrawl > Schema > Types.
### Required Properties
```json
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "Alaska Safe Riders",
"address": {
"@type": "PostalAddress",
"streetAddress": "123 Main St",
"addressLocality": "Anchorage",
"addressRegion": "AK",
"postalCode": "99501",
"addressCountry": "US"
},
"telephone": "+1-907-555-0123",
"url": "https://alaskasaferiders.org"
}
```
### Recommended Additional Properties
```json
{
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "09:00",
"closes": "17:00"
}
],
"geo": {
"@type": "GeoCoordinates",
"latitude": 61.2181,
"longitude": -149.9003
},
"areaServed": {
"@type": "State",
"name": "Alaska"
},
"priceRange": "$$",
"image": "https://example.com/logo.png",
"sameAs": [
"https://www.facebook.com/yourbusiness",
"https://www.instagram.com/yourbusiness"
]
}
```
### LocalBusiness Subtypes
SmartCrawl supports 60+ subtypes. Choose the most specific one that applies:
| Category | Examples |
|----------|----------|
| Automotive | `AutoDealer`, `AutoRepair`, `MotorcycleDealer`, `MotorcycleRepair` |
| Education | `EducationalOrganization`, `School`, `DrivingSchool` |
| Professional | `ProfessionalService`, `Consultant`, `LegalService` |
| Health | `MedicalBusiness`, `Dentist`, `Physician` |
| Food | `Restaurant`, `Bakery`, `BarOrPub`, `CafeOrCoffeeShop` |
| Entertainment | `EntertainmentBusiness`, `MovieTheater`, `NightClub` |
| Home | `HomeAndConstructionBusiness`, `Electrician`, `Plumber` |
| Store | `Store`, `ClothingStore`, `HardwareStore`, `SportingGoodsStore` |
## WooCommerce Product Schema
When enabled, SmartCrawl:
- **Replaces** WooCommerce's default schema (avoids duplicates)
- Auto-fetches product reviews and aggregate ratings
- Supports both simple and variable products
- Includes MPN, SKU, `priceValidUntil`
- Adds `offers` with price, currency, availability
Enable via: **SmartCrawl > Schema > WooCommerce Product Open Graph**
## Person Schema
As of v3.15.0, Person Schema can be limited to specific pages when Organization Schema is enabled globally. Useful for:
- Team member pages
- Author bio pages
- Individual portfolio sites (e.g., Chelsea Paige Mann)
## Validation
**Always validate schema after deployment:**
1. [Google Rich Results Test](https://search.google.com/test/rich-results) — checks if your schema qualifies for rich results
2. [Schema.org Validator](https://validator.schema.org/) — validates JSON-LD syntax
3. Google Search Console > Enhancements — monitors schema errors across your site over time
## Common Schema Mistakes
| Mistake | Fix |
|---------|-----|
| Duplicate schema from multiple plugins | Deactivate other SEO plugins' schema output |
| Using Review schema without genuine reviews | Only add if you have real, verifiable reviews |
| Missing required properties | Check Google's [structured data documentation](https://developers.google.com/search/docs/advanced/structured-data/) for requirements per type |
| Wrong LocalBusiness subtype | Use the most specific applicable type |
| Schema on pages it doesn't apply to | Only add schema types relevant to the page content |
+108
View File
@@ -0,0 +1,108 @@
# Sitemaps
SmartCrawl generates three types of sitemaps: XML, Google News, and Image. All are configured under the Sitemap module.
## XML Sitemap
### Configuration
| Setting | Recommended Value |
|---------|------------------|
| Enable XML Sitemap | Yes |
| Post types included | Posts, Pages, Products, public custom post types |
| Taxonomies included | Categories (yes), Tags (only if indexed), custom taxonomies |
| Max URLs per file | Default (auto-splits into multiple files) |
| Notify search engines | Automatic |
### Access
Your sitemap is at: `https://yoursite.com/sitemap.xml`
SmartCrawl auto-generates a sitemap index that links to individual sitemaps per post type and taxonomy.
### Exclusions
Exclude specific content by:
- **Post/page ID** — Enter IDs in the exclusion list
- **Custom URLs** — Add specific URLs to exclude
- **Post type** — Uncheck entire post types from the include list
**Important:** If you set a page to `noindex`, also exclude it from the sitemap. SmartCrawl does **not** do this automatically.
### Limitation
SmartCrawl limits sitemaps to **1,000 most recent posts** per post type to prevent memory errors on large sites. If you have more than 1,000 posts, older content may not appear in the sitemap.
## Google News Sitemap
Enable this only if the site publishes news-style content that qualifies for Google News.
### Requirements for Google News
- Content must be timely, original news articles
- Published within the last 2 days (Google News requirement)
- Site should be registered with Google News Publisher Center
### Configuration
- Enable the Google News Sitemap toggle
- Select which post types to include (usually just Posts)
- Verify at `https://yoursite.com/news-sitemap.xml`
## Image Sitemap
One-click enable. Tells Google about images on your pages for Google Images indexing.
### When to Enable
- Sites with significant visual content (portfolios, galleries, products)
- Sites where image search traffic is valuable
- Always enable for WooCommerce sites (product images)
### What It Includes
SmartCrawl adds image entries to your existing XML sitemap (not a separate file). Each page entry includes its images with:
- Image URL
- Image title
- Image caption (if set)
## Sitemap Submission
### Google Search Console
1. Go to Search Console > Sitemaps
2. Enter `sitemap.xml` in the "Add a new sitemap" field
3. Click Submit
4. Verify status shows "Success" after Google fetches it
### Bing Webmaster Tools
1. Go to Bing Webmaster Tools > Sitemaps
2. Submit `https://yoursite.com/sitemap.xml`
### robots.txt
Add a sitemap directive to robots.txt (use full absolute URL):
```
Sitemap: https://yoursite.com/sitemap.xml
```
## After Making Changes
When you add/remove content or change sitemap settings:
1. Use the **"New Crawl" button** in SmartCrawl's sitemap tab to notify Google
2. Or wait for automatic notification (if set to Automatic mode)
3. Verify the updated sitemap at `yoursite.com/sitemap.xml`
4. Check Google Search Console > Sitemaps for any errors
## Troubleshooting
| Issue | Fix |
|-------|-----|
| Sitemap returns 404 | Flush permalinks (Settings > Permalinks > Save) |
| Post type missing from sitemap | Check SmartCrawl Sitemap settings — ensure the post type is included |
| Noindexed pages appearing in sitemap | Manually exclude them by ID — SmartCrawl doesn't auto-exclude noindexed content |
| WPML duplicate URLs | Known issue — duplicate homepage URLs in sitemap when using WPML |
| Sitemap too large / memory error | SmartCrawl limits to 1,000 posts — contact WPMU DEV support for large sites |
+143
View File
@@ -0,0 +1,143 @@
# Social: Open Graph & Twitter Cards
SmartCrawl controls how your pages appear when shared on social media platforms. Open Graph tags handle Facebook, Instagram, LinkedIn, and Pinterest. Twitter Card tags handle X (formerly Twitter).
## Open Graph (OG) Tags
### What They Control
When someone shares a link on Facebook, Instagram, LinkedIn, or Pinterest, the platform reads these tags to determine:
- **Title** — The headline shown in the share card
- **Description** — The preview text
- **Image** — The thumbnail/preview image
- **URL** — The canonical URL
- **Type** — Content type (website, article, product, etc.)
### Global Settings
| Setting | Recommendation |
|---------|---------------|
| Enable Open Graph | Yes (all post types) |
| Default OG Image | Set a branded fallback image (**1200x630px**) |
| Site Name | Your business name |
### Per-Post Type Defaults
Configure in SmartCrawl > Social for each post type:
- **Posts:** OG type = `article`, use post title and excerpt
- **Pages:** OG type = `website`, use page title and excerpt
- **Products:** Enable WooCommerce Product OG toggle (adds `og:type=product`, price, availability automatically)
### Per-Post Overrides
For important pages, set custom OG values in the SmartCrawl meta box:
| Field | Guidance |
|-------|----------|
| OG Title | Can differ from SEO title — make it more engaging/clickable for social |
| OG Description | Can be longer than meta description (up to ~300 characters). Write for social context. |
| OG Image | Must be **1200x630px** for optimal rendering. Avoid text-heavy images (Facebook may reject them). |
### Key OG Tags Output
```html
<meta property="og:title" content="Page Title" />
<meta property="og:description" content="Page description for social sharing" />
<meta property="og:image" content="https://example.com/image-1200x630.jpg" />
<meta property="og:url" content="https://example.com/page/" />
<meta property="og:type" content="article" />
<meta property="og:site_name" content="Site Name" />
```
## Twitter Cards
### Card Types
SmartCrawl supports:
| Type | Appearance |
|------|-----------|
| `summary` | Small square thumbnail + title + description |
| `summary_large_image` | Large image above title + description |
**Recommendation:** Use `summary_large_image` for most content — larger images get more engagement.
### Configuration
| Setting | Recommendation |
|---------|---------------|
| Enable Twitter Cards | Yes |
| Default Card Type | `summary_large_image` |
| Twitter Site Handle | `@yourbrand` (your brand's Twitter handle) |
### Per-Post Overrides
Twitter Card title, description, and image can be set separately from OG tags. This allows platform-specific messaging:
- **Twitter title:** Shorter, punchier (Twitter is fast-scrolling)
- **Twitter image:** Same 1200x630px works, but can use a different image optimized for Twitter's crop
## Pinterest Verification
Add your Pinterest verification meta tag in SmartCrawl > Social > Pinterest:
```html
<meta name="p:domain_verify" content="your-verification-code" />
```
This verifies your website with Pinterest and enables rich pins.
## Image Guidelines
### Optimal Dimensions
| Platform | Recommended Size | Minimum |
|----------|-----------------|---------|
| Facebook | 1200x630px | 600x315px |
| Twitter | 1200x630px | 300x157px |
| LinkedIn | 1200x627px | 1200x627px |
| Pinterest | 1000x1500px (2:3 ratio) | 600x900px |
### Image Best Practices
- Use **1200x630px** as the universal default (works well on all platforms)
- Avoid images with more than 20% text overlay (Facebook may throttle reach)
- Use high-contrast images that are recognizable at small sizes
- Set a **default/fallback OG image** in SmartCrawl's global settings for pages without featured images
- Product pages should use the product image as OG image
## Debugging Social Shares
### Facebook
Use the [Facebook Sharing Debugger](https://developers.facebook.com/tools/debug/):
1. Enter your URL
2. Click "Debug"
3. Verify title, description, and image are correct
4. Click "Scrape Again" to force Facebook to re-fetch after making changes
### Twitter
Use the [Twitter Card Validator](https://cards-dev.twitter.com/validator):
1. Enter your URL
2. Click "Preview card"
3. Verify the card renders correctly
### LinkedIn
LinkedIn caches aggressively. Use their [Post Inspector](https://www.linkedin.com/post-inspector/):
1. Enter your URL
2. Review the preview
3. Click "Refresh" to clear cache
## Common Issues
| Issue | Fix |
|-------|-----|
| Old image showing on Facebook | Use Facebook Debugger > "Scrape Again" |
| OG tags present but not rendering | Check for duplicate OG tags from other plugins/theme |
| No image in share preview | Set a default OG image in SmartCrawl global settings |
| WooCommerce products missing price in share | Enable the "WooCommerce Product Open Graph" toggle |
| OG tags still active after disabling | Known issue — may persist on homepage after wizard deactivation. Clear manually. |
+190
View File
@@ -0,0 +1,190 @@
# Titles & Meta Descriptions
SmartCrawl's Titles & Meta module controls how every page on your site appears in search results and browser tabs. It uses a macro/variable system for global templates with per-post overrides.
## Template Macros
SmartCrawl uses `%%variable%%` syntax. The full list is accessible via the **"Browse Macros"** button in the Titles & Meta admin screen.
### Core Macros
| Macro | Output |
|-------|--------|
| `%%title%%` | Post/page title |
| `%%sitename%%` | Site name (from Settings > General) |
| `%%sep%%` | Separator character (configurable) |
| `%%excerpt%%` | Post excerpt (auto-generated if not set) |
| `%%excerpt_only%%` | Excerpt only — no auto-generation fallback |
| `%%category%%` | Post primary category |
| `%%tag%%` | Post tags |
| `%%term_title%%` | Term/taxonomy title |
| `%%term_description%%` | Term description |
### Date & Time Macros
| Macro | Output |
|-------|--------|
| `%%date%%` | Post published date |
| `%%modified%%` | Post last modified date |
| `%%currenttime%%` | Current time |
| `%%currentdate%%` | Current date |
| `%%currentday%%` | Current day |
| `%%currentmonth%%` | Current month |
| `%%currentyear%%` | Current year |
### Pagination Macros
| Macro | Output |
|-------|--------|
| `%%page%%` | Page number |
| `%%pagenumber%%` | Current page number |
| `%%pagetotal%%` | Total pages |
| `%%spell_pagenumber%%` | Page number in words ("Page Two of Five") |
| `%%spell_pagetotal%%` | Total pages in words |
### Author & Post Macros
| Macro | Output |
|-------|--------|
| `%%name%%` | Author display name |
| `%%userid%%` | Author user ID |
| `%%id%%` | Post ID |
| `%%pt_single%%` | Post type singular name |
| `%%pt_plural%%` | Post type plural name |
### Special Macros
| Macro | Output |
|-------|--------|
| `%%searchphrase%%` | Search query (for search results page) |
| Custom field macros | Supported with uppercase (v3.11.0+) |
> Additional "dynamic macros" exist for edge cases that do not appear in the Browse Macros list. These are documented in the WPMU DEV support forums.
## Global vs Per-Post Settings
| Level | Scope | How It Works |
|-------|-------|-------------|
| **Global template** | Per post type, per taxonomy, archives, special pages | Set once, applies everywhere via macros |
| **Per-post override** | Individual post/page | Entered in the SmartCrawl meta box in the editor — overrides the global template |
### When to Use Each
- **Global template:** Set it and forget it. Works well for blogs, archives, and consistent content types.
- **Per-post override:** Use for every important page. Homepage, service pages, key landing pages, and high-value blog posts should all have hand-crafted titles and descriptions.
## Recommended Title Templates
### Homepage
```
%%sitename%% %%sep%% [Your primary value proposition]
```
Example output: `Alaska Safe Riders | Motorcycle Safety Courses in Anchorage, AK`
### Posts (Blog)
```
%%title%% %%sep%% %%sitename%%
```
Example output: `What to Wear to a Motorcycle Safety Course | Alaska Safe Riders`
### Pages
```
%%title%% %%sep%% %%sitename%%
```
Override per-page for service pages with keyword-optimized titles.
### Categories
```
%%term_title%% %%sep%% %%sitename%%
```
### Author Archives
```
Posts by %%name%% %%sep%% %%sitename%%
```
(Consider noindexing author archives on single-author sites)
### Search Results
```
Search Results for "%%searchphrase%%" %%sep%% %%sitename%%
```
(Always noindex search results pages)
### 404 Page
```
Page Not Found %%sep%% %%sitename%%
```
## Title Tag Best Practices
- **Length:** 50-60 characters (Google truncates at ~580px pixel width)
- **Primary keyword placement:** As close to the beginning as possible
- **Every page must have a unique title** — duplicates confuse Google
- **Include brand name** at the end (builds brand recognition in SERPs)
- **Do not keyword-stuff** — one primary keyword is enough
- **Use power words for CTR:** "Best", "Guide", "Free", numbers, parentheses
### Good vs Bad Examples
| Bad | Good |
|-----|------|
| `Home - My Website` | `Motorcycle Safety Courses Anchorage, AK \| Alaska Safe Riders` |
| `Services` | `Event Management & Roster Tracking \| ASR Events Manager` |
| `Blog Post Title Here \| Category \| Website Name` | `What to Expect at a Basic Rider Course \| Alaska Safe Riders` |
## Meta Description Best Practices
- **Length:** 150-160 characters (Google truncates unpredictably above this)
- **Include primary keyword** naturally (Google bolds matching terms)
- **Include a call to action:** "Register today", "Learn more", "Contact us"
- **Include differentiators:** Pricing, location, certifications, experience
- **Hand-craft descriptions** for important pages — auto-generated ones rarely perform well
- **Google rewrites ~60% of meta descriptions** but good ones are kept and improve CTR
### Quality Indicators in SmartCrawl
SmartCrawl's SEO status column on post/page lists uses color-coded indicators:
| Color | Meaning |
|-------|---------|
| Green | Description is 120-160 characters, hand-crafted |
| Yellow | Description exists but is outside optimal range or auto-generated |
| Red | No description set |
## Separator Character
Set in Titles & Meta > General. Common choices:
| Separator | Look |
|-----------|------|
| `\|` (pipe) | `Page Title \| Site Name` |
| `—` (em dash) | `Page Title — Site Name` |
| `-` (hyphen) | `Page Title - Site Name` |
| `»` | `Page Title » Site Name` |
**Recommendation:** Use `|` or `—` for a clean, modern appearance.
## Noindex Recommendations
Set these in the Titles & Meta module per post type/taxonomy:
| Content Type | Recommendation | Reason |
|--------------|---------------|--------|
| Tag archives | Noindex | Usually thin content, duplicate of category archives |
| Author archives | Noindex (single-author sites) | Duplicate of main blog page |
| Date archives | Noindex | Thin content, duplicate |
| Search results | Noindex | Dynamic, no SEO value |
| Paginated archives | Noindex | Thin duplicate content |
| Media attachment pages | Noindex | Single image on a page, no value |
| Thank you pages | Noindex | No search value |
## Post Type Configuration
Check **Settings > Advanced > Post Types** to ensure all relevant content types are enabled:
- Posts and Pages (default)
- WooCommerce Products (if applicable)
- Portfolio items
- Any custom post types
**If a post type is not enabled, its pages will not appear in sitemaps and will not get SmartCrawl meta box in the editor.**
+184
View File
@@ -0,0 +1,184 @@
# Keyword Research Worksheet
Use this template to research and organize keywords for a specific site. Copy this file per site.
## Site Information
- **Site:**
- **URL:**
- **Business type:**
- **Primary location(s):**
- **Target audience:**
- **Date:**
---
## 1. Seed Keywords
List everything the target audience might search for:
### Services / Products
| Service/Product | Seed Keywords |
|----------------|---------------|
| | |
| | |
| | |
### Problems / Questions
| Problem/Question | Seed Keywords |
|-----------------|---------------|
| | |
| | |
### Location Variations
| Location | Format |
|----------|--------|
| City | `[service] [city]` |
| State | `[service] [state]` |
| Neighborhood | `[service] [neighborhood]` |
| Region | `[service] [region]` |
---
## 2. Keyword Matrix (Local)
Fill in with Target / Assess / Skip for each intersection:
| Service ↓ \ Location → | [City 1] | [City 2] | [City 3] | [State] |
|------------------------|----------|----------|----------|---------|
| [Service 1] | | | | |
| [Service 2] | | | | |
| [Service 3] | | | | |
---
## 3. Expanded Keywords
After running seed keywords through tools (Google Autocomplete, PAA, Keyword Planner, Ubersuggest):
### Informational Keywords (Blog Content)
| Keyword | Est. Volume | Difficulty | Intent | Notes |
|---------|------------|------------|--------|-------|
| | | | Informational | |
| | | | Informational | |
| | | | Informational | |
| | | | Informational | |
| | | | Informational | |
### Commercial Keywords (Service/Comparison Pages)
| Keyword | Est. Volume | Difficulty | Intent | Notes |
|---------|------------|------------|--------|-------|
| | | | Commercial | |
| | | | Commercial | |
| | | | Commercial | |
### Transactional Keywords (Registration/Contact/Buy)
| Keyword | Est. Volume | Difficulty | Intent | Notes |
|---------|------------|------------|--------|-------|
| | | | Transactional | |
| | | | Transactional | |
| | | | Transactional | |
---
## 4. People Also Ask (PAA) Questions
From Google PAA results for your primary keywords:
| Question | Target Page | Priority |
|----------|-------------|----------|
| | | |
| | | |
| | | |
| | | |
| | | |
---
## 5. Competitor Keywords
From reviewing competitor sites and sitemaps:
| Competitor | URL | Keywords They Target | Gap (We Don't Cover) |
|-----------|-----|---------------------|---------------------|
| | | | |
| | | | |
| | | | |
---
## 6. Search Console Data (Existing Sites Only)
### High-Impression Keywords (What Google Shows Us For)
| Query | Impressions | Clicks | CTR | Position | Page |
|-------|------------|--------|-----|----------|------|
| | | | | | |
| | | | | | |
| | | | | | |
### Striking Distance (Position 8-20)
| Query | Position | Page | Action |
|-------|----------|------|--------|
| | | | |
| | | | |
| | | | |
### High Impressions / Low CTR (Title/Description Fix)
| Query | Impressions | CTR | Page | Fix Needed |
|-------|------------|-----|------|-----------|
| | | | | |
| | | | | |
---
## 7. Keyword-to-Page Mapping
Assign one primary keyword per page:
| Page | Primary Keyword | Secondary Keywords (2-3) | Intent | Status |
|------|----------------|-------------------------|--------|--------|
| Homepage | | | Nav/Commercial | |
| About | | | Navigational | |
| Contact | | | Nav/Transactional | |
| [Service 1] | | | Commercial | |
| [Service 2] | | | Commercial | |
| [Blog Post 1] | | | Informational | |
| [Blog Post 2] | | | Informational | |
Status: Not Started / In Progress / Optimized / Monitoring
---
## 8. Content Gap — New Pages Needed
Keywords that don't have a natural home on existing pages:
| Keyword | Intent | Proposed Page | Priority |
|---------|--------|--------------|----------|
| | | | |
| | | | |
| | | | |
---
## 9. Seasonal Opportunities
| Season/Event | Keywords | Content Needed | Publish By |
|-------------|----------|---------------|-----------|
| | | | |
| | | | |
---
## Notes
_Research observations, tool screenshots, or additional context:_
+206
View File
@@ -0,0 +1,206 @@
# Page Optimization Checklist
Use this template when optimizing an individual page. Copy per page.
## Page Information
- **Site:**
- **Page URL:**
- **Page type:** Homepage / Service / Blog / Portfolio / Contact / About / Landing
- **Primary keyword:**
- **Secondary keywords (2-3):**
- **Search intent:** Informational / Navigational / Commercial / Transactional
- **Date optimized:**
---
## SmartCrawl Setup
- [ ] Focus keyword set in SmartCrawl (primary)
- [ ] Secondary keywords added (up to 3 total)
- [ ] SEO analysis tab reviewed
- [ ] Readability analysis tab reviewed
- [ ] No keyword cannibalization (checked against other posts)
---
## Title Tag
- [ ] Contains primary keyword
- [ ] Keyword near the beginning
- [ ] Length: 50-60 characters
- [ ] Unique (not used on any other page)
- [ ] Includes brand name
- [ ] Compelling for CTR (value prop, numbers, power words)
**Title tag:** `________________________________________`
**Character count:** ____
---
## Meta Description
- [ ] Hand-crafted (not auto-generated)
- [ ] Contains primary keyword
- [ ] Length: 150-160 characters
- [ ] Includes call to action
- [ ] Includes differentiator (price, location, certification, etc.)
- [ ] Compelling for CTR
**Meta description:** `________________________________________`
**Character count:** ____
---
## Headings
- [ ] Exactly one H1 on the page
- [ ] H1 contains primary keyword
- [ ] H2s cover major sections (3-8 total)
- [ ] At least one H2 contains a secondary keyword
- [ ] H3s used for subsections where needed
- [ ] No skipped levels (H1 → H2 → H3, not H1 → H3)
**H1:** `________________________________________`
**H2s:**
1.
2.
3.
4.
---
## Content
- [ ] Primary keyword in first 100-200 words
- [ ] Topic covered comprehensively (no obvious gaps vs top competitors)
- [ ] Written for humans first, search engines second
- [ ] Short paragraphs (2-4 sentences)
- [ ] Uses lists, tables, or structured formatting where appropriate
- [ ] Readability score: ____ (target 60-70 Flesch-Kincaid)
- [ ] No keyword stuffing
- [ ] Answers the searcher's question/need clearly
**Word count:** ____
---
## Images
- [ ] At least one image on the page
- [ ] Primary image has alt text with keyword (where natural)
- [ ] All images have descriptive alt text
- [ ] Image file names are descriptive (not `IMG_4532.jpg`)
- [ ] Images are optimized (WebP/compressed, explicit dimensions)
- [ ] Below-fold images use lazy loading
**Images on page:** ____
---
## Internal Links
- [ ] Page links to 2-3+ other relevant pages on the site
- [ ] 2-3+ other pages link to this page
- [ ] Anchor text is descriptive (not "click here")
- [ ] Links are contextually relevant
**Outgoing internal links:**
1. `[anchor text]``[destination URL]`
2. `[anchor text]``[destination URL]`
3. `[anchor text]``[destination URL]`
**Incoming internal links from:**
1.
2.
3.
---
## URL
- [ ] Short and descriptive
- [ ] Contains primary keyword
- [ ] Uses hyphens (not underscores)
- [ ] Lowercase
- [ ] No dates (unless truly time-bound)
- [ ] No unnecessary parameters or IDs
**URL slug:** `/________________________________/`
---
## Open Graph / Social
- [ ] OG title set (or using SEO title as default)
- [ ] OG description set
- [ ] OG image set (1200x630px)
- [ ] Twitter Card configured
- [ ] Tested with Facebook Sharing Debugger
---
## Schema Markup
- [ ] Appropriate schema type applied
- [ ] Schema validated at Google Rich Results Test
- [ ] No errors or warnings
**Schema type:** ____
---
## Technical
- [ ] Page loads over HTTPS
- [ ] Canonical tag present and correct
- [ ] Not accidentally noindexed
- [ ] Included in XML sitemap
- [ ] Mobile-friendly
- [ ] Page load time acceptable
---
## SmartCrawl Analysis Results
### SEO Checks
| Check | Status |
|-------|--------|
| Keyphrase in title | |
| Keyphrase in URL | |
| Keyphrase in meta description | |
| Keyphrase in H1 | |
| Keyphrase in subheadings | |
| Keyphrase in content | |
| Keyphrase in image alt | |
| External links present | |
| Internal links present | |
| Meta description quality | |
### Readability
| Check | Status |
|-------|--------|
| Flesch-Kincaid score | |
| Sentence length | |
| Passive voice | |
| Paragraph length | |
| Subheading distribution | |
---
## Post-Optimization
- [ ] Cleared Nginx cache: `rm -rf /var/cache/ea-nginx/proxy/<account>/*`
- [ ] Verified changes render correctly on frontend
- [ ] Facebook Sharing Debugger: scraped updated OG tags
- [ ] Google Rich Results Test: validated schema
- [ ] Search Console: requested re-indexing (optional, for urgent changes)
---
## Notes
_Observations, decisions made, things to revisit:_
+175
View File
@@ -0,0 +1,175 @@
# Site SEO Audit Checklist
Use this template before starting SEO work on any site. Copy this file and fill it in for the specific site.
## Site Information
- **Site URL:**
- **cPanel Account:**
- **Cache path:** `/var/cache/ea-nginx/proxy/<account>/`
- **CMS:** WordPress / Static HTML / Other
- **SEO Plugin:** SmartCrawl Free / SmartCrawl Pro / Other / None
- **Date of Audit:**
- **Auditor:**
---
## 1. Current State Assessment
### Indexing
- [ ] Site is indexed in Google (`site:example.com` returns results)
- [ ] Approximate number of indexed pages: ____
- [ ] Google Search Console connected and verified
- [ ] Any manual actions or security issues in Search Console? ____
### Existing SEO Setup
- [ ] SEO plugin installed? Which one? ____
- [ ] Title tags customized or default? ____
- [ ] Meta descriptions set? How many pages? ____
- [ ] Schema markup present? Type(s)? ____
- [ ] XML sitemap exists? URL: ____
- [ ] Sitemap submitted to Search Console?
- [ ] Robots.txt exists and is correct?
- [ ] Open Graph tags present?
- [ ] Any existing redirects?
---
## 2. Technical SEO
### Performance
- [ ] Page load time (GTmetrix or PageSpeed Insights): ____ seconds
- [ ] LCP (Largest Contentful Paint): ____
- [ ] INP (Interaction to Next Paint): ____
- [ ] CLS (Cumulative Layout Shift): ____
- [ ] Mobile-friendly test: Pass / Fail
### Security & Protocol
- [ ] HTTPS enabled (no mixed content)
- [ ] HTTP → HTTPS redirect working
- [ ] www / non-www preference set with redirect
- [ ] Trailing slash consistency
### Crawlability
- [ ] Robots.txt reviewed (not blocking CSS/JS/important content)
- [ ] No accidental `noindex` on important pages
- [ ] No orphan pages (pages with zero internal links)
- [ ] No broken internal links (404s)
- [ ] Canonical tags present and correct
---
## 3. On-Page SEO
### Title Tags
- [ ] Homepage has custom title tag
- [ ] Service pages have custom title tags
- [ ] Blog posts have title tags (template or custom)
- [ ] Any duplicate title tags? List: ____
- [ ] Title tag length (50-60 chars)? ____
### Meta Descriptions
- [ ] Homepage has hand-crafted meta description
- [ ] Service pages have meta descriptions
- [ ] Any pages missing descriptions? Count: ____
- [ ] Description length (150-160 chars)? ____
### Content
- [ ] Every page has exactly one H1
- [ ] Header hierarchy is correct (no skipped levels)
- [ ] Images have alt text
- [ ] Internal linking structure exists
- [ ] Content quality assessment (thin pages? duplicate content?)
### URLs
- [ ] URLs are clean (no ?p=123 or parameter junk)
- [ ] URLs include keywords where appropriate
- [ ] Hyphens used (not underscores)
- [ ] Reasonable length
---
## 4. Local SEO (If Applicable)
- [ ] Google Business Profile exists and is verified
- [ ] GBP information is complete and accurate
- [ ] NAP is consistent across website, GBP, and directories
- [ ] LocalBusiness schema on website
- [ ] Google Map embedded on contact page
- [ ] Reviews: count ____, average rating ____
- [ ] Listed in relevant local directories
---
## 5. Content Inventory
List the key pages and their current SEO status:
| Page | URL | Title Tag | Meta Desc | H1 | Focus KW | Status |
|------|-----|-----------|-----------|-----|----------|--------|
| Homepage | / | | | | | |
| About | /about/ | | | | | |
| Contact | /contact/ | | | | | |
| Service 1 | | | | | | |
| Service 2 | | | | | | |
| Blog (if any) | /blog/ | | | | | |
Status options: Good / Needs Work / Missing / N/A
---
## 6. Search Console Quick Wins
After connecting Search Console, check:
- [ ] Top queries by impressions (what Google shows the site for)
- [ ] Striking distance keywords (positions 8-20)
- [ ] Pages with high impressions but low CTR (title/description issue)
- [ ] Any crawl errors or indexing issues
### Striking Distance Keywords Found
| Keyword | Current Position | Page | Action Needed |
|---------|-----------------|------|---------------|
| | | | |
| | | | |
| | | | |
---
## 7. Priority Actions
Based on the audit, list the top actions in priority order:
### Immediate (Do First)
1.
2.
3.
### Soon (This Week)
1.
2.
3.
### Ongoing (Monthly)
1.
2.
3.
---
## Notes
_Additional observations, competitor insights, or client-specific considerations:_