前端 SSR:别让你的网站变成 SEO 黑洞

前端 SSR:别让你的网站变成 SEO 黑洞

毒舌时刻

这网站做得跟黑洞似的,搜索引擎根本爬不进去。

各位前端同行,咱们今天聊聊前端 SSR(服务端渲染)。别告诉我你还在使用纯客户端渲染,那感觉就像在没有窗户的房间里生活——能住,但看不见外面的世界。

为什么你需要 SSR

最近看到一个项目,纯客户端渲染,SEO 排名倒数,用户体验差。我就想问:你是在做网站还是在做内部工具?

反面教材

// 反面教材:纯客户端渲染 // App.jsx import React, { useState, useEffect } from 'react'; function App() { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function fetchData() { setLoading(true); try { const response = await fetch('/api/data'); const result = await response.json(); setData(result); } catch (error) { console.error('Error fetching data:', error); } finally { setLoading(false); } } fetchData(); }, []); return ( <div> <h1>我的网站</h1> {loading ? <div>加载中...</div> : ( <div> {data.map(item => ( <div key={item.id}> <h2>{item.title}</h2> <p>{item.content}</p> </div> ))} </div> )} </div> ); } export default App; 

毒舌点评:这代码,就像在黑暗中摸索,搜索引擎根本找不到你的内容。

正确姿势

1. Next.js SSR

// 正确姿势:Next.js SSR // 1. 安装依赖 // npx create-next-app@latest // 2. 页面组件 // pages/index.js import React from 'react'; export async function getServerSideProps() { // 服务端获取数据 const res = await fetch('https://api.example.com/data'); const data = await res.json(); return { props: { data } }; } export default function Home({ data }) { return ( <div> <h1>我的网站</h1> <div> {data.map(item => ( <div key={item.id}> <h2>{item.title}</h2> <p>{item.content}</p> </div> ))} </div> </div> ); } 

2. Nuxt.js SSR

// 正确姿势:Nuxt.js SSR // 1. 安装依赖 // npx create-nuxt-app@latest // 2. 页面组件 // pages/index.vue <template> <div> <h1>我的网站</h1> <div> <div v-for="item in data" :key="item.id"> <h2>{{ item.title }}</h2> <p>{{ item.content }}</p> </div> </div> </div> </template> <script> export default { async asyncData({ $axios }) { // 服务端获取数据 const { data } = await $axios.get('https://api.example.com/data'); return { data }; } }; </script> 

3. Remix SSR

// 正确姿势:Remix SSR // 1. 安装依赖 // npx create-remix@latest // 2. 路由组件 // app/routes/index.jsx import { json } from '@remix-run/node'; export async function loader() { // 服务端获取数据 const response = await fetch('https://api.example.com/data'); const data = await response.json(); return json({ data }); } export default function Home() { const { data } = useLoaderData(); return ( <div> <h1>我的网站</h1> <div> {data.map(item => ( <div key={item.id}> <h2>{item.title}</h2> <p>{item.content}</p> </div> ))} </div> </div> ); } 

4. React 18 SSR

// 正确姿势:React 18 SSR // 1. 安装依赖 // npm install react react-dom express // 2. 服务端代码 // server.js import express from 'express'; import React from 'react'; import { renderToString } from 'react-dom/server'; import App from './App'; const app = express(); app.get('*', async (req, res) => { // 服务端获取数据 const response = await fetch('https://api.example.com/data'); const data = await response.json(); const html = renderToString(<App data={data} />); res.send(` <!DOCTYPE html> <html> <head> <title>我的网站</title> </head> <body> <div>${html}</div> <script> window.__INITIAL_DATA__ = ${JSON.stringify(data)}; </script> <script src="/bundle.js"></script> </body> </html> `); }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); // 3. 客户端代码 // App.jsx import React from 'react'; function App({ data }) { return ( <div> <h1>我的网站</h1> <div> {data.map(item => ( <div key={item.id}> <h2>{item.title}</h2> <p>{item.content}</p> </div> ))} </div> </div> ); } export default App; // 4. 客户端入口 // client.js import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( <React.StrictMode> <App data={window.__INITIAL_DATA__} /> </React.StrictMode> ); 

毒舌点评:这才叫前端 SSR,服务端渲染内容,搜索引擎友好,用户体验好,再也不用担心 SEO 问题了。

Read more

零基础手把手教程:用gpt-oss-20b-WEBUI快速搭建本地AI对话系统

零基础手把手教程:用gpt-oss-20b-WEBUI快速搭建本地AI对话系统 1. 为什么选这个镜像?小白也能跑起来的“真开源”体验 你可能已经看到过不少“本地大模型”教程,但真正能让你在普通电脑上点开浏览器就聊天、不用折腾CUDA版本、不报错、不卡死的方案,其实不多。gpt-oss-20b-WEBUI这个镜像,就是为“不想装环境、只想用模型”的人准备的。 它不是包装精美的黑盒应用,也不是需要你手动编译vLLM的硬核项目——它是OpenAI官方开源权重(gpt-oss)+ vLLM高速推理引擎 + 预置WebUI的完整组合包,所有依赖都已打包好,部署完就能直接打开网页对话。 重点来了: * 不用装Python、不用配CUDA、不用改配置文件; * 不依赖Ollama、不依赖Docker Desktop(Windows用户尤其友好); * 双卡RTX 4090D可跑20B模型,单卡3090/4080也能稳推,甚至A10G云显卡实测可用; * 界面就是ChatGPT风格,输入即响应,支持多轮对话、历史保存、导出记录。 如果你试过其他方案却卡在“pip install

AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

Claude API - AWS Kiro 账号池管理 | OpenAI 兼容代理服务 项目地址在wget 里面 web页面访问把后缀.git删掉即可 效果图 AWS Kiro 账号池管理系统 - 将 Amazon Q Developer (Kiro) API 转换为 OpenAI 兼容格式的企业级 Go 代理服务。支持多账号池管理、OIDC 自动认证、令牌自动刷新、流式响应、完整的 Web 管理控制台。 关键词: AWS Kiro, Amazon Q Developer, Claude API, OpenAI Proxy, 账号池管理, OIDC 认证, Go

OpenClaw Web Search 完全指南(2026年3月最新)

OpenClaw Web Search 完全指南(2026年3月最新) 本文详细介绍 OpenClaw 内置 web_search 工具的 5 个官方搜索渠道,以及 Tavily 技能的使用方法。帮助你选择最适合的免费/付费方案。 目录 * OpenClaw 搜索功能概述 * 5 个官方搜索渠道详解 * 1. Brave Search API * 2. Google Gemini * 3. Grok (xAI) * 4. Kimi (Moonshot) * 5. Perplexity * 免费额度对比表 * 推荐配置方案 * Tavily Web Search 技能 * 配置步骤详解 * 常见问题 OpenClaw 搜索功能概述 OpenClaw 提供两种搜索能力: