AI Meta Title Generator v2.0

Get 10 SEO-optimized title variants with pixel-width analysis, CTR scoring, and a live Google SERP preview.

Your 10 Title Variants

Title Chars Pixels Keyword CTR Score Actions
📱 Google SERP Preview (mobile/desktop)
toolspivot.com › your-slug-here

Click a title from the table above to preview

Your meta description will appear here — generate one with our AI Meta Description Generator.

✨ Next step: write a matching meta description Generate Description

关于 人工智能元标题生成器

ToolsPivot的AI标题生成器能在数秒内创建SEO优化的网页标题,省去数小时的手动构思时间。低质量的meta标题导致百度对60-70%的标题进行重写,点击率下降高达20%。内容营销人员、SEO专家和网站管理员使用此工具生成排名更高、吸引更多自然流量的标题。

ToolsPivot AI标题生成器概述

核心功能: AI标题生成器分析您的目标关键词、内容主题和用户意图,生成多个针对搜索引擎优化的标题变体。输入主关键词和可选上下文,即可获得5-10个独特的标题建议,长度控制在25-30个汉字的最佳范围内。AI综合考虑关键词位置、吸引力词汇和情感触发点,最大化提升排名和点击率。

主要用户与使用场景: 日常为博客和落地页生成标题的内容营销人员依赖此工具。管理多个客户网站的SEO机构用它进行批量标题优化。电商运营创建产品页标题,平衡关键词与销售文案。自媒体作者同时生成meta描述和标题,优化工作流程。

问题与解决方案: 手动撰写有效的meta标题需要平衡SEO要求与用户吸引力——这一过程通常每个标题需要15-30分钟。ToolsPivot的生成器将时间缩短到30秒以内,同时保持专业质量。用户报告在使用AI生成标题后,自然搜索点击率提升25-40%。

AI标题生成器的核心优势

即时生成标题 数秒内生成5-10个优化变体,而非花费30分钟手动头脑风暴。

SEO优化输出 每个生成的标题都遵循百度最佳实践,包括关键词位置、长度限制和语义相关性。

更高点击率 AI生成的标题融入经验证能提升搜索结果点击率15-35%的吸引力词汇和情感触发点。

一致的品牌调性 通过多种风格选项和保存偏好格式,在数百个页面中保持品牌统一调性。

减少百度重写 25-30个汉字最佳范围内的标题比优化不佳的标题减少40%的百度重写。

批量处理能力 同时处理多个关键词用于大规模内容项目,为企业SEO活动节省数小时。

关键词聚类整合 生成与更广泛关键词聚类策略一致的标题,构建主题权威性。

AI标题生成器核心功能

智能关键词布局 将目标关键词放置在标题开头,搜索引擎对此位置给予最高权重。

实时字数显示 实时计数器显示准确字数,确保标题保持在25-30个汉字的最佳范围。

多样化变体 每次请求生成5-10个独特选项,提供从问句式到利益导向等多种格式。

语气选择 在专业、休闲、紧迫或信息型语气间选择,匹配品牌调性和内容类型。

吸引力词汇整合 自动融入经验证能吸引点击的词汇,如"免费"、"指南"、"完整"和"实用"。

行业模板 电商产品、博客文章、服务页面和新闻资讯的预设公式加速生成。

导出选项 复制单个标题或将所有变体导出为CSV,供团队审核和批量实施。

整合关键词研究 建议相关关键词以加强语义相关性,支持全面的页面优化。

预览模拟 发布前查看标题在百度搜索结果中的显示效果,确保正确展示。

字数统计整合 内置字数分析帮助同时优化标题和描述长度。

ToolsPivot AI标题生成器使用方法

  1. 输入目标关键词 — 输入您想在搜索结果中获得排名的主要关键词或短语。

  2. 添加上下文(可选) — 提供额外信息如内容类型、目标受众或特定角度。

  3. 选择偏好 — 选择语气、风格以及是否包含品牌名或数字。

  4. 生成标题 — 点击生成,立即获得5-10个独特的SEO优化标题建议。

  5. 审核与优化 — 评估选项,如有需要重新生成,或手动编辑您喜欢的标题。

  6. 复制并实施 — 将最终标题复制到CMS、WordPress或SEO插件中立即使用。

何时使用AI标题生成器

每当您需要为追求自然搜索流量的网页创建或优化标题标签时,都应使用此工具。在初始内容创建、批量SEO审计和需要大规模标题更新的网站迁移时,生成器最具价值。

具体使用场景:

发布新博客文章 发布前生成吸引人的标题,最大化首页排名潜力。

电商产品页面 创建关键词丰富的标题,平衡SEO要求与转化导向的销售文案。

落地页优化 制作与付费广告文案一致同时保持自然搜索可行性的标题。

SEO审计整改 快速重新生成被SEO检测器标记为过长、过短或缺少关键词的标题。

内容更新项目 更新现有内容的过时标题,恢复下降的自然流量。

竞品差距分析 针对竞争对手以次优标题排名的关键词生成替代标题。

A/B测试活动 生成多个变体,测试哪些标题在搜索结果中获得更高点击率。

准备完整TDK 生成标题作为第一步,然后完成描述和其他meta标签。

特殊情况包括高度技术性或小众主题,此时人工专业知识可补充AI建议。

使用案例/应用场景

SEO机构客户管理

背景: 一家SEO机构管理50多个客户网站,需要月度标题标签审计和优化。

流程:

  • 从分析工具导出表现不佳的标题标签
  • 通过生成器批量处理关键词
  • 向客户展示数据支持的标题建议

成果: 机构将标题优化时间减少70%,同时客户平均点击率提升18%。

电商分类页面

背景: 一家拥有500个产品分类页的在线零售商需要独特的关键词优化标题。

流程:

  • 输入分类关键词和产品类型
  • 生成包含"购买"、"最佳"和"推荐"修饰词的标题
  • 通过批量上传到淘宝、京东或自建商城实施标题

成果: 分类页面自然流量在实施后60天内增长32%。

内容营销团队工作流程

背景: 一家B2B SaaS公司每月发布20篇博客文章,需要一致的标题质量。

流程:

  • 写手在内容规划阶段生成标题
  • 编辑团队从AI变体中选择
  • 最终标题与更广泛的关键词聚类策略保持一致

成果: 博客自然流量同比增长45%,标题优化实现标准化。

网站迁移项目

背景: 一家媒体公司迁移10,000个页面,需要更新标题以匹配新的域名品牌。

流程:

  • 提取现有标题和目标关键词
  • 生成包含更新品牌名的新标题
  • 使用meta标签分析器验证结果

成果: 迁移后自然流量恢复在45天内实现,而非典型的90天周期。

标题优化最佳实践

有效的meta标题遵循经验证的公式,平衡SEO要求与用户参与度。将主关键词放在前3-5个词内,因为搜索引擎对前置位置的关键词给予更高权重。至少包含一个吸引力词汇如"免费"、"指南"、"实用"或"最新"来提升情感吸引力和点击概率。

关键指南:

  • 关键词前置: 将目标词放在开头位置
  • 使用数字: 带数字的标题点击率高36%
  • 添加标记: "【指南】"或"(2024)"可提升点击率达38%
  • 包含修饰词: "最佳"、"免费"、"怎么"吸引搜索者
  • 避免堆砌关键词: 一个主关键词,最多一个次关键词

如果包含品牌名,将其放在末尾,用竖线(|)或破折号(—)分隔。这样既保持关键词的突出性,又为回访用户保持品牌辨识度。

字符限制与显示规范

百度在截断前显示约25-30个汉字或约60个英文字符的标题文本。超过此限制的标题会被省略号(...)截断,降低清晰度和点击吸引力。研究表明25-28个汉字的标题百度重写率最低,仅为15%。

显示规范:

  • 最佳长度: 25-30个汉字(包含空格和标点)
  • 像素宽度: 保持在480-520px以内完整显示
  • 移动端显示: 稍短约25个汉字
  • 百度重写: 60-70%超出最佳范围的标题被重写

当百度重写您的标题时,通常会从H1标签、页面内容或结构化数据中提取——往往产生优化效果较差的结果。保持在限制范围内让您能控制页面在搜索结果中的显示方式。

相关工具

使用这些ToolsPivot配套工具完善您的SEO工作流程:

常见问题

什么是AI标题生成器?

