-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathseo-analyzer.sh
More file actions
executable file
·163 lines (128 loc) · 4.04 KB
/
seo-analyzer.sh
File metadata and controls
executable file
·163 lines (128 loc) · 4.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/bin/bash
# SEO 分析器
# 分析网页 SEO 优化情况
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
URL="$1"
if [ -z "$URL" ]; then
echo -e "${RED}用法: $0 <URL>${NC}"
exit 1
fi
echo -e "${BLUE}🦞 SEO 分析器${NC}"
echo -e "${YELLOW}分析目标: $URL${NC}\n"
# 检查 HTTP 状态
check_status() {
echo -e "${GREEN}=== HTTP 状态 ===${NC}"
STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
if [ "$STATUS" = "200" ]; then
echo -e "状态码: ${GREEN}$STATUS${NC} ✅"
else
echo -e "状态码: ${RED}$STATUS${NC} ❌"
fi
# 响应时间
TIME=$(curl -s -o /dev/null -w "%{time_total}" "$URL")
echo -e "响应时间: ${TIME}s"
}
# 检查 Meta 标签
check_meta() {
echo -e "\n${GREEN}=== Meta 标签 ===${NC}"
# 获取页面内容
CONTENT=$(curl -s "$URL")
# Title
TITLE=$(echo "$CONTENT" | grep -oP '(?<=<title>).*?(?=</title>)' | head -1)
if [ -n "$TITLE" ]; then
LEN=${#TITLE}
echo -e "标题: ${GREEN}$TITLE${NC} ($LEN 字符)"
if [ $LEN -lt 30 ] || [ $LEN -gt 60 ]; then
echo -e " ${YELLOW}⚠ 建议标题长度 30-60 字符${NC}"
fi
else
echo -e "标题: ${RED}未找到${NC} ❌"
fi
# Description
DESC=$(echo "$CONTENT" | grep -oP '(?<=<meta name="description" content=").*?(?=")' | head -1)
if [ -n "$DESC" ]; then
LEN=${#DESC}
echo -e "描述: ${GREEN}$DESC${NC} ($LEN 字符)"
if [ $LEN -lt 120 ] || [ $LEN -gt 160 ]; then
echo -e " ${YELLOW}⚠ 建议描述长度 120-160 字符${NC}"
fi
else
echo -e "描述: ${RED}未找到${NC} ❌"
fi
# Canonical
CANONICAL=$(echo "$CONTENT" | grep -oP '(?<=<link rel="canonical" href=").*?(?=")' | head -1)
if [ -n "$CANONICAL" ]; then
echo -e "Canonical: ${GREEN}$CANONICAL${NC} ✅"
else
echo -e "Canonical: ${YELLOW}未设置${NC} ⚠"
fi
}
# 检查标题结构
check_headings() {
echo -e "\n${GREEN}=== 标题结构 ===${NC}"
CONTENT=$(curl -s "$URL")
H1_COUNT=$(echo "$CONTENT" | grep -c '<h1' || true)
if [ "$H1_COUNT" = "1" ]; then
echo -e "H1 标签: ${GREEN}1 个${NC} ✅"
else
echo -e "H1 标签: ${YELLOW}$H1_COUNT 个${NC} ⚠ 建议每页只有一个 H1"
fi
H2_COUNT=$(echo "$CONTENT" | grep -c '<h2' || true)
echo -e "H2 标签: $H2_COUNT 个"
H3_COUNT=$(echo "$CONTENT" | grep -c '<h3' || true)
echo -e "H3 标签: $H3_COUNT 个"
}
# 检查图片
check_images() {
echo -e "\n${GREEN}=== 图片检查 ===${NC}"
CONTENT=$(curl -s "$URL")
IMG_TOTAL=$(echo "$CONTENT" | grep -c '<img' || true)
IMG_ALT=$(echo "$CONTENT" | grep '<img' | grep -c 'alt=' || true)
IMG_NO_ALT=$((IMG_TOTAL - IMG_ALT))
echo -e "总图片数: $IMG_TOTAL"
echo -e "有 alt 属性: ${GREEN}$IMG_ALT${NC}"
if [ $IMG_NO_ALT -gt 0 ]; then
echo -e "缺少 alt: ${YELLOW}$IMG_NO_ALT${NC} ⚠"
fi
}
# 检查链接
check_links() {
echo -e "\n${GREEN}=== 链接检查 ===${NC}"
CONTENT=$(curl -s "$URL")
INTERNAL=$(echo "$CONTENT" | grep -oP '(?<=href=")[^"]*' | grep -c 'miaoquai.com' || true)
EXTERNAL=$(echo "$CONTENT" | grep -oP '(?<=href=")[^"]*' | grep -cE '^https?://' | grep -v 'miaoquai.com' || true)
echo -e "内链数: $INTERNAL"
echo -e "外链数: $EXTERNAL"
}
# 生成报告
generate_report() {
REPORT_FILE="/tmp/seo-report-$(date +%Y%m%d%H%M%S).md"
cat > "$REPORT_FILE" << EOF
# SEO 分析报告
**URL**: $URL
**分析时间**: $(date '+%Y-%m-%d %H:%M:%S')
## 检查项目
- [x] HTTP 状态
- [x] Meta 标签
- [x] 标题结构
- [x] 图片优化
- [x] 链接检查
---
🦞 Generated by Miaoquai OpenClaw Tools
EOF
echo -e "\n${GREEN}✅ 报告已生成: $REPORT_FILE${NC}"
}
# 运行所有检查
check_status
check_meta
check_headings
check_images
check_links
generate_report
echo -e "\n${GREEN}✅ SEO 分析完成${NC}"