n8n-nodes-seoscoreapi 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# n8n-nodes-seoscoreapi
|
|
2
|
+
|
|
3
|
+
[n8n](https://n8n.io/) community node for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues in your automation workflows.
|
|
4
|
+
|
|
5
|
+
## Operations
|
|
6
|
+
|
|
7
|
+
| Operation | Description |
|
|
8
|
+
|-----------|-------------|
|
|
9
|
+
| **Audit URL** | Run a full 28-check SEO audit on any URL |
|
|
10
|
+
| **Batch Audit** | Audit up to 10 URLs in one call (paid plans) |
|
|
11
|
+
| **Check Usage** | View your API usage and limits |
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
1. Get a free API key at [seoscoreapi.com](https://seoscoreapi.com) (no credit card needed)
|
|
16
|
+
2. Install this node: **Settings → Community Nodes → Install → `n8n-nodes-seoscoreapi`**
|
|
17
|
+
3. Add your API key in the credentials
|
|
18
|
+
|
|
19
|
+
## Example Workflows
|
|
20
|
+
|
|
21
|
+
### Scheduled SEO Monitoring
|
|
22
|
+
**Cron (weekly)** → **SEO Score API (Audit)** → **IF (score < 80)** → **Slack/Email alert**
|
|
23
|
+
|
|
24
|
+
### Bulk Client Audits
|
|
25
|
+
**Spreadsheet (client URLs)** → **SEO Score API (Audit)** → **Google Sheets (write results)**
|
|
26
|
+
|
|
27
|
+
### CI/CD Quality Gate
|
|
28
|
+
**Webhook (deploy event)** → **SEO Score API (Audit)** → **IF (score < 70)** → **Slack alert**
|
|
29
|
+
|
|
30
|
+
## Output
|
|
31
|
+
|
|
32
|
+
The Audit operation returns:
|
|
33
|
+
- `score` (0-100)
|
|
34
|
+
- `grade` (A+ to F)
|
|
35
|
+
- `checks` (28 individual check results)
|
|
36
|
+
- `priorities` (top issues to fix, with severity)
|
|
37
|
+
|
|
38
|
+
## Links
|
|
39
|
+
|
|
40
|
+
- [SEO Score API](https://seoscoreapi.com)
|
|
41
|
+
- [API Docs](https://seoscoreapi.com/docs)
|
|
42
|
+
- [GitHub](https://github.com/SeoScoreAPI/n8n-nodes-seoscoreapi)
|
|
43
|
+
|
|
44
|
+
## License
|
|
45
|
+
|
|
46
|
+
MIT
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
class SeoScoreApiCredentials {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.name = "seoScoreApi";
|
|
6
|
+
this.displayName = "SEO Score API";
|
|
7
|
+
this.documentationUrl = "https://seoscoreapi.com/docs";
|
|
8
|
+
this.properties = [
|
|
9
|
+
{
|
|
10
|
+
displayName: "API Key",
|
|
11
|
+
name: "apiKey",
|
|
12
|
+
type: "string",
|
|
13
|
+
typeOptions: { password: true },
|
|
14
|
+
default: "",
|
|
15
|
+
required: true,
|
|
16
|
+
description: "Your SEO Score API key. Get one free at https://seoscoreapi.com",
|
|
17
|
+
},
|
|
18
|
+
];
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
module.exports = { SeoScoreApiCredentials };
|
package/index.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
class SeoScoreApi {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.description = {
|
|
6
|
+
displayName: "SEO Score API",
|
|
7
|
+
name: "seoScoreApi",
|
|
8
|
+
icon: "file:seoscoreapi.svg",
|
|
9
|
+
group: ["transform"],
|
|
10
|
+
version: 1,
|
|
11
|
+
subtitle: '={{$parameter["operation"]}}',
|
|
12
|
+
description: "Audit any URL for SEO issues — 28 checks, scored JSON response",
|
|
13
|
+
defaults: { name: "SEO Score API" },
|
|
14
|
+
inputs: ["main"],
|
|
15
|
+
outputs: ["main"],
|
|
16
|
+
credentials: [
|
|
17
|
+
{
|
|
18
|
+
name: "seoScoreApi",
|
|
19
|
+
required: true,
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
properties: [
|
|
23
|
+
{
|
|
24
|
+
displayName: "Operation",
|
|
25
|
+
name: "operation",
|
|
26
|
+
type: "options",
|
|
27
|
+
noDataExpression: true,
|
|
28
|
+
options: [
|
|
29
|
+
{
|
|
30
|
+
name: "Audit URL",
|
|
31
|
+
value: "audit",
|
|
32
|
+
description: "Run a full SEO audit on a URL",
|
|
33
|
+
action: "Audit a URL",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: "Batch Audit",
|
|
37
|
+
value: "batchAudit",
|
|
38
|
+
description: "Audit multiple URLs at once (paid plans only)",
|
|
39
|
+
action: "Batch audit URLs",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: "Check Usage",
|
|
43
|
+
value: "usage",
|
|
44
|
+
description: "Check your API usage and limits",
|
|
45
|
+
action: "Check usage",
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
default: "audit",
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
displayName: "URL",
|
|
52
|
+
name: "url",
|
|
53
|
+
type: "string",
|
|
54
|
+
default: "",
|
|
55
|
+
required: true,
|
|
56
|
+
displayOptions: { show: { operation: ["audit"] } },
|
|
57
|
+
placeholder: "https://example.com",
|
|
58
|
+
description: "The URL to audit for SEO issues",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
displayName: "URLs",
|
|
62
|
+
name: "urls",
|
|
63
|
+
type: "string",
|
|
64
|
+
default: "",
|
|
65
|
+
required: true,
|
|
66
|
+
displayOptions: { show: { operation: ["batchAudit"] } },
|
|
67
|
+
placeholder: "https://example.com, https://example.org",
|
|
68
|
+
description: "Comma-separated list of URLs to audit (max 10)",
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
async execute() {
|
|
75
|
+
const items = this.getInputData();
|
|
76
|
+
const operation = this.getNodeParameter("operation", 0);
|
|
77
|
+
const credentials = await this.getCredentials("seoScoreApi");
|
|
78
|
+
const returnData = [];
|
|
79
|
+
|
|
80
|
+
for (let i = 0; i < items.length; i++) {
|
|
81
|
+
let response;
|
|
82
|
+
|
|
83
|
+
if (operation === "audit") {
|
|
84
|
+
const url = this.getNodeParameter("url", i);
|
|
85
|
+
response = await this.helpers.request({
|
|
86
|
+
method: "GET",
|
|
87
|
+
url: `https://seoscoreapi.com/audit`,
|
|
88
|
+
qs: { url },
|
|
89
|
+
headers: { "X-API-Key": credentials.apiKey },
|
|
90
|
+
json: true,
|
|
91
|
+
});
|
|
92
|
+
} else if (operation === "batchAudit") {
|
|
93
|
+
const urlsStr = this.getNodeParameter("urls", i);
|
|
94
|
+
const urls = urlsStr.split(",").map((u) => u.trim()).filter(Boolean);
|
|
95
|
+
response = await this.helpers.request({
|
|
96
|
+
method: "POST",
|
|
97
|
+
url: "https://seoscoreapi.com/audit/batch",
|
|
98
|
+
headers: {
|
|
99
|
+
"X-API-Key": credentials.apiKey,
|
|
100
|
+
"Content-Type": "application/json",
|
|
101
|
+
},
|
|
102
|
+
body: { urls },
|
|
103
|
+
json: true,
|
|
104
|
+
});
|
|
105
|
+
} else if (operation === "usage") {
|
|
106
|
+
response = await this.helpers.request({
|
|
107
|
+
method: "GET",
|
|
108
|
+
url: "https://seoscoreapi.com/usage",
|
|
109
|
+
headers: { "X-API-Key": credentials.apiKey },
|
|
110
|
+
json: true,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
returnData.push({ json: response });
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return [returnData];
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
module.exports = { nodeClass: SeoScoreApi };
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
|
|
2
|
+
<rect width="64" height="64" rx="12" fill="#2563eb"/>
|
|
3
|
+
<text x="32" y="28" text-anchor="middle" font-family="Arial,sans-serif" font-weight="bold" font-size="16" fill="white">SEO</text>
|
|
4
|
+
<text x="32" y="46" text-anchor="middle" font-family="Arial,sans-serif" font-weight="bold" font-size="12" fill="#93c5fd">SCORE</text>
|
|
5
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-seoscoreapi",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "n8n node for SEO Score API — audit any URL for SEO issues with 28 checks",
|
|
5
|
+
"keywords": ["n8n-community-node-package", "n8n", "seo", "audit", "seo-score"],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"homepage": "https://seoscoreapi.com",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "SEO Score API",
|
|
10
|
+
"email": "info@seoscoreapi.com"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/SeoScoreAPI/n8n-nodes-seoscoreapi"
|
|
15
|
+
},
|
|
16
|
+
"main": "index.js",
|
|
17
|
+
"n8n": {
|
|
18
|
+
"n8nNodesApiVersion": 1,
|
|
19
|
+
"credentials": ["credentials/SeoScoreApi.credentials.js"],
|
|
20
|
+
"nodes": ["nodes/SeoScoreApi/SeoScoreApi.node.js"]
|
|
21
|
+
},
|
|
22
|
+
"files": ["nodes", "credentials", "index.js"]
|
|
23
|
+
}
|