seo analysis คือ — คู่มือฉบับสมบูรณ์ 2026 | SiamCafe Blog

seo analysis คือ — คู่มือฉบับสมบูรณ์ 2026 | SiamCafe Blog
seo analysis คือ — คู่มือฉบับสมบูรณ์ 2026 | SiamCafe Blog

SEO Analysis คืออะไร

SEO Analysis (การวิเคราะห์ SEO) คือกระบวนการตรวจสอบและประเมินประสิทธิภาพของเว็บไซต์ในแง่ Search Engine Optimization เพื่อหาจุดแข็ง จุดอ่อน และโอกาสในการปรับปรุงอันดับบน Google ครอบคลุม Technical SEO, On-page SEO, Off-page SEO, Content Analysis และ Competitor Analysis การทำ SEO Analysis เป็นประจำช่วยให้เว็บไซต์ติดอันดับสูงขึ้น มี organic traffic มากขึ้น และแปลงเป็นรายได้ได้ดีขึ้น บทความนี้อธิบายวิธีวิเคราะห์ SEO ครบทุกด้าน พร้อม Python tools สำหรับ automate การวิเคราะห์

SEO Analysis Components

# seo_components.py — SEO Analysis components
import json

class SEOComponents:
 COMPONENTS = {
 "technical": {
 "name": "Technical SEO",
 "description": "โครงสร้างเว็บไซต์ที่ search engine crawl และ index ได้ง่าย",
 "checks": [
 "Site speed (Core Web Vitals: LCP, FID, CLS)",
 "Mobile-friendliness (responsive design)",
 "SSL certificate (HTTPS)",
 "XML sitemap + robots.txt",
 "Canonical tags (ป้องกัน duplicate content)",
 "Structured data (Schema.org markup)",
 "Crawl errors (404, 500, redirect chains)",
 ],
 },
 "onpage": {
 "name": "On-page SEO",
 "description": "เนื้อหาและ HTML elements ในแต่ละหน้า",
 "checks": [
 "Title tag (50-60 ตัวอักษร, มี keyword)",
 "Meta description (150-160 ตัวอักษร)",
 "H1-H6 heading structure",
 "Keyword density (1-3%)",
 "Internal linking",
 "Image alt text",
 "URL structure (สั้น, มี keyword)",
 ],
 },
 "offpage": {
 "name": "Off-page SEO",
 "description": "สัญญาณภายนอกเว็บไซต์ — backlinks, social signals",
 "checks": [
 "Backlink profile (quality + quantity)",
 "Domain Authority / Domain Rating",
 "Referring domains diversity",
 "Anchor text distribution",
 "Social media signals",
 "Brand mentions",
 ],
 },
 "content": {
 "name": "Content Analysis",
 "description": "คุณภาพและความเกี่ยวข้องของเนื้อหา",
 "checks": [
 "Content quality (E-E-A-T: Experience, Expertise, Authority, Trust)",
 "Content freshness (อัปเดตเป็นประจำ)",
 "Content depth (ครอบคลุม topic)",
 "Keyword targeting (primary + secondary + LSI)",
 "Content gap analysis (topics ที่ยังไม่มี)",
 ],
 },
 "competitor": {
 "name": "Competitor Analysis",
 "description": "วิเคราะห์คู่แข่งเพื่อหาโอกาส",
 "checks": [
 "Competitor keywords (keywords ที่คู่แข่งติดอันดับ)",
 "Content comparison (เนื้อหาของคู่แข่ง)",
 "Backlink gap (backlinks ที่คู่แข่งมี เราไม่มี)",
 "SERP features (featured snippets, PAA)",
 ],
 },
 }

 def show_components(self):
 print("=== SEO Analysis Components ===\n")
 for key, comp in self.COMPONENTS.items():
 print(f"[{comp['name']}]")
 print(f" {comp['description']}")
 for check in comp["checks"][:4]:
 print(f" • {check}")
 print()

seo = SEOComponents()
seo.show_components()

Python SEO Analyzer

# seo_analyzer.py — Python SEO analysis tool
import json
import re