AI标题生成器是一种使用人工智能为网页创建SEO优化标题标签的工具。ToolsPivot的生成器分析您的关键词和上下文,生成多个遵循搜索引擎最佳实践的标题变体。

SEO最佳meta标题长度是多少?

最佳meta标题长度为25-30个汉字或约480像素宽度。此范围内的标题在百度搜索结果中完整显示不会被截断,且经历较少的重写。

meta标题如何影响搜索排名?

meta标题是最强的页面排名因素之一,因为它直接向搜索引擎传达页面相关性。优化良好的标题可以在竞争激烈的关键词上提升10-20个排名位置。

meta标题和H1标签有什么区别?

meta标题出现在搜索结果和浏览器标签中,而H1标签显示在页面本身。它们可以完全相同或略有不同——meta标题通常包含关键词,而H1优先考虑用户可读性

meta标题应包含多少个关键词?

包含一个主关键词,可选一个次关键词。堆砌多个关键词会降低可读性,可能触发百度惩罚。

为什么百度会重写我的meta标题?

百度会重写过长、过短、关键词堆砌或不能准确代表页面内容的标题。保持在25-30个汉字范围内并匹配用户意图可显著减少重写。

这个meta标题生成器比ChatGPT好吗?

ToolsPivot的生成器专门针对SEO标题优化,内置字符限制、关键词位置规则和多样化变体。通用AI工具需要额外的提示才能达到类似的SEO专注效果。

可以批量生成meta标题吗?

可以,ToolsPivot支持管理大型网站的企业用户批量生成。同时处理多个关键词,并将结果导出为CSV供团队审核。

AI标题生成器完全免费吗?

是的,基础生成器完全免费,无需注册。为个人和商业用途生成无限标题,没有隐藏费用。

如何实施生成的meta标题?

