Flutter SEO优化插件seo的使用

Flutter SEO优化插件seo的使用

flutter_seo

pub package

flutter_seo 是一个为Flutter Web应用提供SEO(meta, body tag)支持的包。它通过监听widget树的变化,将 Seo.text(...)Seo.image(...)Seo.link(...)Seo.head(...) 等组件转换为HTML文档树。

开始使用

要使用这个插件,请在你的 pubspec.yaml 文件中添加 seo 作为依赖项。

dependencies:
  seo: ^0.0.9

确保Google能识别每个URL为不同的页面,需要调用 usePathUrlStrategy()。如果忽略这一步,可能导致Google将所有URL视为同一页面。更多详情请参考 此视频

void main() {
  usePathUrlStrategy();
  runApp(App());
}

将应用程序包装在 SeoController 中,它会处理监听widget树变化并更新HTML文档树。如果你的应用有授权功能且用户已登录,则可以禁用控制器(enabled: false),因为在该状态下更新HTML文档树是多余的。

import 'package:seo/seo.dart';

void main() {
  usePathUrlStrategy();
  runApp(const App());
}

class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    return SeoController(
      enabled: true,
      tree: WidgetTree(context: context),
      child: MaterialApp(
        // your app configuration here
      ),
    );
  }
}

有两种可用的 SeoTree 实现:

  • WidgetTree (推荐):基于遍历widget树。虽然比 SemanticsTree 慢一些,但它已经准备好用于生产环境,并且没有阻止Flutter SDK的问题。
  • SemanticsTree (实验性):基于遍历语义数据节点树。虽然遍历速度更快,但不支持 Seo.head(...)Seo.text(style: ...)Seo.link(rel: ...)

示例用法

你应该根据需要将SEO相关的widgets包裹在 Seo.text(...)Seo.image(...)Seo.link(...)Seo.head(...) 中。从个人经验来看,创建自定义的基础组件(如 AppTextAppImageAppLinkAppHead)并在项目中使用它们会更方便。

Text

Seo.text(
  text: 'Some text',
  child: ...,
); // 转换为: <p>Some text</p>

Seo.text(
  text: 'Some text',
  style: TextTagStyle.h1,
  child: ...,
); // 转换为: <h1>Some text</h1>

Image

Seo.image(
  src: 'http://www.example.com/image.jpg',
  alt: 'Some example image',
  child: ...,
); // 转换为: <img src="http://www.example.com/image.jpg" alt="Some example image"/>

Link

Seo.link(
  href: 'http://www.example.com',
  anchor: 'Some example',
  rel: 'nofollow', // 可选
  child: ...,
); // 转换为: <a href="http://www.example.com" rel="nofollow"><p>Some example</p></a>

Head

Seo.head(
  tags: [
    MetaTag(name: 'title', content: 'Flutter SEO Example'),
    LinkTag(rel: 'canonical', href: 'http://www.example.com'),
  ],
  child: ...,
); // 转换为: <meta name="title" content="Flutter SEO Example"/><link rel="canonical" href="http://www.example.com" />

警告: Open Graph (og:title, og:description 等) 和 Twitter Card (twitter:title, twitter:description 等) 不会生效。详情见 支持Open Graph和Twitter Card标签

提示

支持Open Graph和Twitter Card标签

Facebook、Twitter等平台只会加载index.html,并不会执行网页中包含的JavaScript,因此我们无法通过Dart代码更改meta标签。解决方案是在服务器端渲染时,在返回给客户端之前,在 index.html 中添加Open Graph和Twitter Card标签。

示例代码

下面是一个完整的示例代码,展示了如何使用 flutter_seo 插件。

import 'package:flutter/material.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
import 'package:seo/seo.dart';
import 'package:seo_example/main_router.dart';

void main() {
  usePathUrlStrategy();
  runApp(App());
}

class App extends StatelessWidget {
  App({super.key});

  final _router = MainRouter();

