Nextjs accordion SEO

jhiyze9q  于 2023-10-18  发布在  SEO
关注(0)|答案(1)|浏览(206)

我试图在Nextjs中实现一个SEO友好的自定义 accordion ,但是该组件使用状态,我必须将其用作客户端组件。
Accordion使用状态来切换使用“可见性”样式的类。
据我所知,客户端组件不包括在初始HTML中,因此内容不可用于爬虫。

//FaqItem.tsx
"use client";
import { useState } from "react";
import DecalSvg from "../decalSvg/DecalSvg";
import styles from "./FaqItem.module.scss";

interface IProps {
  title: string;
  description: string;
  expanded?: boolean;
}

export default function FaqItem(props: IProps) {
  const { title, description, expanded } = props;
  const [isActive, setIsActive] = useState(expanded);

  const handleToggleActive = () => {
    setIsActive((prev) => !prev);
  };

  return (
    <div className={styles.faqWrapper}>
      <dt>
        <button
          id="accordion-header-1"
          aria-controls="accordion-panel-1"
          aria-expanded={isActive}
          onClick={handleToggleActive}
          className={`${styles.faqButton} ${isActive ? styles.expanded : ""}`}
        >
          <span>
            {title}
            <span className="color-primary">.</span>
          </span>
          <div className={styles.svgWrapper}>
            <DecalSvg
              className={styles.svg}
              aria-hidden="true"
              width={32}
              height={32}
            />
          </div>
        </button>
      </dt>
      <dd
        className={`${styles.details} ${isActive ? styles.active : ""}`}
        id="accordion-panel-1"
        aria-labelledby="accordion-header-1"
        // hidden={!isActive}
      >
        <p>{description}</p>
      </dd>
    </div>
  );
}

我如何使FAQ项目的内容(标题和描述)SEO友好(可见爬虫和谷歌搜索时)?有没有其他办法解决这个问题?我理解错了吗
使用NextJs 13.5.3

ctzwtxfj

ctzwtxfj1#

即使你使用的是"use client;",Next.js仍然会在第一次加载时在服务器端呈现这些组件。你会得到SEO的好处。
您可以通过在浏览器中打开检查器来验证这一点,然后转到网络选项卡并重新加载页面。看看第一个.html,你会看到你的网站的“服务器端版本”。

相关问题