class SEOAnalyzer:
 CODE = """
# seo_tool.py — Automated SEO analysis
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
import re

class PageSEOAnalyzer:
 def __init__(self, url):
 self.url = url
 self.soup = None
 self.issues = []
 self.scores = {}
 
 def fetch(self):
 resp = requests.get(self.url, timeout=10)
 self.soup = BeautifulSoup(resp.text, 'html.parser')
 self.status_code = resp.status_code
 self.response_time = resp.elapsed.total_seconds()
 return self
 
 def check_title(self):
 title = self.soup.find('title')
 if not title:
 self.issues.append(('critical', 'Missing title tag'))
 self.scores['title'] = 0
 return
 
 text = title.get_text().strip()
 length = len(text)
 
 if length < 30:
 self.issues.append(('warning', f'Title too short ({length} chars)'))
 self.scores['title'] = 50
 elif length > 60:
 self.issues.append(('warning', f'Title too long ({length} chars)'))
 self.scores['title'] = 70
 else:
 self.scores['title'] = 100
 
 def check_meta_description(self):
 meta = self.soup.find('meta', attrs={'name': 'description'})
 if not meta or not meta.get('content'):
 self.issues.append(('critical', 'Missing meta description'))
 self.scores['meta_desc'] = 0
 return
 
 length = len(meta['content'])
 if length < 120:
 self.issues.append(('warning', f'Meta description short ({length} chars)'))
 self.scores['meta_desc'] = 60
 elif length > 160:
 self.issues.append(('warning', f'Meta description long ({length} chars)'))
 self.scores['meta_desc'] = 70
 else:
 self.scores['meta_desc'] = 100
 
 def check_headings(self):
 h1s = self.soup.find_all('h1')
 if len(h1s) == 0:
 self.issues.append(('critical', 'Missing H1 tag'))
 self.scores['h1'] = 0
 elif len(h1s) > 1:
 self.issues.append(('warning', f'Multiple H1 tags ({len(h1s)})'))
 self.scores['h1'] = 60
 else:
 self.scores['h1'] = 100
 
 def check_images(self):
 images = self.soup.find_all('img')
 missing_alt = [img for img in images if not img.get('alt')]
 
 if missing_alt:
 self.issues.append(('warning', f'{len(missing_alt)} images missing alt text'))
 self.scores['images'] = max(0, 100 - len(missing_alt) * 10)
 else:
 self.scores['images'] = 100
 
 def check_links(self):
 links = self.soup.find_all('a', href=True)
 internal = [l for l in links if urlparse(l['href']).netloc in ('', urlparse(self.url).netloc)]
 external = [l for l in links if l not in internal]
 
 self.scores['internal_links'] = min(100, len(internal) * 5)
 self.scores['external_links'] = min(100, len(external) * 10)
 
 def full_analysis(self):
 self.fetch()
 self.check_title()
 self.check_meta_description()
 self.check_headings()
 self.check_images()
 self.check_links()
 
 overall = sum(self.scores.values()) / max(len(self.scores), 1)
 return {
 'url': self.url,
 'overall_score': round(overall, 1),
 'scores': self.scores,
 'issues': self.issues,
 'response_time': self.response_time,
 }

# Usage
analyzer = PageSEOAnalyzer('https://example.com')
result = analyzer.full_analysis()
print(f"Score: {result['overall_score']}/100")
for severity, issue in result['issues']:
 print(f" [{severity.upper()}] {issue}")
"""

 def show_code(self):
 print("=== SEO Analyzer ===")
 print(self.CODE[:600])

analyzer = SEOAnalyzer()
analyzer.show_code()

SEO Tools

# seo_tools.py — SEO tools comparison
import json