复制您选择的标题,粘贴到CMS的meta标题字段、WordPress SEO插件(如Yoast或RankMath)或直接粘贴到HTML的标签中。</p> <p><strong>应该在meta标题中包含品牌名吗?</strong></p> <p>在首页和关键品牌页面的标题末尾包含品牌名。对于博客文章和信息性内容,优先考虑关键词而非品牌名以最大化排名潜力。</p> <p><strong>可以A/B测试不同的meta标题吗?</strong></p> <p>虽然百度不支持原生标题测试,但您可以在2-4周内轮换标题,并在百度站长工具中比较点击率数据以确定获胜变体。</p> <p><strong>生成器适用于<a href="https://toolspivot.com/zh/open-graph-generator">社交媒体标题</a>吗?</strong></p> <p>生成器专注于SEO meta标题。对于社交分享优化,使用我们的Open Graph生成器为微信、微博和知乎创建平台特定标题。</p> <p><strong>应该多久更新一次meta标题?</strong></p> <p>每季度审核meta标题,或当页面排名下降时更新。为季节性内容、过时统计数据或新目标关键词更新标题。</p> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [ { "@type": "Question", "name": "什么是AI标题生成器?", "acceptedAnswer": { "@type": "Answer", "text": "AI标题生成器是一种使用人工智能为网页创建SEO优化标题标签的工具。ToolsPivot的生成器分析您的关键词和上下文,生成多个遵循搜索引擎最佳实践的标题变体。" } }, { "@type": "Question", "name": "SEO最佳meta标题长度是多少?", "acceptedAnswer": { "@type": "Answer", "text": "最佳meta标题长度为25-30个汉字或约480像素宽度。此范围内的标题在百度搜索结果中完整显示不会被截断,且经历较少的重写。" } }, { "@type": "Question", "name": "meta标题如何影响搜索排名?", "acceptedAnswer": { "@type": "Answer", "text": "meta标题是最强的页面排名因素之一,因为它直接向搜索引擎传达页面相关性。优化良好的标题可以在竞争激烈的关键词上提升10-20个排名位置。" } }, { "@type": "Question", "name": "meta标题和H1标签有什么区别?", "acceptedAnswer": { "@type": "Answer", "text": "meta标题出现在搜索结果和浏览器标签中,而H1标签显示在页面本身。它们可以完全相同或略有不同——meta标题通常包含关键词,而H1优先考虑用户可读性。" } }, { "@type": "Question", "name": "meta标题应包含多少个关键词?", "acceptedAnswer": { "@type": "Answer", "text": "包含一个主关键词,可选一个次关键词。堆砌多个关键词会降低可读性,可能触发百度惩罚。" } }, { "@type": "Question", "name": "为什么百度会重写我的meta标题?", "acceptedAnswer": { "@type": "Answer", "text": "百度会重写过长、过短、关键词堆砌或不能准确代表页面内容的标题。保持在25-30个汉字范围内并匹配用户意图可显著减少重写。" } }, { "@type": "Question", "name": "这个meta标题生成器比ChatGPT好吗?", "acceptedAnswer": { "@type": "Answer", "text": "ToolsPivot的生成器专门针对SEO标题优化,内置字符限制、关键词位置规则和多样化变体。通用AI工具需要额外的提示才能达到类似的SEO专注效果。" } }, { "@type": "Question", "name": "可以批量生成meta标题吗?", "acceptedAnswer": { "@type": "Answer", "text": "可以,ToolsPivot支持管理大型网站的企业用户批量生成。同时处理多个关键词,并将结果导出为CSV供团队审核。" } }, { "@type": "Question", "name": "AI标题生成器完全免费吗?", "acceptedAnswer": { "@type": "Answer", "text": "是的,基础生成器完全免费,无需注册。为个人和商业用途生成无限标题,没有隐藏费用。" } }, { "@type": "Question", "name": "如何实施生成的meta标题?", "acceptedAnswer": { "@type": "Answer", "text": "复制您选择的标题,粘贴到CMS的meta标题字段、WordPress SEO插件(如Yoast或RankMath)或直接粘贴到HTML的<title>标签中。" } }, { "@type": "Question", "name": "应该在meta标题中包含品牌名吗?", "acceptedAnswer": { "@type": "Answer", "text": "在首页和关键品牌页面的标题末尾包含品牌名。对于博客文章和信息性内容,优先考虑关键词而非品牌名以最大化排名潜力。" } }, { "@type": "Question", "name": "可以A/B测试不同的meta标题吗?", "acceptedAnswer": { "@type": "Answer", "text": "虽然百度不支持原生标题测试,但您可以在2-4周内轮换标题,并在百度站长工具中比较点击率数据以确定获胜变体。" } }, { "@type": "Question", "name": "生成器适用于社交媒体标题吗?", "acceptedAnswer": { "@type": "Answer", "text": "生成器专注于SEO meta标题。对于社交分享优化,使用我们的Open Graph生成器为微信、微博和知乎创建平台特定标题。" } }, { "@type": "Question", "name": "应该多久更新一次meta标题?", "acceptedAnswer": { "@type": "Answer", "text": "每季度审核meta标题,或当页面排名下降时更新。为季节性内容、过时统计数据或新目标关键词更新标题。" } } ] } </script></p><section class="bv-related-tools" aria-label="Related tools"><h2 class="bv-related-tools-title">Related Tools You Might Like</h2><div class="bv-related-tools-grid"><a class="bv-related-tool" href="https://toolspivot.com/zh/ai-humanizer" title="AI人性化改写器"> <span class="bv-related-tool-icon"><img alt="AI人性化改写器" src="https://toolspivot.com/theme/smallseo/icons/ai-humanizer.png?v=1779300097" loading="lazy" /></span> <span class="bv-related-tool-name">AI人性化改写器</span> <span class="bv-related-tool-arrow"><i class="fa fa-arrow-right" aria-hidden="true"></i></span> </a><a class="bv-related-tool" href="https://toolspivot.com/zh/ai-content-detector" title="AI内容检测器"> <span class="bv-related-tool-icon"><img alt="AI内容检测器" src="https://toolspivot.com/theme/smallseo/icons/ai-content-detector.png?v=1779300449" loading="lazy" /></span> <span class="bv-related-tool-name">AI内容检测器</span> <span class="bv-related-tool-arrow"><i class="fa fa-arrow-right" aria-hidden="true"></i></span> </a><a class="bv-related-tool" href="https://toolspivot.com/zh/ai-keyword-cluster-ideas" title="AI 关键词聚类创意"> <span class="bv-related-tool-icon"><img alt="AI 关键词聚类创意" src="https://toolspivot.com/theme/smallseo/icons/ai-keyword-cluster-ideas.png?v=1754767380" loading="lazy" /></span> <span class="bv-related-tool-name">AI 关键词聚类创意</span> <span class="bv-related-tool-arrow"><i class="fa fa-arrow-right" aria-hidden="true"></i></span> </a><a class="bv-related-tool" href="https://toolspivot.com/zh/llms-txt-generator" title="LLMs.txt生成器"> <span class="bv-related-tool-icon"><img alt="LLMs.txt生成器" src="https://toolspivot.com/theme/smallseo/icons/llms-txt-generator.png?v=1779331628" loading="lazy" /></span> <span class="bv-related-tool-name">LLMs.txt生成器</span> <span class="bv-related-tool-arrow"><i class="fa fa-arrow-right" aria-hidden="true"></i></span> </a><a class="bv-related-tool" href="https://toolspivot.com/zh/geo-audit" title="GEO 审计工具"> <span class="bv-related-tool-icon"><img alt="GEO 审计工具" src="https://toolspivot.com/theme/smallseo/icons/geo-audit.png?v=1780680528" loading="lazy" /></span> <span class="bv-related-tool-name">GEO 审计工具</span> <span class="bv-related-tool-arrow"><i class="fa fa-arrow-right" aria-hidden="true"></i></span> </a><a class="bv-related-tool" href="https://toolspivot.com/zh/ai-meta-description-generator" title="人工智能元描述生成器"> <span class="bv-related-tool-icon"><img alt="人工智能元描述生成器" src="https://toolspivot.com/theme/smallseo/icons/ai-seo-meta-description-generator.png?v=1754767380" loading="lazy" /></span> <span class="bv-related-tool-name">人工智能元描述生成器</span> <span class="bv-related-tool-arrow"><i class="fa fa-arrow-right" aria-hidden="true"></i></span> </a></div></section></div> </div> <div class="col-md-4" id="rightCol" > <div class="search_dots_section p20 box_shadow_border"> <div class="tool_heading text-center"> <div class="fs18 mn th-title">搜索</div> <div class="heading_border mb10 mt10"></div> </div> <div id="sidebar_search"> <div class="input-group"> <input id="sidebarsearch" autocomplete="off" placeholder="在 SEO 工具中搜索" class="form-control" type="text"> <span class="input-group-btn"> <button class="btn btn-secondary" type="button" aria-label="Search"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></button> </span> </div> <div id="sidebar-results" class="search-resultsbar box_shadow_border" style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; border-radius: 10px; padding: 15px 0px; display: none;"></div> </div> </div> <div class="sidebar_adds p5 mt15 box_shadow_border"><span class="ad-label">广告</span><div class="sideXd"><!-- New Sidebar --> <ins class="adsbygoogle" style="display:block;width:100%;min-height:250px" data-ad-client="ca-pub-3744783675211834" data-ad-slot="5576900894" data-ad-format="auto" data-full-width-responsive="true"></ins> <script>(adsbygoogle=window.adsbygoogle||[]).push({});</script></div></div> <div class="popular_tool_box box_shadow_border pn mb10 dp-poptools"> <ul> <li class="popular-seo-t pn"> <div class="mn p10 pop-title"> 热门 DocPivot 工具 </div> </li> <li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><text x="3" y="14" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PPT</text><path d="M9 20l10 10" stroke-width="2.4"/><path d="M19 24v6h-6" stroke-width="2.4"/><text x="37" y="37" text-anchor="end" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PDF</text></svg></div><a href="https://toolspivot.com/doc/zh/powerpoint-to-pdf">PowerPoint 转 PDF</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><text x="3" y="14" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">TXT</text><path d="M9 20l10 10" stroke-width="2.4"/><path d="M19 24v6h-6" stroke-width="2.4"/><text x="37" y="37" text-anchor="end" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PDF</text></svg></div><a href="https://toolspivot.com/doc/zh/text-to-pdf">文本 转 PDF</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="6" y="6" width="22" height="22" rx="3" stroke-dasharray="4 3"/><rect x="12" y="12" width="22" height="22" rx="3"/><path d="M20 34v-8M16 30l4 4 4-4"/></svg></div><a href="https://toolspivot.com/doc/zh/flatten-pdf">展平 PDF</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><text x="3" y="14" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PDF</text><path d="M9 20l10 10" stroke-width="2.4"/><path d="M19 24v6h-6" stroke-width="2.4"/><text x="37" y="37" text-anchor="end" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">TXT</text></svg></div><a href="https://toolspivot.com/doc/zh/pdf-to-text">PDF 转 文本</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><text x="3" y="14" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PDF</text><path d="M9 20l10 10" stroke-width="2.4"/><path d="M19 24v6h-6" stroke-width="2.4"/><text x="37" y="37" text-anchor="end" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">XLS</text></svg></div><a href="https://toolspivot.com/doc/zh/pdf-to-excel">PDF 转 Excel</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M22 4H11a3 3 0 0 0-3 3v26a3 3 0 0 0 3 3h18a3 3 0 0 0 3-3V14z"/><path d="M22 4v10h10"/></svg></div><a href="https://toolspivot.com/doc/zh/pdf-to-epub">PDF 转 EPUB</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><text x="3" y="14" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PDF</text><path d="M9 20l10 10" stroke-width="2.4"/><path d="M19 24v6h-6" stroke-width="2.4"/><text x="37" y="37" text-anchor="end" font-size="11" font-weight="700" fill="currentColor" stroke="none" font-family="system-ui,-apple-system,sans-serif">PPT</text></svg></div><a href="https://toolspivot.com/doc/zh/pdf-to-powerpoint">PDF 转 PowerPoint</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="3" y="9" width="14" height="14" rx="2.5"/><circle cx="7.5" cy="13.5" r="1.5"/><path d="M3 20l4-3.5 4.5 4"/><path d="M20 26h11M26 21l5 5-5 5"/><path d="M23 9c4-4 10-4 14 0v11H23z"/><circle cx="23" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="37" cy="9" r="2" fill="currentColor" stroke="none"/></svg></div><a href="https://toolspivot.com/doc/zh/png-to-svg">PNG 转 SVG</a></li><li class="pg-hovr"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="3" y="9" width="14" height="14" rx="2.5"/><circle cx="7.5" cy="13.5" r="1.5"/><path d="M3 20l4-3.5 4.5 4"/><path d="M20 26h11M26 21l5 5-5 5"/><path d="M23 9c4-4 10-4 14 0v11H23z"/><circle cx="23" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="37" cy="9" r="2" fill="currentColor" stroke="none"/></svg></div><a href="https://toolspivot.com/doc/zh/jpg-to-svg">JPG 转 SVG</a></li><li class="pg-hovr border-bottom"><div class="icon_image"><svg viewBox="0 0 40 40" width="30" height="30" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="3" y="9" width="14" height="14" rx="2.5"/><circle cx="7.5" cy="13.5" r="1.5"/><path d="M3 20l4-3.5 4.5 4"/><path d="M20 26h11M26 21l5 5-5 5"/><path d="M23 9c4-4 10-4 14 0v11H23z"/><circle cx="23" cy="9" r="2" fill="currentColor" stroke="none"/><circle cx="37" cy="9" r="2" fill="currentColor" stroke="none"/></svg></div><a href="https://toolspivot.com/doc/zh/webp-to-svg">WebP 转 SVG</a></li> </ul> </div> <div class="sidebar_adds p5 mt15 box_shadow_border"><span class="ad-label">广告</span><div class="sideXd"><!-- Multiplex --> <ins class="adsbygoogle" style="display:block;width:100%;min-height:400px" data-ad-client="ca-pub-3744783675211834" data-ad-slot="7692867693" data-ad-format="autorelaxed" data-matched-content-ui-type="image_stacked" data-matched-content-columns-num="1" data-matched-content-rows-num="3"></ins> <script>(adsbygoogle=window.adsbygoogle||[]).push({});</script></div></div> <div class="popular_tool_box box_shadow_border pn mb10"><ul><li class="popular-seo-t pn"><div class="mn p10 pop-title">热门 AI 工具</div></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/geo-audit.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/geo-audit">GEO 审计工具</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/llms-txt-generator.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/llms-txt-generator">LLMs.txt生成器</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/ai-content-detector.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/ai-content-detector">AI内容检测器</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/ai-humanizer.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/ai-humanizer">AI人性化改写器</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/ai-keyword-cluster-ideas.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/ai-keyword-cluster-ideas">AI 关键词聚类创意</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/ai-seo-meta-title-generator.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/ai-meta-title-generator">人工智能元标题生成器</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/ai-seo-meta-description-generator.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/ai-meta-description-generator">人工智能元描述生成器</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/article_rewriter_pro.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/paraphrasing-tool">释义工具</a></li><li class="pg-hovr border-bottom"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/article_rewriter_pro.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/article-rewriter-tool">文章改写器</a></li></ul></div><div class="sidebar_adds p5 mt15 box_shadow_border"><span class="ad-label">广告</span><div class="sideXd"><!-- After Popular AI Tools --> <ins class="adsbygoogle" style="display:block;width:100%;min-height:250px" data-ad-client="ca-pub-3744783675211834" data-ad-slot="7276995379" data-ad-format="auto" data-full-width-responsive="true"></ins> <script>(adsbygoogle=window.adsbygoogle||[]).push({});</script></div></div><div class="popular_tool_box box_shadow_border pn mb10"><ul><li class="popular-seo-t pn"><div class="mn p10 pop-title">热门 SEO 工具</div></li><li class="pg-hovr"><div class="icon_image website-seo-score"></div><a href="https://toolspivot.com/zh/website-seo-checker">网站SEO检查器</a></li><li class="pg-hovr"><div class="icon_image plagrism-checker"></div><a href="https://toolspivot.com/zh/plagiarism-checker">抄袭检测</a></li><li class="pg-hovr"><div class="icon_image word-count-checker"></div><a href="https://toolspivot.com/zh/word-counter-tool">字数统计器</a></li><li class="pg-hovr"><div class="icon_image keyword-position-checker"></div><a href="https://toolspivot.com/zh/keyword-rank-checker">关键字排名检查器</a></li><li class="pg-hovr"><div class="icon_image grammer-chacker"></div><a href="https://toolspivot.com/zh/grammar-checker">免费在线语法检查器</a></li><li class="pg-hovr"><div class="icon_image readability-checker"></div><a href="https://toolspivot.com/zh/readability-checker">可读性检查器</a></li><li class="pg-hovr"><div class="icon_image reverse-image"></div><a href="https://toolspivot.com/zh/reverse-image-search">反向图像搜索</a></li><li class="pg-hovr"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/keywordsug.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/keywords-research-tool">关键词研究工具</a></li><li class="pg-hovr"><div class="icon_image keyword-dencity-checker"></div><a href="https://toolspivot.com/zh/keyword-density-checker">关键字密度检查器</a></li><li class="pg-hovr border-bottom"><div class="icon_image" style="background-image:url(https://toolspivot.com/theme/smallseo/icons/html-edit.png);background-size:contain;background-repeat:no-repeat;background-position:center;"></div><a href="https://toolspivot.com/zh/markdown-editor">Markdown 编辑器</a></li></ul></div><div class="sidebar_adds p5 mt15 box_shadow_border"><span class="ad-label">广告</span><div class="sideXd"><!-- After Popular SEO Tools --> <ins class="adsbygoogle" style="display:block;width:100%;min-height:250px" data-ad-client="ca-pub-3744783675211834" data-ad-slot="6571357712" data-ad-format="auto" data-full-width-responsive="true"></ins> <script>(adsbygoogle=window.adsbygoogle||[]).push({});</script></div></div> </div> </div> </div> <script> (function(){ var AJAX = 'https://toolspivot.com/zh/ai-meta-title-generator/ajax'; var BASE_URL = 'https://toolspivot.com/'; var DESC_TOOL_URL = 'https://toolspivot.com/zh/ai-meta-description-generator'; var $ = function(id){ return document.getElementById(id); }; // ----- Pixel width estimation (Roboto/Arial-ish) ----- // Google's actual cutoff is ~580px not 60 chars. We measure with a hidden canvas. var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); ctx.font = '20px Arial, sans-serif'; function pixelWidth(t){ return Math.round(ctx.measureText(t).width); } // ----- CTR heuristic ----- function ctrScore(title, keyword) { var s = 0; var t = title.toLowerCase(); var k = (keyword || '').toLowerCase(); // Keyword in first half: +25 if (k && t.includes(k)) { var pos = t.indexOf(k); if (pos < title.length / 2) s += 25; else s += 12; } // Numbers (listicle bonus): +15 if (/\b(\d{1,3})\b/.test(title)) s += 15; // Power words: +10 each (cap 25) var powers = ['best','top','free','ultimate','proven','complete','essential','easy','quick','simple','new','exclusive','guaranteed','guide','how to']; var pHits = 0; powers.forEach(function(p){ if (t.includes(p)) pHits++; }); s += Math.min(25, pHits * 8); // Year (recency bonus): +10 if (/\b20\d{2}\b/.test(title)) s += 10; // Brackets/parens (eye-catchers): +5 if (/[\[\(]/.test(title)) s += 5; // Question mark (engagement): +5 if (/\?/.test(title)) s += 5; // Optimal length (40-60): +15 if (title.length >= 40 && title.length <= 60) s += 15; // Over-length penalty: -15 if (title.length > 65) s -= 15; return Math.max(0, Math.min(100, s)); } function keywordPosition(title, keyword) { if (!keyword) return 'No keyword'; var t = title.toLowerCase(), k = keyword.toLowerCase(); var i = t.indexOf(k); if (i === -1) return '<span class="amt-pill amt-pill-red">Missing</span>'; if (i < title.length * 0.33) return '<span class="amt-pill amt-pill-green">Start</span>'; if (i < title.length * 0.66) return '<span class="amt-pill amt-pill-yellow">Middle</span>'; return '<span class="amt-pill amt-pill-red">End</span>'; } function charPill(len) { if (len < 40) return '<span class="amt-pill amt-pill-yellow">' + len + '</span>'; if (len <= 60) return '<span class="amt-pill amt-pill-green">' + len + '</span>'; if (len <= 65) return '<span class="amt-pill amt-pill-yellow">' + len + '</span>'; return '<span class="amt-pill amt-pill-red">' + len + '</span>'; } function pixelPill(px) { if (px <= 580) return '<span class="amt-pill amt-pill-green">' + px + 'px</span>'; if (px <= 620) return '<span class="amt-pill amt-pill-yellow">' + px + 'px</span>'; return '<span class="amt-pill amt-pill-red">' + px + 'px</span>'; } function esc(s){return String(s||'').replace(/[&<>"']/g,function(c){return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c];});} function extractTitlesFromResponse(raw) { // Best case: it returned a clean JSON array try { var trimmed = raw.trim().replace(/^```(?:json)?|```$/g, '').trim(); var parsed = JSON.parse(trimmed); if (Array.isArray(parsed)) return parsed.filter(function(x){ return typeof x === 'string' && x.length > 5; }); } catch (e) {} // Fallback: extract first [...] block var m = raw.match(/\[[\s\S]*\]/); if (m) { try { var parsed2 = JSON.parse(m[0]); if (Array.isArray(parsed2)) return parsed2.filter(function(x){ return typeof x === 'string'; }); } catch (e) {} } // Fallback: split on newlines, strip numbering return raw.split(/\n+/).map(function(l){ return l.replace(/^\s*[\d.)\-*"]+\s*/, '').replace(/["'`]+$/g, '').trim(); }).filter(function(l){ return l.length > 10 && l.length < 120; }).slice(0, 10); } function pickBest(rows) { var bestIdx = 0, bestScore = -1; rows.forEach(function(r, i){ if (r.ctr > bestScore){ bestScore = r.ctr; bestIdx = i; } }); return bestIdx; } function updateSerp(title, keyword) { $('amtSerpTitle').textContent = title; var slug = (keyword || 'your-page') .toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, ''); $('amtSerpUrl').textContent = slug; } // ---- Form handlers ---- $('amtClear').addEventListener('click', function(){ $('amtKeyword').value = ''; $('amtBrand').value = ''; $('amtResult').classList.remove('is-shown'); }); $('amtGenerate').addEventListener('click', function(){ var keyword = $('amtKeyword').value.trim(); if (!keyword) { alert('Please enter a primary keyword.'); $('amtKeyword').focus(); return; } var payload = { prompt: 'seo_meta_title', keyword: keyword, title: keyword, brand: $('amtBrand').value.trim(), pageType: $('amtPageType').value, tone: $('amtTone').value, targetLength: document.querySelector('input[name="amtLen"]:checked').value, powerWords: $('amtPowerWords').checked ? '1' : '', includeYear: $('amtIncludeYear').checked ? '1' : '' }; $('amtResult').classList.add('is-shown'); $('amtResultCard').innerHTML = '<div class="amt-loading"><i class="fa fa-spinner"></i>Generating 10 SEO-optimized titles...</div>'; $('amtGenerate').disabled = true; fetch(AJAX, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }).then(function(r){return r.json();}).then(function(res){ $('amtGenerate').disabled = false; if (!res.success) { $('amtResultCard').innerHTML = '<div class="amt-error">Generation failed. Try again.</div>'; return; } var titles = extractTitlesFromResponse(res.data || ''); if (!titles.length) { $('amtResultCard').innerHTML = '<div class="amt-error">The AI didn\'t return valid titles. Please try again with a clearer keyword.</div>'; return; } var rows = titles.map(function(t){ return { title: t, chars: t.length, px: pixelWidth(t), ctr: ctrScore(t, keyword), pos: keywordPosition(t, keyword) }; }); var bestIdx = pickBest(rows); var html = '<h2 style="font-size:18px;margin:0 0 14px;color:#1a202c;">Your ' + rows.length + ' Title Variants <span style="font-weight:400;color:#6b7280;font-size:13px;">— click any title to preview</span></h2>' + '<table class="amt-table"><thead><tr>' + '<th style="width:50%;">Title</th>' + '<th style="text-align:center;">Chars</th>' + '<th style="text-align:center;">Pixels</th>' + '<th style="text-align:center;">Keyword</th>' + '<th style="text-align:center;">CTR Score</th>' + '<th>Actions</th>' + '</tr></thead><tbody>'; rows.forEach(function(r, i){ var isBest = i === bestIdx; html += '<tr ' + (isBest ? 'class="amt-best"' : '') + ' data-title="' + esc(r.title) + '">' + '<td><div class="amt-title-text">' + esc(r.title) + (isBest ? ' <span class="amt-pill amt-pill-green" style="margin-left:6px;">🏆 BEST</span>' : '') + '</div></td>' + '<td style="text-align:center;">' + charPill(r.chars) + '</td>' + '<td style="text-align:center;">' + pixelPill(r.px) + '</td>' + '<td style="text-align:center;">' + r.pos + '</td>' + '<td class="amt-score-cell">' + r.ctr + '<span class="amt-score-bar"><span class="amt-score-bar-fill" style="width:' + r.ctr + '%;"></span></span></td>' + '<td>' + '<button class="amt-action-btn amt-preview" data-i="' + i + '">Preview</button>' + '<button class="amt-action-btn amt-copy" data-i="' + i + '">Copy</button>' + '</td>' + '</tr>'; }); html += '</tbody></table>'; $('amtResultCard').innerHTML = html; // Wire up actions document.querySelectorAll('.amt-preview').forEach(function(b){ b.addEventListener('click', function(){ var idx = parseInt(b.getAttribute('data-i'), 10); updateSerp(rows[idx].title, keyword); document.getElementById('amtSerpTitle').scrollIntoView({behavior:'smooth', block:'nearest'}); }); }); document.querySelectorAll('.amt-copy').forEach(function(b){ b.addEventListener('click', function(){ var idx = parseInt(b.getAttribute('data-i'), 10); navigator.clipboard.writeText(rows[idx].title).then(function(){ var old = b.innerHTML; b.innerHTML = '✓ Copied'; setTimeout(function(){ b.innerHTML = old; }, 1500); }); }); }); // Pre-populate SERP with the best updateSerp(rows[bestIdx].title, keyword); // Cross-tool link: pre-fill description generator $('amtNextStep').href = DESC_TOOL_URL + '?title=' + encodeURIComponent(rows[bestIdx].title) + '&keyword=' + encodeURIComponent(keyword); }).catch(function(e){ $('amtGenerate').disabled = false; $('amtResultCard').innerHTML = '<div class="amt-error">Network error. Please try again.</div>'; }); }); })(); </script> </div></div></div><!-- Bug Button --> <style> /* REPORT A BUG - a 48px circle, not a slab. * * It used to be a 136x47 orange rectangle, which made it the fourth orange CTA * on a tool page (the tool's own "Choose files" and the action button are the * other two) and the most permanently visible one - competing with the button * we actually want pressed. As a small icon it competes by SIZE instead of by * colour: 48px against a 300px action bar reads as subordinate at a glance. * * MOVED TO THE LEFT CORNER. The right corner now carries the chat launcher * and the back-to-top control; a third circle stacked in the same column read * as clutter, and on a 375px screen the stack reached a third of the height. * Left also separates the two supports: ask on the right, report on the left. */ #bug-btn { position: fixed; left: 12px; /* --aic-b is raised by ai-chat.js while the cookie consent bar is on screen, so these controls never sit on top of it. Falls back to 12px when the script has not run. */ bottom: var(--aic-b, 12px); width: 48px; /* 44px is the touch-target floor; 48 has margin */ height: 48px; border-radius: 50%; background: #fa4c10; color: #fff; display: flex; align-items: center; justify-content: center; text-decoration: none; box-shadow: 0 2px 8px rgba(0,0,0,.28); /* Under the back-to-top, so if they ever do meet the arrow still wins. */ z-index: 9999; transition: transform .18s ease, box-shadow .18s ease; } #bug-btn:hover, #bug-btn:focus-visible { color: #fff; text-decoration: none; transform: translateY(-2px); box-shadow: 0 4px 14px rgba(0,0,0,.34); } #bug-btn:focus-visible { outline: 3px solid #fff; outline-offset: 2px; box-shadow: 0 0 0 6px rgba(250,76,16,.45); } #bug-btn .fa { font-size: 20px; line-height: 1; } /* AN ICON ALONE DOES NOT SAY WHAT IT DOES. The accessible name is on the link for screen readers; this is the same thing for everyone else, revealed on hover or keyboard focus so the button stays a circle at rest. */ #bug-btn .bug-btn-label { position: absolute; left: 58px; /* flies out to the right of a left-corner button */ white-space: nowrap; background: #1c1c1c; color: #fff; font-size: 13px; font-weight: 600; padding: 6px 10px; border-radius: 6px; opacity: 0; transform: translateX(6px); pointer-events: none; transition: opacity .18s ease, transform .18s ease; } #bug-btn .bug-btn-label { transform: translateX(-6px); } #bug-btn:hover .bug-btn-label, #bug-btn:focus-visible .bug-btn-label { opacity: 1; transform: translateX(0); } /* On a phone there is no hover and the label would sit under the thumb, so the circle stands alone - the accessible name still carries the meaning. */ @media (max-width: 767px) { #bug-btn .bug-btn-label { display: none; } } @media (prefers-reduced-motion: reduce) { #bug-btn, #bug-btn .bug-btn-label { transition: none; } #bug-btn:hover, #bug-btn:focus-visible { transform: none; } } /* --------------------------------------------------------------------------- AI chat widget. Layout follows the modern support-widget convention: a flat light panel rather than a coloured header bar, a floating identity card naming who is answering, assistant text with no bubble around it, and a pill composer. The brand mark is ours - the ToolsPivot icon from the favicon setting. Stacking order in the bottom-right column, measured not assumed: launcher bottom var(--aic-b), z 10001 (primary support action, 56px) .top 68px above it, z 10000 (back-to-top, shifted to clear it) #bug-btn moved to the LEFT corner - see its block above. --aic-b is raised by ai-chat.js while the cookie consent bar is on screen, and .aic-hold keeps both controls hidden until window.load. --------------------------------------------------------------------------- */ .aic-hold #aic-launch, .aic-hold #bug-btn { visibility: hidden; opacity: 0; } #aic-launch, #bug-btn { transition: opacity .25s ease; } #aic-launch { position: fixed; right: 12px; bottom: var(--aic-b, 12px); width: 56px; height: 56px; border: 0; border-radius: 50%; background: #fa4c10; color: #fff; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 4px 14px rgba(250,76,16,.38); z-index: 10001; transition: transform .18s ease, box-shadow .18s ease, opacity .25s ease; } /* A speech bubble, not the ToolsPivot mark: the mark is orange and light grey, so on an orange disc its orange half disappears - and this control's job is to say "chat". The mark identifies the assistant inside the panel instead. */ #aic-launch .fa { font-size: 23px; line-height: 1; } #aic-launch:hover { transform: translateY(-2px); box-shadow: 0 6px 20px rgba(250,76,16,.5); } #aic-launch:focus-visible { outline: 3px solid #fff; outline-offset: 2px; box-shadow: 0 0 0 6px rgba(250,76,16,.45); } body.aic-on .top { bottom: calc(var(--aic-b, 12px) + 68px) !important; } #aic-panel { position: fixed; right: 12px; bottom: calc(var(--aic-b, 12px) + 68px); width: 380px; max-width: calc(100vw - 24px); height: 580px; max-height: calc(100vh - 150px); background: #f6f4f3; /* flat light field, no header bar */ border: 1px solid #e8e2de; border-radius: 16px; box-shadow: 0 18px 48px rgba(28,12,4,.22); display: flex; flex-direction: column; overflow: hidden; z-index: 10002; font-family: 'open sans', sans-serif; transform-origin: bottom right; animation: aic-in .18s ease-out; } @keyframes aic-in { from { opacity: 0; transform: scale(.94) translateY(8px); } } /* --- header ------------------------------------------------------------- */ /* One bar carrying identity and the close control, rather than a floating close row above a separate floating card: two stacked chrome layers ate the top of the panel and read as two unrelated things. Identity belongs in the header - who is answering, and that it is a machine. A support widget that hides that is one people distrust the moment it gets something wrong. */ #aic-head { flex: 0 0 auto; display: flex; align-items: center; gap: 11px; /* 16px left matches #aic-log's padding, so the header mark and every message avatar sit on one vertical edge. It was 14px and they were 2px apart, which is exactly the sort of gap that reads as sloppy without being obvious. */ padding: 12px 12px 12px 16px; background: #fff; border-bottom: 1px solid #e8e2de; } #aic-close { width: 34px; height: 34px; border: 0; border-radius: 50%; flex: 0 0 34px; background: rgba(0,0,0,.05); color: #3f3a37; cursor: pointer; font-size: 15px; line-height: 1; display: flex; align-items: center; justify-content: center; /* 34px visual, 44px hit area - the target rule is about what the finger must reach, not what the eye must see. */ position: relative; } #aic-close::before { content: ''; position: absolute; top: -5px; left: -5px; right: -5px; bottom: -5px; } #aic-close:hover { background: rgba(0,0,0,.11); } #aic-close:focus-visible { outline: 2px solid #fa4c10; outline-offset: 2px; } #aic-mark { position: relative; width: 38px; height: 38px; flex: 0 0 38px; } #aic-head .aic-ttl { flex: 1 1 auto; min-width: 0; } /* The disc is black because the icon itself is: every uploaded ToolsPivot Icon has an opaque black field and none is transparent, so the image fills the circle and its own background becomes the disc. */ #aic-mark .aic-disc { width: 38px; height: 38px; border-radius: 50%; overflow: hidden; background: #000; } #aic-mark img { width: 100%; height: 100%; display: block; } #aic-mark .aic-dot { position: absolute; top: -1px; right: -1px; width: 11px; height: 11px; border-radius: 50%; background: #22c55e; border: 2px solid #fff; } #aic-head h2 { font-size: 15px; font-weight: 700; margin: 0; color: #1f1b19; line-height: 1.25; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } #aic-head .aic-sub { font-size: 12.5px; color: #7d726c; margin: 1px 0 0; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } /* --- message list ------------------------------------------------------- */ #aic-log { flex: 1 1 auto; overflow-y: auto; padding: 16px; } .aic-msg { display: flex; gap: 10px; margin: 0 0 16px; font-size: 14.5px; line-height: 1.6; } .aic-msg:last-child { margin-bottom: 0; } .aic-me { justify-content: flex-end; } .aic-col { min-width: 0; max-width: 88%; } /* margin-top centres the avatar on the first LINE BOX of the message, not on the row: measured 1.8px low at margin-top:1px, so -1px lands it. Line box is 23.2px (14.5px x 1.6) against a 28px avatar. */ .aic-av { width: 28px; height: 28px; border-radius: 50%; flex: 0 0 28px; background: #000; margin-top: -1px; overflow: hidden; } .aic-av img { width: 100%; height: 100%; display: block; } /* Assistant text carries no bubble: the avatar already marks the speaker, and an unboxed answer reads as prose rather than as a chat artefact. */ .aic-ai .aic-b { background: transparent; border: 0; padding: 2px 0 0; color: #2b2622; } .aic-me .aic-b { background: #fa4c10; color: #fff; padding: 10px 14px; border-radius: 16px 16px 4px 16px; } .aic-note .aic-b { color: #2b2622; } .aic-err .aic-b { background: #fdf3f3; border: 1px solid #f0c9c9; color: #8a2020; padding: 10px 13px; border-radius: 12px; } /* --- source card -------------------------------------------------------- */ /* This is the conversion: the answer names a tool, this opens it. */ .aic-src { margin: 10px 0 0; padding: 0; list-style: none; } .aic-src li { margin: 6px 0 0; } .aic-src a { display: flex; align-items: center; gap: 8px; padding: 10px 13px; background: #fff; border: 1px solid #e8e2de; border-radius: 12px; color: #b23a0c; font-size: 13.5px; font-weight: 600; text-decoration: none; transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease; } .aic-src a .aic-sarrow { margin-left: auto; opacity: .55; font-size: 12px; } .aic-src a:hover, .aic-src a:focus-visible { border-color: #fa4c10; color: #8f2e0a; text-decoration: none; transform: translateX(2px); box-shadow: 0 2px 8px rgba(250,76,16,.14); } .aic-src a:focus-visible { outline: 2px solid #fa4c10; outline-offset: 1px; } /* --- suggested questions ------------------------------------------------ */ /* An empty chat is a blank page problem: people do not know what it can answer, so they ask nothing. Editable in admin, not hardcoded. */ #aic-sug { margin: 16px 0 0; } #aic-sug .aic-sug-h { font-size: 11.5px; text-transform: uppercase; letter-spacing: .04em; color: #9b8d85; margin: 0 0 8px; font-weight: 700; } .aic-chip { display: block; width: 100%; text-align: left; background: #fff; border: 1px solid #e8e2de; border-radius: 12px; padding: 11px 13px; margin: 0 0 8px; font-size: 13.5px; color: #433b36; cursor: pointer; font-family: inherit; line-height: 1.45; transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease; } .aic-chip:hover { border-color: #fa4c10; color: #1f1b19; transform: translateX(2px); box-shadow: 0 2px 8px rgba(250,76,16,.14); } .aic-chip:focus-visible { outline: 2px solid #fa4c10; outline-offset: 1px; } /* --- escalation to a human --------------------------------------------- */ /* Offered only when the assistant could not answer. Progressive disclosure: a button first, fields only once pressed, so a dead end becomes a route to a person without putting a form in front of everyone. */ .aic-esc { margin: 12px 0 0; padding: 13px; background: #fff; border: 1px solid #e8e2de; border-radius: 14px; } .aic-esc-h { font-size: 13.5px; color: #433b36; margin: 0 0 10px; font-weight: 600; } .aic-esc .aic-btn { display: inline-flex; align-items: center; gap: 7px; background: #fa4c10; color: #fff; border: 0; border-radius: 999px; padding: 10px 18px; font-size: 13.5px; font-weight: 600; cursor: pointer; font-family: inherit; min-height: 42px; } .aic-esc .aic-btn:hover { background: #e34410; } .aic-esc .aic-btn:focus-visible { outline: 3px solid #fff; box-shadow: 0 0 0 5px rgba(250,76,16,.45); } .aic-esc .aic-btn[disabled] { opacity: .5; cursor: not-allowed; } /* Visible labels, not placeholder-only: a placeholder disappears the moment someone types, which is exactly when they need to know what the field was. */ .aic-f { margin: 0 0 10px; } .aic-f label { display: block; font-size: 12px; font-weight: 600; color: #6b5f59; margin: 0 0 4px; } .aic-f label .aic-opt { font-weight: 400; color: #9b8d85; } .aic-f input, .aic-f textarea { width: 100%; border: 1px solid #e2dad5; border-radius: 10px; padding: 10px 12px; font-size: 16px; /* 16px stops iOS zooming on focus */ font-family: inherit; color: #222; background: #faf8f7; line-height: 1.4; } .aic-f textarea { resize: vertical; min-height: 72px; } .aic-f input:focus, .aic-f textarea:focus { border-color: #fa4c10; background: #fff; outline: 2px solid rgba(250,76,16,.22); } .aic-f .aic-ferr { display: block; font-size: 12px; color: #b02a2a; margin: 4px 0 0; } .aic-esc-ok { font-size: 13.5px; color: #1d6b3a; margin: 0; display: flex; gap: 7px; align-items: flex-start; } /* Three dots, not a spinner: the wait is short and this says "composing". */ .aic-dots span { display: inline-block; width: 6px; height: 6px; margin-right: 3px; background: #bcaea6; border-radius: 50%; animation: aic-bounce 1s infinite; } .aic-dots span:nth-child(2) { animation-delay: .15s; } .aic-dots span:nth-child(3) { animation-delay: .3s; } @keyframes aic-bounce { 0%,60%,100% { opacity: .35; transform: translateY(0); } 30% { opacity: 1; transform: translateY(-2px); } } /* --- privacy notice ----------------------------------------------------- */ /* Says plainly that the question leaves the site, because it does: it goes to an AI provider to be answered. Dismissible and remembered, so it informs once instead of nagging. */ #aic-note { flex: 0 0 auto; display: flex; align-items: flex-start; gap: 8px; margin: 0 14px; padding: 10px 12px; background: #fff; border: 1px solid #e8e2de; border-radius: 12px; } #aic-note p { flex: 1 1 auto; margin: 0; font-size: 11.5px; line-height: 1.5; color: #7d726c; } #aic-note a { color: #b23a0c; text-decoration: underline; } #aic-note a:hover, #aic-note a:focus-visible { color: #8f2e0a; } #aic-note .aic-nx { flex: 0 0 24px; width: 24px; height: 24px; border: 0; border-radius: 50%; background: transparent; color: #9b8d85; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; position: relative; } /* 24px visual, 44px reachable */ #aic-note .aic-nx::before { content: ''; position: absolute; top: -10px; left: -10px; right: -10px; bottom: -10px; } #aic-note .aic-nx:hover { background: rgba(0,0,0,.06); color: #3f3a37; } #aic-note .aic-nx:focus-visible { outline: 2px solid #fa4c10; outline-offset: 1px; } /* --- composer ----------------------------------------------------------- */ #aic-foot { flex: 0 0 auto; padding: 10px 14px 14px; display: flex; gap: 8px; align-items: flex-end; } #aic-cw { flex: 1 1 auto; display: flex; align-items: flex-end; gap: 6px; background: #fff; border: 1px solid #e2dad5; border-radius: 24px; padding: 4px 4px 4px 16px; } #aic-cw:focus-within { border-color: #fa4c10; box-shadow: 0 0 0 3px rgba(250,76,16,.16); } #aic-q { flex: 1 1 auto; resize: none; border: 0; background: transparent; padding: 11px 0; font-size: 16px; /* 16px stops iOS zooming on focus */ line-height: 1.4; max-height: 96px; font-family: inherit; color: #222; } #aic-q:focus { outline: none; } #aic-send { flex: 0 0 auto; width: 40px; height: 40px; border: 0; border-radius: 50%; background: #fa4c10; color: #fff; cursor: pointer; font-size: 14px; display: flex; align-items: center; justify-content: center; transition: background .15s ease; } #aic-send:hover { background: #e34410; } #aic-send:focus-visible { outline: 3px solid #fff; box-shadow: 0 0 0 5px rgba(250,76,16,.45); } #aic-send[disabled] { opacity: .4; cursor: not-allowed; } #aic-cap { padding: 12px 16px; margin: 0 14px 10px; background: #fff; border: 1px solid #e8e2de; border-radius: 14px; } #aic-cap p { font-size: 13px; margin: 0 0 8px; color: #555; } @media (max-width: 767px) { #aic-panel { right: 12px; left: 12px; width: auto; bottom: calc(var(--aic-b, 12px) + 64px); height: auto; top: 12px; /* full height on a phone */ max-height: none; } .aic-col { max-width: 90%; } } @media (prefers-reduced-motion: reduce) { #aic-launch, .aic-chip, .aic-src a, #aic-send, #bug-btn { transition: none; } #aic-launch:hover, .aic-chip:hover, .aic-src a:hover { transform: none; } #aic-panel { animation: none; } .aic-dots span { animation: none; opacity: .6; } } </style> <a id="bug-btn" href="https://toolspivot.com/zh/report-bug" rel="nofollow" title="报告问题" aria-label="报告问题" onclick="this.href = this.href.split('?')[0] + '?url=' + encodeURIComponent(window.location.href)"> <i class="fa fa-bug" aria-hidden="true"></i> <span class="bug-btn-label">报告问题</span> </a> <!-- Bug Button End--> <script>document.documentElement.className += ' aic-hold';</script> <button id="aic-launch" type="button" aria-expanded="false" aria-controls="aic-panel" title="提问" aria-label="提问"> <i class="fa fa-comment" aria-hidden="true"></i> </button> <script> window.AICHAT_CFG = { ask: "https:\/\/toolspivot.com\/ai-chat\/ask", verify: "https:\/\/toolspivot.com\/ai-chat\/captchaverify", contact: "https:\/\/toolspivot.com\/ai-chat\/contact", privacy: "https:\/\/toolspivot.com\/zh\/page\/privacy-policy", lang: "zh", sitekey: "", icon: "https:\/\/toolspivot.com\/uploads\/74432335_ToolsPivot Icon.png", suggest: ["检查我的网站是否宕机","我的关键词排名第几?","查看我的域名权重","检查我的语法"], t: {"title":"询问 ToolsPivot","open":"提问","close":"关闭","intro":"询问 ToolsPivot 上的任何工具,我会为你指路。","ph":"输入你的问题","send":"发送","think":"思考中","err":"出错了,请重试。","rate":"你已达到提问次数上限,请稍后再试。","src":"来源","sub":"答案来自 ToolsPivot 自己的页面","role":"AI 助手","note":"你的问题会发送给 AI 服务商以生成回答。我们不会保存你的消息。","notelnk":"隐私政策","notedis":"不再显示","sugh":"试着问","esc":"还需要帮助吗?","escbtn":"联系我们的团队","cname":"你的姓名","cmail":"你的邮箱","cmsg":"有什么可以帮你?","csend":"发送消息","cok":"谢谢,我们已收到你的消息,会通过邮件回复你。","cbad":"请输入有效的邮箱地址。","copt":"选填","cap":"请确认你不是机器人以继续。","capfail":"验证失败,请重试。"}}; </script> <script src="https://toolspivot.com/theme/smallseo/js/ai-chat.js?v=20260906p" defer></script> <div class="f_intro_bg text-center"> <form class="navbar-form mn" action="#"> <img src="https://toolspivot.com/theme/smallseo/img/form_subcribe_footer_brand.png?v=1788577768" class="f_icon" alt="" loading="lazy" decoding="async"> <span class="f_text">订阅我们的资讯邮件</span> <div class="input-group"> <input id="newsletterEmail" name="email" placeholder="请输入您的电子邮箱" class="form-control search_input pl30" type="email"> <div class="input-group-btn"> <button id="newsletterSubscribe" type="submit" class="btn btn-default search_button">订阅</button> </div> </div> </form> </div> <div class="f_description_bg text-center"> <div class="f_graph"> <div class="container"> <div class="col-lg-1 col-md-1"></div> <div class="col-lg-3 col-md-3 col-sm-4 col-xs-12 f_logo_box f_contect pn"> <a class="navbar-brand ptn" href="https://toolspivot.com/zh"><img src="https://toolspivot.com/uploads/ToolsPivot Logo Light.png" alt="ToolsPivot" width="398" height="78" loading="lazy" decoding="async" /></a> <div class="contect_info col-xs-12 pn"> <p>联系我们</p> <span>info@toolspivot.com</span> </div> <div class="address_info col-xs-12 pn"> <p>地址</p> <span>Ward No.1, Nehuta, P.O - Kusha, P.S - Dobhi, Gaya, Bihar, India, 824220</span> </div> </div> <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 lef_to_right_border f_version"> <p>最受欢迎的工具</p> <a href="https://toolspivot.com/zh/word-counter-tool" title="Word Counter"><div class="ver_img has-fa"><i class="fa fa-file-text-o"></i></div></a> <a href="https://toolspivot.com/zh/plagiarism-checker" title="Plagiarism Checker"><div class="ver_img has-fa"><i class="fa fa-search"></i></div></a> <a href="https://toolspivot.com/zh/sitemap-generator-tool" title="Sitemap Generator"><div class="ver_img has-fa"><i class="fa fa-sitemap"></i></div></a> <a href="https://toolspivot.com/zh/robots-txt-generator" title="Robots.txt Generator"><div class="ver_img has-fa"><i class="fa fa-android"></i></div></a> <a href="https://toolspivot.com/zh/reverse-image-search" title="Reverse Image Search"><div class="ver_img has-fa"><i class="fa fa-picture-o"></i></div></a> <a href="https://toolspivot.com/zh/keywords-research-tool" title="Keywords Research"><div class="ver_img has-fa"><i class="fa fa-key"></i></div></a> <a href="https://toolspivot.com/zh/backlink-maker" title="Backlink Maker"><div class="ver_img has-fa"><i class="fa fa-link"></i></div></a> <a href="https://toolspivot.com/zh/meta-tag-generator" title="Meta Tag Generator"><div class="ver_img has-fa"><i class="fa fa-tags"></i></div></a> <a href="https://toolspivot.com/zh/page-speed-checker" title="Page Speed Checker"><div class="ver_img has-fa"><i class="fa fa-tachometer"></i></div></a> <a href="https://toolspivot.com/zh/article-rewriter-tool" title="Article Rewriter"><div class="ver_img has-fa"><i class="fa fa-pencil-square-o"></i></div></a> </div> <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 f_contect pl30" style="min-height: 230px;"> <div class="mor_pages"> <p>快速链接</p> <ul style="list-style:none;margin:0;padding:0;"> <li><a href="https://toolspivot.com/zh">首页</a></li><li><a href="https://toolspivot.com/zh/page/dmca">著作权与 DMCA</a></li><li><a href="https://toolspivot.com/zh/page/privacy-policy">隐私政策</a></li><li><a href="https://toolspivot.com/zh/page/terms-of-service">服务条款</a></li><li><a href="https://toolspivot.com/zh/contact">联系我们</a></li><li><a href="https://toolspivot.com/doc/zh">DocPivot</a></li><li><a href="https://toolspivot.com/zh/page/about-us">关于我们</a></li> </ul> </div> </div> </div> </div> </div> <div class="clearfix"></div> <div style="position: relative;"> <div class="container-fluid p10 footer"> <div class="container pn"> <div class="col-md-6 col-sm-12 col-xs-12 text-center pull-right_big"> </div> <div class="col-md-6 col-sm-12 col-xs-12"> <p class="text-center margin0">版权所有 © 2018-2026 ToolsPivot.com 保留所有权利。 </p> </div> </div> </div> </div> <script type="text/javascript"> $("body").append('<div class="top">↑</div>'),$(window).scroll(function(){$(this).scrollTop()>220?$(".top").fadeIn(500):$(".top").fadeOut(500)}),$(".top").click(function(a){return a.preventDefault(),$("html, body").animate({scrollTop:0},500),!1}) </script> <script> jQuery(document).ready(function(){ jQuery("#newsletterSubscribe").click(function(e) { e.preventDefault(); var newsletterEmail = jQuery('#newsletterEmail').val(); if (newsletterEmail == '') { sweetAlert(oopsStr, inputEm, "error"); }else { jQuery.post(baseUrl + 'newsletter', {subscribe: '1', email: newsletterEmail}, function (data) { if (data.success) sweetAlert('Success', data.msg, "success"); else sweetAlert(oopsStr, data.msg, "error"); }); } }); }); </script> <!-- Bootstrap --> <script src="https://toolspivot.com/theme/smallseo/js/bootstrap.min.js?v=1743851074" type="text/javascript"></script> <!-- Sweet Alert --> <script type='text/javascript' src='https://toolspivot.com/theme/smallseo/js/sweetalert.min.js?v=1743851074'></script> <!-- App JS (self-contained UI: mega-menu, TOC, etc. — safe to defer). No manual ?v= needed: themeLink() already appends ?v=filemtime, so editing this file busts the two-month JS cache in .htaccess by itself. --> <script src="https://toolspivot.com/theme/smallseo/js/app.js?v=1786855079" type="text/javascript" defer></script> <!-- Navbar mega menus. On every page now, not just /doc/*, because ToolsPivot's navbar carries All PDF Tools and All Image Tools too. The script returns immediately when there is no `.dp-mega-wrap` on the page, so anywhere the menus are absent it costs one querySelectorAll. Deferred: the panels are plain lists of links until it runs, so nothing is broken in flight. --> <script src="https://toolspivot.com/theme/smallseo/js/docpivot/megamenu.js?v=1786408068" type="text/javascript" defer></script> <!-- Master JS --> <script src="https://toolspivot.com/zh/rainbow/master-js?v=3d84fe0b9a" type="text/javascript"></script> <!-- XD Box --> <div class="modal fade loginme" id="xdBox" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button id="xdClose" type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <div class="modal-title" id="xdTitle"></div> </div> <div class="modal-body" id="xdContent"> </div> </div> </div> </div> <script> $("#collapse0").collapse();</script></body> </html> <!-- Cookie consent banner — GDPR/ePrivacy compliance. Renders only if no consent cookie set yet. --> <div id="bvCookieBar" style="display:none;position:fixed;left:0;right:0;bottom:0;background:#1a202c;color:#fff;padding:14px 20px;z-index:9998;box-shadow:0 -2px 12px rgba(0,0,0,0.15);font-size:14px;line-height:1.5;"> <div style="max-width:1200px;margin:0 auto;display:flex;gap:16px;align-items:center;flex-wrap:wrap;"> <div style="flex:1;min-width:240px;"> 🍪 We use cookies for analytics and ad personalisation. Choose whether to allow non-essential cookies. Essential cookies keep the site working and are always on. See our <a href="https://toolspivot.com/zh/page/privacy-policy" style="color:#fa4c10;text-decoration:underline;">Privacy Policy</a>. </div> <div style="display:flex;gap:8px;flex-wrap:wrap;"> <button type="button" id="bvCookieAccept" style="background:#fa4c10;color:#fff;border:0;padding:9px 18px;border-radius:6px;font-weight:600;cursor:pointer;">Accept all</button> <button type="button" id="bvCookieDecline" style="background:transparent;color:#fff;border:1px solid rgba(255,255,255,0.3);padding:9px 16px;border-radius:6px;font-weight:600;cursor:pointer;">Reject</button> </div> </div> </div> <script> (function(){ var COOKIE = 'bv_cookie_consent'; var bar = document.getElementById('bvCookieBar'); // Read consent cookie function getConsent() { var m = document.cookie.match(/(?:^|; )bv_cookie_consent=([^;]+)/); if (!m) return null; try { return decodeURIComponent(m[1]); } catch (e) { return null; } } function setConsent(val) { var d = new Date(); d.setTime(d.getTime() + 365 * 86400 * 1000); document.cookie = COOKIE + '=' + val + '; expires=' + d.toUTCString() + '; path=/; SameSite=Lax'; } if (!getConsent()) { bar.style.display = ''; } document.getElementById('bvCookieAccept').addEventListener('click', function(){ setConsent('accepted'); bar.style.display = 'none'; // Optionally re-fire analytics with consent if (typeof gtag === 'function') gtag('consent', 'update', { ad_storage: 'granted', ad_user_data: 'granted', ad_personalization: 'granted', analytics_storage: 'granted' }); }); document.getElementById('bvCookieDecline').addEventListener('click', function(){ setConsent('declined'); bar.style.display = 'none'; if (typeof gtag === 'function') gtag('consent', 'update', { ad_storage: 'denied', ad_user_data: 'denied', ad_personalization: 'denied', analytics_storage: 'denied' }); }); })(); </script>