  @override
  Widget build(BuildContext context) {
    return SeoController(
      enabled: true,
      tree: WidgetTree(context: context),
      child: MaterialApp.router(
        theme: Theme.of(context).copyWith(
          scaffoldBackgroundColor: const Color(0xFFEEEEEE),
          textTheme: Theme.of(context)
              .textTheme
              .copyWith(
                headlineSmall: const TextStyle(fontWeight: FontWeight.w600),
                titleLarge: const TextStyle(fontWeight: FontWeight.w600),
              )
              .apply(
                displayColor: Colors.black,
                bodyColor: Colors.black,
              ),
        ),
        routerDelegate: _router.delegate(),
        routeInformationParser: _router.defaultRouteParser(),
      ),
    );
  }
}

Demo

查看演示:https://flutter-seo.netlify.app

PageSpeed Insights

  • Mobile: Performance ≈55, Accessibility 87, Best Practices 100, SEO 100
  • Desktop: Performance ≈85, Accessibility 88, Best Practices 100, SEO 100

Google Search

首页已被索引,并出现在 搜索结果 中。其他页面状态为“已发现 - 当前未被索引”,正在调查原因。


更多关于Flutter SEO优化插件seo的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter SEO优化插件seo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中进行SEO(搜索引擎优化)实际上是一个具有挑战性的任务,因为Flutter主要用于构建跨平台的移动应用,而不是传统的Web应用。传统的SEO主要关注于提高网站在搜索引擎结果页面(SERP)上的排名,而这主要依赖于网页内容、结构、链接和其他HTML相关的因素。

然而,Flutter应用可以通过一些方式间接地支持SEO,比如通过生成与Web兼容的内容或者通过PWA(Progressive Web App)的方式。但值得注意的是,Flutter本身并没有内置的SEO优化插件。不过,如果你正在使用Flutter构建一个支持Web的平台,并且希望通过一些方式优化搜索引擎的抓取,你可以考虑使用flutter_web_plugins和相关的Web技术。

虽然Flutter没有直接的SEO插件,但如果你正在开发一个Flutter Web应用,并希望搜索引擎能够更好地抓取和索引你的应用内容,你可以考虑以下策略,并结合一些Web技术来实现:

  1. 使用meta标签:在Flutter Web应用中,你可以通过dart:html库来动态地设置页面的meta标签,这些标签对SEO很重要。
import 'dart:html' as html;

void setMetaTags() {
  final descriptionMeta = html.document.querySelector('meta[name="description"]');
  if (descriptionMeta == null) {
    final meta = html.MetaElement()
      ..name = 'description'
      ..content = '这是一个Flutter Web应用的描述';
    html.document.head.append(meta);
  } else {
    descriptionMeta.setAttribute('content', '这是一个Flutter Web应用的描述');
  }
}
  1. 服务器端渲染(SSR):虽然Flutter不直接支持SSR,但你可以考虑将Flutter Web应用与一种支持SSR的框架(如Next.js对于React)结合使用,或者为搜索引擎提供一个静态生成的版本。

  2. PWA支持:通过添加PWA支持,你的Flutter Web应用可以被安装到用户的设备上,并且有一个manifest.json文件来提供应用的基本信息,这些信息可能会被搜索引擎使用。

  3. 生成sitemap.xml:为你的Flutter Web应用生成一个sitemap.xml文件,这有助于搜索引擎了解你的网站结构。

  4. 使用搜索引擎友好的URL:确保你的Flutter Web应用使用清晰、简洁且描述性的URL结构。

  5. 内容优化:确保你的应用内容是高质量的、相关的,并且定期更新。搜索引擎喜欢新鲜、有用的内容。

  6. 使用Web技术:虽然Flutter主要用于移动开发,但当你构建Web应用时,你可以利用Web技术来优化SEO,比如使用JavaScript库来动态地更新页面内容。

请记住,SEO是一个复杂且不断发展的领域,它依赖于多种因素,包括内容质量、网站结构、链接建设等。对于Flutter Web应用来说,最佳实践可能是结合Flutter的强大功能与Web开发的最佳实践来创建一个既用户友好又搜索引擎友好的应用。

回到顶部