class SEOTools:
 FREE_TOOLS = {
 "google_search_console": {
 "name": "Google Search Console",
 "description": "ดู keywords ที่ Google แสดงเว็บไซต์, clicks, impressions, CTR, position",
 "best_for": "Keyword performance, indexing issues, Core Web Vitals",
 "cost": "ฟรี",
 },
 "google_analytics": {
 "name": "Google Analytics 4",
 "description": "วิเคราะห์ traffic, user behavior, conversions",
 "best_for": "Traffic analysis, user journey, conversion tracking",
 "cost": "ฟรี",
 },
 "google_pagespeed": {
 "name": "Google PageSpeed Insights",
 "description": "วัด Core Web Vitals และ performance score",
 "best_for": "Site speed, mobile performance, CWV",
 "cost": "ฟรี",
 },
 "google_trends": {
 "name": "Google Trends",
 "description": "ดู trend ของ keywords ตาม timeline และ region",
 "best_for": "Keyword trends, seasonal content planning",
 "cost": "ฟรี",
 },
 }

 PAID_TOOLS = {
 "ahrefs": {
 "name": "Ahrefs",
 "description": "Backlink analysis, keyword research, site audit",
 "best_for": "Backlink analysis ดีที่สุด, competitor research",
 "cost": "$99-999/month",
 },
 "semrush": {
 "name": "SEMrush",
 "description": "All-in-one SEO toolkit — keyword, audit, content, PPC",
 "best_for": "Keyword research, content marketing, PPC analysis",
 "cost": "$119-449/month",
 },
 "screaming_frog": {
 "name": "Screaming Frog SEO Spider",
 "description": "Website crawler — technical SEO audit",
 "best_for": "Technical SEO audit, crawl analysis",
 "cost": "ฟรี (500 URLs) / £199/year (unlimited)",
 },
 "surfer": {
 "name": "Surfer SEO",
 "description": "Content optimization — วิเคราะห์ SERP แนะนำ content",
 "best_for": "Content optimization, NLP-based recommendations",
 "cost": "$49-199/month",
 },
 }

 def show_free(self):
 print("=== Free SEO Tools ===\n")
 for key, tool in self.FREE_TOOLS.items():
 print(f"[{tool['name']}] {tool['cost']}")
 print(f" Best for: {tool['best_for']}")
 print()

 def show_paid(self):
 print("=== Paid SEO Tools ===")
 for key, tool in self.PAID_TOOLS.items():
 print(f" [{tool['name']}] {tool['cost']} — {tool['best_for']}")

tools = SEOTools()
tools.show_free()
tools.show_paid()

Keyword Research

# keyword_research.py — Keyword research guide
import json
import random

class KeywordResearch:
 PROCESS = {
 "seed": {
 "name": "1. Seed Keywords",
 "description": "เริ่มจาก keywords กว้างๆ ที่เกี่ยวกับธุรกิจ",
 "example": "SEO, การตลาดออนไลน์, digital marketing",
 },
 "expand": {
 "name": "2. Expand Keywords",
 "description": "ใช้ tools ขยาย seed keywords เป็น long-tail keywords",
 "tools": "Google Autocomplete, People Also Ask, Ahrefs Keywords Explorer",
 },
 "analyze": {
 "name": "3. Analyze Metrics",
 "description": "วิเคราะห์ search volume, keyword difficulty, CPC",
 "metrics": "Volume > 100/month, KD < 30 (เริ่มต้น), CPC > 0 (commercial intent)",
 },
 "intent": {
 "name": "4. Search Intent",
 "description": "เข้าใจ intent ของ keyword — Informational, Commercial, Transactional, Navigational",
 "mapping": "Informational → blog, Commercial → comparison, Transactional → product page",
 },
 "prioritize": {
 "name": "5. Prioritize",
 "description": "เลือก keywords ที่มีโอกาสติดอันดับ + ตรง business goal",
 "formula": "Priority = (Volume × CTR potential) / Difficulty",
 },
 }

 def show_process(self):
 print("=== Keyword Research Process ===\n")
 for key, step in self.PROCESS.items():
 print(f"[{step['name']}]")
 print(f" {step['description']}")
 print()

 def keyword_example(self):
 print("=== Keyword Analysis Example ===")
 keywords = [
 {"keyword": "seo analysis คือ", "volume": random.randint(500, 2000), "kd": random.randint(10, 30), "intent": "Informational"},
 {"keyword": "seo analysis tool", "volume": random.randint(1000, 5000), "kd": random.randint(20, 50), "intent": "Commercial"},
 {"keyword": "seo audit free", "volume": random.randint(500, 3000), "kd": random.randint(15, 40), "intent": "Transactional"},
 {"keyword": "วิเคราะห์ seo เว็บไซต์", "volume": random.randint(200, 1000), "kd": random.randint(5, 20), "intent": "Informational"},
 ]
 print(f" {'Keyword':<30} {'Volume':>8} {'KD':>5} {'Intent':<15}")
 print(f" {'-'*60}")
 for kw in keywords:
 print(f" {kw['keyword']:<30} {kw['volume']:>8} {kw['kd']:>5} {kw['intent']:<15}")

kr = KeywordResearch()
kr.show_process()
kr.keyword_example()

SEO Audit Checklist

# audit_checklist.py — SEO audit checklist
import json

class SEOAuditChecklist:
 CHECKLIST = {
 "technical": [
 "HTTPS enabled (SSL certificate)",
 "Mobile-friendly (responsive design)",
 "Site speed < 3 seconds (LCP < 2.5s)",
 "XML sitemap submitted to GSC",
 "robots.txt ไม่ block important pages",
 "No broken links (404 errors)",
 "Canonical tags ถูกต้อง",
 "Schema markup (Organization, Article, FAQ)",
 "Hreflang tags (ถ้ามีหลายภาษา)",
 ],
 "onpage": [
 "Title tags unique ทุกหน้า (50-60 chars)",
 "Meta descriptions unique (150-160 chars)",
 "H1 tag มี 1 อัน per page",
 "H2-H6 structure ถูกต้อง",
 "Images มี alt text",
 "Internal links เชื่อมหน้าสำคัญ",
 "URL สั้น มี keyword",
 "Content > 1,000 words (สำหรับ blog)",
 ],
 "offpage": [
 "Backlinks จาก high-authority sites",
 "Anchor text หลากหลาย (branded + keyword + generic)",
 "No toxic/spam backlinks",
 "Google Business Profile (ถ้ามี local business)",
 "Social media profiles active",
 ],
 "content": [
 "Target keyword ใน title, H1, first paragraph",
 "Content ตอบ search intent",
 "No duplicate content",
 "Content updated ภายใน 6 เดือน",
 "FAQ section (ช่วยได้ featured snippets)",
 ],
 }

 def show_checklist(self):
 print("=== SEO Audit Checklist ===\n")
 for category, items in self.CHECKLIST.items():
 print(f"[{category.upper()}]")
 for item in items[:5]:
 print(f" □ {item}")
 print()

 def scoring(self):
 print("=== SEO Score Guide ===")
 scores = [
 {"range": "90-100", "grade": "A", "status": "ดีมาก — maintain + optimize"},
 {"range": "70-89", "grade": "B", "status": "ดี — fix medium issues"},
 {"range": "50-69", "grade": "C", "status": "ปานกลาง — fix critical + medium"},
 {"range": "30-49", "grade": "D", "status": "ต้องปรับปรุงมาก"},
 {"range": "0-29", "grade": "F", "status": "ต้อง overhaul ทั้งระบบ"},
 ]
 for s in scores:
 print(f" [{s['grade']}] {s['range']:>6} — {s['status']}")

audit = SEOAuditChecklist()
audit.show_checklist()
audit.scoring()

FAQ - คำถามที่พบบ่อย

Q: SEO Analysis ต้องทำบ่อยแค่ไหน?

A: Technical audit: ทุกเดือน (automated) หรือทุกไตรมาส (manual) Keyword tracking: ทุกสัปดาห์ Content audit: ทุก 3-6 เดือน Backlink monitoring: ทุกเดือน Competitor analysis: ทุกไตรมาส ใช้ tools อย่าง Google Search Console ดูข้อมูลทุกสัปดาห์

Q: เริ่มทำ SEO Analysis อย่างไร?

A: Step 1: Setup Google Search Console + Google Analytics (ฟรี) Step 2: Crawl เว็บด้วย Screaming Frog (ฟรี 500 URLs) Step 3: ตรวจ Core Web Vitals (PageSpeed Insights) Step 4: วิเคราะห์ keywords ที่ติดอันดับ (GSC) Step 5: ดู backlinks (Ahrefs free backlink checker) Step 6: แก้ไข critical issues ก่อน → medium → low

Q: Core Web Vitals สำคัญแค่ไหน?

A: Google ใช้เป็น ranking factor ตั้งแต่ 2021 LCP (Largest Contentful Paint): < 2.5s = ดี FID (First Input Delay): < 100ms = ดี (เปลี่ยนเป็น INP แล้ว) CLS (Cumulative Layout Shift): < 0.1 = ดี ส่งผลต่อ ranking โดยเฉพาะ mobile — ต้อง optimize

Q: Tool ไหนดีที่สุดสำหรับ SEO Analysis?

A: ฟรี: Google Search Console + Google Analytics + Screaming Frog Budget: Ubersuggest ($29/month) หรือ SE Ranking Professional: Ahrefs ($99/month) หรือ SEMrush ($119/month) Enterprise: SEMrush Enterprise หรือ BrightEdge เริ่มจาก: GSC + GA ฟรี → เพิ่ม Ahrefs/SEMrush เมื่อ serious