-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.html
165 lines (155 loc) · 8.63 KB
/
index.html
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
164
165
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>IndieFlows - Open all SEO urls on one click.</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://cdn.tailwindcss.com"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-81E1N3L315"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-81E1N3L315');
</script>
</head>
<body>
<div class="main max-w-[1000px] mx-auto">
<h1 class="m-10 text-4xl font-extrabold dark:text-white">IndieFlows - Open all SEO urls on one click.</h1>
<div class="mt-10 mb-2 mx-10">
<label for="keyword" class="mb-2 text-sm font-medium text-gray-900 sr-only dark:text-white">Search</label>
<div class="relative">
<div class="absolute inset-y-0 start-0 flex items-center ps-3 pointer-events-none">
<svg class="w-4 h-4 text-gray-500 dark:text-gray-400" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m19 19-4-4m0-7A7 7 0 1 1 1 8a7 7 0 0 1 14 0Z"/>
</svg>
</div>
<input id="keyword" type="search" class="block w-full p-4 ps-10 text-sm text-gray-900 border border-gray-300 rounded-lg bg-gray-50 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500" placeholder="Input Keyword(s)" required />
<button id="open_all" type="button" class="text-white absolute end-2.5 bottom-2.5 bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300 font-medium rounded-lg text-sm px-4 py-2 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">Open All Links</button>
</div>
</div>
<div class="mb-10 mx-10">
<label for="config_flow" class="relative block mb-2 text-sm font-medium text-gray-900 dark:text-white">
<span id="warn"></span> <span id="btn_config" class="absolute end-0 bottom-0 text-blue-500 cursor-pointer">Config My Flow</span>
</label>
<textarea id="config_flow" rows="10" class="block p-2.5 w-full text-sm text-gray-900 bg-gray-50 rounded-lg border border-gray-300 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500 hidden" placeholder="Write your thoughts here..."></textarea>
</div>
<ol id="flow" class="m-10 relative border-s border-gray-200 dark:border-gray-700"></ol>
<footer class="bg-white dark:bg-gray-900">
<div class="mx-10 py-20 lg:py-20">
<div class="sm:flex sm:items-center sm:justify-between">
<span class="text-sm text-gray-500 sm:text-center dark:text-gray-400">© 2024 <a href="" class="hover:underline">IndieFlows</a>. All Rights Reserved.
</span>
</div>
</div>
</footer>
</div>
<script>
function get_config_str(){
const config_flow = [
{
name: "Check Domain Registration",
desc: "Domain names play a crucial role in SEO. A well-chosen domain name can enhance visibility on search engines, improve click-through rates, and aid in user recall. It can serve as a significant keyword, making your website more relevant to specific search queries, thus strengthening your online presence and potentially improving your search engine rankings.",
link: `https://www.godaddy.com/domainsearch/find?domainToCheck=`
},
{
name: "Search on Google",
desc: "Understanding what content Google has indexed is essential for effective SEO. It allows for identifying competition, avoiding duplicate content, understanding Google's preferences for high-quality content, and discovering gaps in existing content. This knowledge can significantly improve your website's search engine ranking and overall SEO strategy.",
link: `https://www.google.com/search?q=`,
},
{
name: "Check SEMrush",
desc: "SEMrush's keyword traffic and difficulty check is vital for SEO. It helps identify high-traffic keywords with low competition, enabling strategic content creation to maximize visibility and improve search engine rankings.",
link: `https://www.semrush.com/analytics/keywordmagic/?db=us&q=`,
},
{
name: "Check Google Trends",
desc: "Google Trends is crucial for SEO as it reveals keyword popularity over time. This allows for timely content creation around trending topics, leading to increased traffic and improved search engine rankings.",
link: `https://trends.google.com/trends/explore?date=today%203-m&q=`,
},
{
name: "Check Keyword Difficulty",
desc: "Using Ahrefs to check keyword difficulty is essential for SEO. It helps identify less competitive keywords, enabling strategic content creation that can improve visibility and boost search engine rankings.",
link: `https://ahrefs.com/keyword-generator/?country=us&input=`,
},
{
name: "Search On X",
desc: "Searching keywords on (X)Twitter is key for trend tracking. It helps identify popular topics, gauge audience interest, and tailor content accordingly, leading to increased engagement and visibility.",
link: `https://x.com/search?src=typed_query&q=`,
},
];
const cache_config = localStorage.getItem('indie_checker')
return cache_config ? cache_config : JSON.stringify(config_flow, null, 4);
}
function render_links(){
const keyword = document.querySelector('#keyword').value
const warn = document.querySelector('#warn')
if(!/^[0-9a-zA-Z\-\s]*$/.test(keyword)){
warn.innerHTML = 'Illegal Character.'
return
}else{
warn.innerHTML = ''
}
const links = JSON.parse(get_config_str())
const items = []
let flow_html=""
links.forEach((item, index) => {
switch(index){
case 0:
case 1:
item.link += keyword + ".com"
break;
case 2:
item.link += keyword.replace(/\s+/, "+")
break;
default:
item.link += encodeURIComponent(keyword)
}
items.push(item)
flow_html += `
<li class="mb-10 ms-4">
<div class="absolute w-3 h-3 bg-gray-200 rounded-full mt-1.5 -start-1.5 border border-white dark:border-gray-900 dark:bg-gray-700"></div>
<time class="mb-1 text-sm font-normal leading-none text-gray-400 dark:text-gray-500">Step ${index+1}</time>
<h3 class="text-lg font-semibold text-gray-900 dark:text-white">${item.name}</h3>
<p class="mb-4 text-base font-normal text-gray-500 dark:text-gray-400">${item.desc} <a href="${item.link}" target="_blank" class="text-blue-600">open link</a></p>
</li>
`;
})
document.querySelector('#flow').innerHTML = flow_html;
return items
}
function open_all(){
const items = render_links()
items.forEach(item => window.open(item.link))
}
document.querySelector('#open_all').addEventListener('click', function(){
open_all()
}, true)
document.querySelector('#keyword').addEventListener('keyup', function(e){
render_links();
}, true)
document.querySelector('#btn_config').addEventListener('click', function () {
const textarea = document.querySelector('#config_flow')
textarea.classList.toggle('hidden');
if(textarea.className.indexOf('hidden') !== -1){
try{
if(textarea.value){
JSON.parse(textarea.value)
}
localStorage.setItem('indie_checker', textarea.value)
render_links()
}catch (e){
alert(e)
textarea.classList.remove('hidden')
}
}else{
textarea.value = get_config_str();
}
}, true);
window.onload = function(){
render_links()
}
</script>
</body>
</html>