fix: seo checker

This commit is contained in:
Val 2025-07-08 21:07:23 +07:00
parent 2eb9808162
commit e50292eb06
4 changed files with 28 additions and 68 deletions

View File

@ -54,6 +54,7 @@ export async function POST(request) {
let page; let page;
let finalUrl; let finalUrl;
let html;
let securityHeaders = {}; let securityHeaders = {};
let response; let response;

View File

@ -1,6 +1,6 @@
"use client"; "use client";
import ReCAPTCHA from "react-google-recaptcha"; import Link from "next/link";
import { useState, useRef } from "react"; import { useState } from "react";
export default function Callback1() { export default function Callback1() {
const [domain, setDomain] = useState(""); const [domain, setDomain] = useState("");
@ -8,8 +8,6 @@ export default function Callback1() {
const [captchaValue, setCaptchaValue] = useState(null); const [captchaValue, setCaptchaValue] = useState(null);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const recaptchaRef = useRef(null);
const handleChange = ({ target: { name, value } }) => { const handleChange = ({ target: { name, value } }) => {
if (name === "domain") { if (name === "domain") {
setDomain(value); setDomain(value);
@ -18,10 +16,6 @@ export default function Callback1() {
} }
}; };
const handleCaptchaChange = (value) => {
setCaptchaValue(value);
};
const handleSubmit = async (event) => { const handleSubmit = async (event) => {
event.preventDefault(); event.preventDefault();
setIsLoading(true); setIsLoading(true);
@ -138,30 +132,9 @@ export default function Callback1() {
</div> </div>
</div> </div>
<div className="col-md-6"> <div className="col-md-6">
<div className="form-grp"> <Link href={`/seo-checker?site=${domain}`} type="submit" className="btn">
{/* <ReCAPTCHA <span>Check Now</span>
ref={recaptchaRef} </Link>
sitekey={process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY}
onChange={handleCaptchaChange}
/> */}
</div>
</div>
<div className="col-md-6">
{!isLoading && (
<button type="submit" className="btn">
<span>Check Now</span>
</button>
)}
{isLoading && (
<button type="submit" className="btn" disabled>
<div
class="spinner-border spinner-border-sm text-light"
role="status"
>
<span class="sr-only">Loading...</span>
</div>
</button>
)}
</div> </div>
</div> </div>
</form> </form>

View File

@ -1,6 +1,6 @@
"use client"; "use client";
import ReCAPTCHA from "react-google-recaptcha"; import { useState } from "react";
import { useState, useRef } from "react"; import Link from "next/link";
export default function Callback2() { export default function Callback2() {
const [domain, setDomain] = useState(""); const [domain, setDomain] = useState("");
@ -8,8 +8,6 @@ export default function Callback2() {
const [captchaValue, setCaptchaValue] = useState(null); const [captchaValue, setCaptchaValue] = useState(null);
const [isLoading, setIsLoading] = useState(false); const [isLoading, setIsLoading] = useState(false);
const recaptchaRef = useRef(null);
const handleChange = ({ target: { name, value } }) => { const handleChange = ({ target: { name, value } }) => {
if (name === "domain") { if (name === "domain") {
setDomain(value); setDomain(value);
@ -18,10 +16,6 @@ export default function Callback2() {
} }
}; };
const handleCaptchaChange = (value) => {
setCaptchaValue(value);
};
const handleSubmit = async (event) => { const handleSubmit = async (event) => {
event.preventDefault(); event.preventDefault();
setIsLoading(true); setIsLoading(true);
@ -86,6 +80,7 @@ export default function Callback2() {
setIsLoading(false); setIsLoading(false);
} }
}; };
return ( return (
<> <>
<div className="container"> <div className="container">
@ -136,30 +131,9 @@ export default function Callback2() {
</div> </div>
</div> </div>
<div className="col-12"> <div className="col-12">
<div className="form-grp"> <Link href={`/seo-checker?site=${domain}`} type="submit" className="btn">
{/* <ReCAPTCHA <span>Check Now</span>
ref={recaptchaRef} </Link>
sitekey={process.env.NEXT_PUBLIC_RECAPTCHA_SITE_KEY}
onChange={handleCaptchaChange}
/> */}
</div>
</div>
<div className="col-12">
{!isLoading && (
<button type="submit" className="btn">
<span>Check Now</span>
</button>
)}
{isLoading && (
<button type="submit" className="btn" disabled>
<div
class="spinner-border spinner-border-sm text-light"
role="status"
>
<span class="sr-only">Loading...</span>
</div>
</button>
)}
</div> </div>
</div> </div>
</form> </form>

View File

@ -1,5 +1,6 @@
"use client"; "use client";
import { useState } from "react"; import { useSearchParams } from "next/navigation";
import { useEffect, useRef, useState } from "react";
import { import {
FiCheckCircle, FiCheckCircle,
FiAlertTriangle, FiAlertTriangle,
@ -9,11 +10,21 @@ import {
} from "react-icons/fi"; } from "react-icons/fi";
const SEOChecker = () => { const SEOChecker = () => {
const [url, setUrl] = useState(""); const searchParams = useSearchParams();
const site = searchParams.get("site");
const [url, setUrl] = useState(site);
const [seoData, setSeoData] = useState(null); const [seoData, setSeoData] = useState(null);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [error, setError] = useState(null); const [error, setError] = useState(null);
const [activeTab, setActiveTab] = useState("summary"); const [activeTab, setActiveTab] = useState("summary");
const submitRef = useRef();
useEffect(() => {
if (site) {
submitRef.current.click();
}
}, [site])
const checkSEO = async () => { const checkSEO = async () => {
if (!url) { if (!url) {
@ -508,8 +519,8 @@ const SEOChecker = () => {
: "Missing"} : "Missing"}
</li> </li>
<li> <li>
<strong>Headings:</strong> H1={seoData.headings.h1.count},{" "} <strong>Headings:</strong> H1={seoData.headings.h1.count}, H2=
H2={seoData.headings.h2.count}, H3={seoData.headings.h3.count} {seoData.headings.h2.count}, H3={seoData.headings.h3.count}
</li> </li>
</ul> </ul>
@ -575,6 +586,7 @@ const SEOChecker = () => {
onKeyDown={(e) => e.key === "Enter" && checkSEO()} onKeyDown={(e) => e.key === "Enter" && checkSEO()}
/> />
<button <button
ref={submitRef}
onClick={checkSEO} onClick={checkSEO}
disabled={loading || !url} disabled={loading || !url}
className="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 disabled:bg-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-500 flex items-center justify-center min-w-[150px]" className="bg-blue-600 text-white px-6 py-3 rounded-lg hover:bg-blue-700 disabled:bg-blue-300 focus:outline-none focus:ring-2 focus:ring-blue-500 flex items-center justify-center min-w-[150px]"