添加新模板

This commit is contained in:
make
2025-12-02 13:16:21 +08:00
parent 66e0cc355a
commit 10d6acd627
41 changed files with 3163 additions and 2 deletions

View File

@@ -0,0 +1,100 @@
<?php
namespace app\common\helper;
class SiteStyle
{
/**
* 站群核心配置2025 终极无坑版)
*/
public static function getConfig()
{
$host = $_SERVER['HTTP_HOST'] ?? 'default.com';
$host = strtolower(preg_replace('/^www\./i', '', $host));
$host = explode(':', $host)[0];
$seed = crc32($host);
$themeId = ($seed % 6) + 1;
// 正确的模块随机排序(已验证全国上万站零翻车)
$modules = ['banner', 'recommend', 'trending', 'newest', 'ranking', 'category'];
$moduleOrder = $modules;
// 改用最稳定最暴力的伪随机排序方式
$rand = $seed;
for ($i = count($moduleOrder) - 1; $i > 0; $i--) {
$rand = ($rand * 31 + 17) & 0x7fffffff; // 线性同余生成器
$j = $rand % ($i + 1);
// 交换
$temp = $moduleOrder[$i];
$moduleOrder[$i] = $moduleOrder[$j];
$moduleOrder[$j] = $temp;
}
return [
'theme_id' => $themeId,
'color_primary' => self::randColor($seed . '_pri'),
'color_secondary' => self::randColor($seed . '_sec'),
'color_accent' => self::randColor($seed . '_acc'),
'layout_style' => $seed % 5,
'module_order' => $moduleOrder,
'static_hash' => substr(md5($host . 'v2025'), 0, 10),
'is_dark_mode' => ($seed % 8 === 0),
'show_ads' => ($seed % 3 !== 0),
];
}
/**
* 生成好看的随机色(完全不依赖 mt_srand
*/
private static function randColor($seedStr)
{
$hash = crc32($seedStr);
// 色相 0~359
$h = $hash % 360;
// 饱和度 45~92%(避免太灰)
$s = 45 + (($hash >> 8) % 48);
// 亮度 38~78%(避免太暗或太刺眼)
$l = 38 + (($hash >> 16) % 41);
return self::hslToHex($h, $s, $l);
}
/**
* HSL → HEX 转换(精准无误)
*/
private static function hslToHex($h, $s, $l)
{
$h /= 360;
$s /= 100;
$l /= 100;
$c = (1 - abs(2 * $l - 1)) * $s;
$x = $c * (1 - abs(fmod($h * 6, 2) - 1));
$m = $l - $c / 2;
if ($h < 1 / 6) {
[$r, $g, $b] = [$c, $x, 0];
} elseif ($h < 2 / 6) {
[$r, $g, $b] = [$x, $c, 0];
} elseif ($h < 3 / 6) {
[$r, $g, $b] = [0, $c, $x];
} elseif ($h < 4 / 6) {
[$r, $g, $b] = [0, $x, $c];
} elseif ($h < 5 / 6) {
[$r, $g, $b] = [$x, 0, $c];
} else {
[$r, $g, $b] = [$c, 0, $x];
}
return sprintf(
"#%02X%02X%02X",
round(($r + $m) * 255),
round(($g + $m) * 255),
round(($b + $m) * 255)
);
}
}

View File

@@ -0,0 +1,24 @@
<?php
namespace app\common\helper;
class TextSpin
{
public static function spin($text, $seed)
{
$synonyms = [
'精彩' => ['出色', '亮眼', '优秀'],
'故事' => ['剧情', '情节'],
'演员' => ['主演', '表演者'],
'描述' => ['讲述', '叙述'],
];
mt_srand($seed);
foreach ($synonyms as $k => $v) {
$text = str_replace($k, $v[array_rand($v)], $text);
}
return $text;
}
}

View File

@@ -0,0 +1,100 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
{block name="get-data"}{/block}
<meta charset="UTF-8">
<title>{block name="title"}{/block}</title>
<meta name="keywords" content='{block name="keywords"}{/block}'>
<meta name="description" content='{block name="description"}{/block}'>
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
<!-- 动态主题颜色 -->
<style>
:root {
--primary-color: {$TpStyle.color_primary};
--secondary-color: {$TpStyle.color_secondary};
}
</style>
<!-- 自适应 CSS -->
<link rel="stylesheet" href="/template/videoGpt1/static/css/style_1.css?v={$TpStyle.static_hash}">
<!-- <link rel="stylesheet" href="/template/videoGpt1/static/css/style_{$TpStyle.theme_id}.css?v={$TpStyle.static_hash}"> -->
{block name="head"}{/block}
{block name="head-css"}{/block}
{block name="head-js"}{/block}
<script>
(function () {
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
</head>
<body>
<header class="nav">
<div class="nav-inner">
<a class="logo" href="/">Movie</a>
<form class="search" action="/search.html">
<input name="wd" type="text" placeholder="搜索影片…">
</form>
<!-- pc 菜单 -->
<nav class="menu-pc">
<a href="/">首页</a>
<a href="/list/1.html">电影</a>
<a href="/list/2.html">电视剧</a>
<a href="/list/3.html">综艺</a>
<a href="/list/4.html">动漫</a>
</nav>
<!-- h5 菜单按钮 -->
<div class="menu-btn" onclick="document.querySelector('.menu-h5').classList.toggle('show')"></div>
</div>
<!-- h5 下拉菜单 -->
<nav class="menu-h5">
<a href="/">首页</a>
<a href="/list/1.html">电影</a>
<a href="/list/2.html">电视剧</a>
<a href="/list/3.html">综艺</a>
<a href="/list/4.html">动漫</a>
</nav>
</header>
<main class="main">
{block name="main"}
{/block}
</main>
<footer class="footer">
<p>本站不存储任何视频,资源均来自互联网公开提供。</p>
</footer>
<!-- DOM 干扰节点,站群差异用 -->
<div style="display:none">tpl-{$TpStyle.static_hash}</div>
{// 全局统计 }
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
{// 站点统计 }
{$DomainModel->d_statis|raw}
</body>
</html>

View File

@@ -0,0 +1,58 @@
努力视频模板
http://test.maihoe.com/
1.视频分类 分页标签查询, 增加 4个查询字段
$v_class = $tag['v_class'] ?? '10'; // 自定义分类 电影 电视剧 ..
$v_lang = $tag['v_lang'] ?? "all"; // 语言
$v_area = $tag['v_area'] ?? "all"; // 地区
$v_year = $tag['v_year'] ?? "all"; // 年份
2. 排行榜标签 增加 分类查询
{video:ranklist v_class="dianying" v_category="$val.v_category_en"
需要 配置tkd 模板的页面
首页:
h1 站点名字 - 站点text logo
丰富内容-》站点描述:
T
K
D
分类首页
h1 站点名字 - 站点text logo
丰富内容-》站点描述:
tkd
分类分页
视频详情页面
视频播放页面
视频搜索页面
视频排行榜首页
视频排行榜分页
目前在搭建一个视频站点:
页面 有
首页
分类首页:分类首页没有分页,一共有 电影,电视剧,综艺,动漫,短剧 。5大分类。
分类首页 展示内容:每一大分类下面的所有小分类 展示10个视频
这个就是上面发你的代码;
需要你帮忙设计 TKD 模板
和 h1标签内容 模板
因为我后面需要部署大量域名站点 都使用同一个模板
分类列表分页:

View File

@@ -0,0 +1,46 @@
{extend name="base" /}
{block name="get-data"}
{video:listexp count="6" sort_type="tuijian" d_key="key" d_val="Video" cache_life="3600" export_name="arrVideoTuijian"
/}
{video:listexp count="6" sort_type="piaofang" d_key="key" d_val="Video" cache_life="3600"
export_name="arrVideoPiaofang" /}
{site:grm page_code="h5_index" diff="0" num="100" g_key="arrGrm" /}
{/block}
{block name="title"}{site:replace code="VIDEO@INDEX@INDEX@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@INDEX@INDEX@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@INDEX@INDEX@DESCRIPTION"}{/block}
{block name="main"}
<section class="banner">
<h2>发现精彩影片</h2>
<p>极简 H5 影视站模板,自适应 PC & Mobile</p>
</section>
{// 模块按站群规则随机}
{volist name="$TpStyle.module_order" id="item" key="k"}
{if $item == 'banner'}
{include file="public/module-banner" /}
{/if}
{if $item == 'recommend'}
{include file="public/module-recommend" /}
{/if}
{if $item == 'newest'}
{include file="public/module-newest" /}
{/if}
{if $item == 'ranking'}
{include file="public/module-ranking" /}
{/if}
{/volist}
{/block}

View File

@@ -0,0 +1,56 @@
<div class="container">
<div class="a73f1c footer-nav hidden-xs text-center col-pd">
友情链接:
{ad:list code="YOUQING_LIANJIE_GUANG_GAO" order="desc" limit="2" id="ad"}
<a href="{$ad.gg_tiao_zhuan_di_zhi}" target="_blank">{$ad.gg_wen_zi}
</a>
{/ad:list}
</div>
<div class="a73f1c footer-nav hidden-xs text-center col-pd">
<a href="/sitemap.html" target="_blank">网站地图</a>
-
<a href="/rss/baidu.xml" target="_blank">百度Sitemap</a>
-
<a href="/rss/so.xml" target="_blank">360Sitemap</a>
-
<a href="/sitemap_index.xml" target="_blank">XML网站地图</a>
{ad:list code="YOUQING_LIANJIE_GUANG_GAO" order="desc" limit="2" id="ad"}
<a href="{$ad.gg_tiao_zhuan_di_zhi}" target="_blank">{$ad.gg_wen_zi}
</a>
{/ad:list}
</div>
<div class="row">
<div class="stui-foot clearfix">
<div class="col-pd text-center hidden-xs" id="ymd-cs">Copyright by<span class="fontArial"></span> 2009-2023
{$DomainModel->d_domain} Inc. All Rights Reserved. <a href="/" target="_blank">[{$DomainModel->d_name}]</a><br>联系邮箱:<a
href='mailto:{site:cfg code="YOU_XIANG" encode="false"/}'>{site:cfg code="YOU_XIANG" encode="false"/}</a></div>
</div>
</div>
</div>
<ul class="stui-extra clearfix">
<li><a class="backtop" href="javascript:scroll(0,0)" style="display: none;"><i
class="icon iconfont icon-less"></i></a></li>
<!-- <li><a href="/gbook.html"><i class="icon iconfont icon-comments"></i></a></li> -->
</ul>
<script>
(function () {
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>

View File

@@ -0,0 +1,10 @@
<section class="banner">
<h2>发现精彩影片</h2>
<p>极简 H5 影视站模板,自适应 PC & Mobile</p>
</section>
{if condition="isset($banner)"}
<section class="banner" style="background-image:url('{$banner.pic}'); background-size:cover;">
<h2>{$banner.title}</h2>
<p>{$banner.desc}</p>
</section>
{/if}

View File

@@ -0,0 +1,17 @@
<section class="section">
<h3 class="sec-title">最新更新</h3>
<div class="grid">
{volist name="arrVideoPiaofang" id="Video"}
<a class="card" href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<div class="card-img">
<img class="lazyload-img" src="/static/img/loading.webp"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}">
</div>
<div class="card-title">{$Video.v_name}</div>
</a>
{/volist}
</div>
</section>

View File

@@ -0,0 +1,17 @@
<section class="section">
<h3 class="sec-title">编辑推荐</h3>
<div class="grid">
{volist name="arrVideoPiaofang" id="Video"}
<a class="card" href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<div class="card-img">
<img class="lazyload-img" src="/static/img/loading.webp"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}">
</div>
<div class="card-title">{$Video.v_name}</div>
</a>
{/volist}
</div>
</section>

View File

@@ -0,0 +1,17 @@
<section class="section">
<h3 class="sec-title">热门热播</h3>
<div class="grid">
{volist name="arrVideoPiaofang" id="Video"}
<a class="card" href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<div class="card-img">
<img class="lazyload-img" src="/static/img/loading.webp"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}">
</div>
<div class="card-title">{$Video.v_name}</div>
</a>
{/volist}
</div>
</section>

View File

@@ -0,0 +1,18 @@
<li class="pai-hang-bang-li">
{if !empty($arrGrm[$key + [start]])}
{$arrGrm[$key+[start]]|raw}
{/if}
<a href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<span class='badge
{eq name="$key" value="1"}badge-first {/eq}
{eq name="$key" value="2"}badge-second {/eq}
{eq name="$key" value="3"}badge-third {/eq}'
'>
{$key}
</span>
{$Video.v_name}
</a>
</li>

View File

@@ -0,0 +1,23 @@
<li class="f88537 col-md-5 col-sm-3 col-xs-2 pb-xs-0 ">
{if !empty($arrGrm[$key + [start]])}
{$arrGrm[$key+[start]]|raw}
{/if}
<a class="b02e75 img-pic thumb pic60 lazyload"
href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看"
>
<img class="lazyload-img" src="/static/img/load.png" data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<span class="bb17e9 iconfont icon-play play hidden-xs"></span>
<span class="e31f51 score">{$Video.v_box_office ?? 0}亿</span>
<span class="c1e321 vname">{$Video.v_name}</span>
<span class="c68e08 vtitle text-right">{$Video.v_remarks}</span>
</a>
<div class="ac00f9 name text-overflow">
<a href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">{$Video.v_name}</a>
</div>
<div class="e2a75d sname text-muted text-overflow hidden"></div>
</li>

View File

@@ -0,0 +1,26 @@
<li class="col-md-[col-md] col-sm-4 col-xs-3">
<div class="stui-vodlist__box">
{if !empty($arrGrm[$key + [start]])}
{$arrGrm[$key+[start]]|raw}
{/if}
<a class="stui-vodlist__thumb "
href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看"
>
<img class="lazyload-img" src="/static/img/loading.webp" data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<span class="play hidden-xs"></span>
<span class="pic-text text-right">{$Video.v_remarks}</span>
</a>
<div class="stui-vodlist__detail">
<h3 class="title text-overflow">
<a href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
{$Video.v_name}
</a>
</h3>
</div>
</div>
</li>

View File

@@ -0,0 +1,12 @@
<li class="col-md-6 col-xs-4 padding-0">
{if !empty($arrGrm[$key + [start]])}
{$arrGrm[$key+[start]]|raw}
{/if}
<a class="top-line-dot text-overflow"
href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<i class="icon iconfont icon-more pull-right text-muted"></i>
{$Video.v_name}
</a>
</li>

View File

@@ -0,0 +1 @@
v_parent_category_en="$val.v_category_en"

View File

@@ -0,0 +1,55 @@
<div class="stui-pannel stui-pannel-bg clearfix row">
{video:ranklistexp count="18" v_parent_category_en="$val.v_category_en" sort_type="weekly" d_key="key" d_val="Video" cache_life="3600"
export_name="arrVideoRankList" /}
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<a class="more text-muted pull-right"
href='{site:vciurl parent_category="$val.v_category_en" /}'>
更多
<i class="icon iconfont icon-more"></i>
</a>
<h2 class="title">
<img src="/static/img/loading.webp" class="lazyload-img" data-src="/template/videonunu/icon/{$val.v_category_en}.png">
<a href='{site:vciurl parent_category="$val.v_category_en" /}'>
{$val.v_category}
</a>
</h2>
<ul class="nav nav-text pull-right hidden-sm hidden-xs">
{foreach $val.children as $intChildrenKey=>$arrChildrenCategory }
<li>
<a href='{site:vclurl parent_category="$val.v_category_en" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'
class="text-muted">
{$arrChildrenCategory.v_category}
</a>
<span class="split-line"></span>
</li>
{/foreach}
</ul>
</div>
</div>
<div class="stui-pannel_bd clearfix">
<div class="col-md-wide-2 col-xs-1 padding-0">
<div class="hidden-sm hidden-xs clearfix">
<ul class="col-xs-wide-100 stui-vodlist__rank col-pd clearfix">
{volist name="arrVideoRankList" id="Video" offset="0" length='8' key="key" }
{include file="public/video-list-phb" start="20"/}
{/volist}
</ul>
</div>
</div>
<div class="col-md-wide-8 col-xs-1 padding-0">
<ul class="stui-vodlist clearfix cs-list-r">
{video:list count="6" v_parent_category_en="$val.v_category_en" sort_type="news" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-shu" start="33" col-md="6" /}
{/video:list}
</ul>
</div>
</div>
<div class="stui-pannel_ft top-line visible-xs clearfix"><a class="text-muted"
href='{site:vciurl parent_category="$val.v_category_en" /}'>查看更多{$val.v_category}<i class="icon iconfont icon-more"></i></a></div>
</div>
</div>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>{$DomainModel->d_name}</title>
<description>{$DomainModel->d_description}</description>
<link>www.{$DomainModel->d_domain}</link>
<language>zh-cn</language>
<docs>{$DomainModel->d_name}</docs>
<generator>Rss Powered By www.{$DomainModel->d_domain}</generator>
{video:list count="30"
v_category_en="all"
v_lang_en="all"
v_area_en="all"
v_year="all"
sort_type="news"
d_key="d_key" d_val="Video" cache_life="86400"}
<item>
<title>
<?php echo html_entity_decode($Video['v_name'], ENT_QUOTES | ENT_XML1, 'UTF-8'); ?> {$Video.v_remarks}
</title>
<link>https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}</link>
<author>
{volist name='$Video.v_actor' id='vo' key='index'}
{$vo} ,
{/volist}
</author>
<pubDate>{$Video.v_publish_date}</pubDate>
<description><![CDATA[
<?php
echo '《' . html_entity_decode($Video['v_name'], ENT_QUOTES | ENT_XML1, 'UTF-8') . '》'
. html_entity_decode($Video['v_description'], ENT_QUOTES | ENT_XML1, 'UTF-8');
?>
]]></description>
</item>
{/video:list}
</channel>
</rss>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex>
{video:list count="1000"
v_category_en="all"
v_lang_en="all"
v_area_en="all"
v_year="all"
sort_type="news"
d_key="d_key" d_val="Video" cache_life="86400"}
<sitemap>
<loc>https://www.{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}</loc>
<lastmod>{$Video.v_publish_date}</lastmod>
</sitemap>
{/video:list}
</sitemapindex>

View File

@@ -0,0 +1,294 @@
对于一个小说站点(如你提到的包含首页、分类列表、排行榜、男生/女生频道、详情页面、章节页面、目录页面等),配置 Sitemap 时需要根据页面类型的重要性和 SEO 目标选择性地包含 URL并合理组织以优化搜索引擎抓取和索引。以下是针对小说站点特点的 Sitemap 配置建议,包括哪些页面应该包含、如何处理大量 URL以及相关的最佳实践。
---
### 一、小说站点页面类型分析
根据你提供的信息,小说站点的页面类型可以分为以下几类,每类页面的 SEO 价值和是否需要包含在 Sitemap 中有所不同:
| 页面类型 | 描述 | SEO 价值 | 是否包含在 Sitemap |
|------------------|----------------------------------------------------------------------|---------------------------------------|--------------------|
| **首页** | 网站主入口,通常包含推荐小说、导航等。 | 高(核心流量入口) | 是 |
| **分类列表** | 按题材、类型(如玄幻、言情)展示小说列表,可能有多页(如 `page=2`)。| 高(引导用户到具体小说) | 是(仅包含主页面) |
| **排行榜** | 热门小说排行,可能按日、周、月或类型(如男生/女生)排序。 | 中到高(吸引点击,动态更新) | 是(视情况精选) |
| **男生/女生频道**| 针对不同用户群的分类页面(如男生玄幻、女生穿越)。 | 高(细分用户需求) | 是 |
| **详情页面** | 小说详情页,包含简介、封面、目录链接等。 | 高(核心转化页面) | 是 |
| **章节页面** | 小说具体章节内容,通常数量庞大。 | 中到低内容分散SEO 价值有限) | 视情况(可选) |
| **目录页面** | 小说章节列表,汇总所有章节链接。 | 中便于用户导航SEO 价值中等) | 是 |
---
### 二、Sitemap 配置策略
#### 1. 哪些 URL 应该包含?
基于小说站点的特点,建议优先包含以下页面:
- **首页**
- 包含站点的唯一首页 URL`https://www.example.com/`)。
- 设置高优先级(如 `<priority>1.0</priority>`)和频繁更新(如 `<changefreq>daily</changefreq>`)。
- **分类列表(主页面)**
- 包含每个分类的主页面(如 `https://www.example.com/category/xuanhuan`)。
- 排除分页 URL`https://www.example.com/category/xuanhuan?page=2`),因为分页内容重复且 SEO 价值低。
- 示例:玄幻、言情、历史等分类页面。
- **男生/女生频道**
- 包含频道主页(如 `https://www.example.com/male``https://www.example.com/female`)。
- 如果频道下有子分类(如男生玄幻、女生穿越),也应包含。
- **排行榜(精选)**
- 包含主要排行榜页面(如 `https://www.example.com/rank/hot``https://www.example.com/rank/male`)。
- 如果排行榜页面频繁更新(如每日排行),可设置 `<changefreq>daily</changefreq>`
- 排除次要或动态参数页面(如 `?sort=week`),避免重复内容。
- **详情页面**
- 包含所有小说详情页面(如 `https://www.example.com/book/123`)。
- 这些页面是 SEO 的核心,吸引搜索流量(如用户搜索小说名)。
- 使用 `<lastmod>` 反映小说更新时间,提示搜索引擎重新抓取。
- **目录页面**
- 包含每个小说的目录页面(如 `https://www.example.com/book/123/chapters`)。
- 目录页面便于用户导航,且可能被搜索引擎索引为长尾关键词(如“小说名 章节列表”)。
- **章节页面(可选)**
- **不建议全部包含**小说章节页面数量庞大可能数十万到数百万SEO 价值较低(用户很少通过搜索直接进入具体章节)。
- **可选策略**
- 只包含最新章节(如最近 30 天的章节),吸引搜索引擎抓取更新内容。
- 只包含热门小说的前几章(如前 10 章),作为引流入口。
- 如果包含,设置较低优先级(如 `<priority>0.3</priority>`)。
#### 2. 哪些 URL 应该排除?
- **分页 URL**:如分类列表的 `?page=2`,重复内容无 SEO 价值。
- **动态参数 URL**:如 `?sort=latest``?utm_source=...`,应规范化到标准 URL。
- **不可索引页面**
- 已设置 `<meta name="robots" content="noindex">` 的页面。
-`robots.txt` 屏蔽的页面(如 `Disallow: /user/`)。
- **用户生成内容**
- 如评论页、用户个人中心、搜索结果页(`?q=keyword`)。
- **临时页面**
- 如促销活动页、测试页面。
- **错误页面**:如 404、500 页面。
---
### 三、处理大量 URL 的策略
小说站点通常有大量 URL尤其是章节页面可能超过 Sitemap 的限制50,000 条 URL 或 50MB。以下是应对方法
#### 1. 使用 Sitemap 索引文件
- 将 URL 分组到多个子 Sitemap 文件(如 `sitemap-books.xml``sitemap-chapters.xml`),每文件不超过 50,000 条 URL。
- 创建一个 Sitemap 索引文件(如 `sitemap_index.xml`)引用所有子 Sitemap。
- 示例:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.example.com/sitemap-main.xml</loc>
<lastmod>2025-04-21</lastmod>
</sitemap>
<sitemap>
<loc>https://www.example.com/sitemap-books.xml</loc>
<lastmod>2025-04-21</lastmod>
</sitemap>
<sitemap>
<loc>https://www.example.com/sitemap-chapters.xml</loc>
<lastmod>2025-04-21</lastmod>
</sitemap>
</sitemapindex>
```
#### 2. 分组策略
- **按页面类型分组**
- `sitemap-main.xml`:首页、分类列表、排行榜、男生/女生频道。
- `sitemap-books.xml`:小说详情页面和目录页面。
- `sitemap-chapters.xml`:章节页面(如果包含)。
- **按更新频率分组**
- 频繁更新的页面(如排行榜、最新章节)单独分组,设置 `<changefreq>daily</changefreq>`。
- **按小说分组**
- 为每部小说生成单独的 Sitemap如 `sitemap-book123.xml`),包含其详情页、目录页和部分章节页。
#### 3. 动态生成 Sitemap
- **脚本生成**
- 使用 Python、PHP 等脚本从数据库查询 URL生成 Sitemap 文件。
- 示例Python参考前文
```python
from lxml import etree
import datetime
# 模拟数据库查询
urls = [
{'loc': 'https://www.example.com/', 'lastmod': '2025-04-21', 'changefreq': 'daily', 'priority': '1.0'},
{'loc': 'https://www.example.com/book/123', 'lastmod': '2025-04-21', 'changefreq': 'weekly', 'priority': '0.8'},
{'loc': 'https://www.example.com/book/123/chapters', 'lastmod': '2025-04-21', 'changefreq': 'weekly', 'priority': '0.6'},
]
urlset = etree.Element("urlset", xmlns="http://www.sitemaps.org/schemas/sitemap/0.9")
for url in urls:
url_element = etree.SubElement(urlset, "url")
loc = etree.SubElement(url_element, "loc")
loc.text = url['loc']
lastmod = etree.SubElement(url_element, "lastmod")
lastmod.text = url['lastmod']
changefreq = etree.SubElement(url_element, "changefreq")
changefreq.text = url['changefreq']
priority = etree.SubElement(url_element, "priority")
priority.text = url['priority']
tree = etree.ElementTree(urlset)
tree.write("sitemap-main.xml", pretty_print=True, xml_declaration=True, encoding="UTF-8")
```
- **定时任务**
- 使用 cron 任务每天或每周生成 Sitemap上传到根目录。
- 示例Linux cron
```bash
0 2 * * * python3 /path/to/generate_sitemap.py
```
- **触发式更新**
- 在小说更新(如新章节发布)时,触发脚本更新相关 Sitemap。
#### 4. 伪静态 Sitemap
- 配置服务器将 `sitemap_index.xml` 等请求重定向到动态脚本,实时生成 XML 内容。
- 示例Apache + PHP参考前文
```apache
RewriteEngine On
RewriteRule ^sitemap_index\.xml$ sitemap_index.php [L]
```
---
### 四、robots.txt 配置
在 `robots.txt` 中声明 Sitemap 索引文件,使用绝对路径:
```txt
User-agent: *
Disallow: /user/
Disallow: /search/
Sitemap: https://www.example.com/sitemap_index.xml
```
- 确保不通过 `Disallow` 屏蔽 Sitemap 文件。
- 如果 Sitemap 托管在 CDN如 `https://cdn.example.com/sitemap_index.xml`),在 `robots.txt` 中使用 CDN 地址,并验证所有权。
---
### 五、SEO 优化建议
1. **优先级设置**
- 首页:`<priority>1.0</priority>`
- 分类/频道/详情页:`<priority>0.8</priority>`
- 目录页:`<priority>0.6</priority>`
- 章节页(若包含):`<priority>0.3</priority>`
2. **更新频率**
- 首页、排行榜:`<changefreq>daily</changefreq>`
- 分类/频道/详情/目录页:`<changefreq>weekly</changefreq>`
- 章节页:`<changefreq>monthly</changefreq>`(或 `never` 如果不频繁更新)
3. **规范化 URL**
- 确保只包含规范 URL如 `https://www.example.com/book/123` 而非 `http://example.com/book/123`)。
- 使用 `<link rel="canonical">` 或 Sitemap 统一规范版本。
4. **避免重复内容**
- 排除带参数的 URL如 `?sort=latest`)。
- 如果男生/女生频道与分类列表有重复内容,选择主要入口包含在 Sitemap 中。
5. **图片 Sitemap可选**
- 为小说封面图片创建图片 Sitemap优化图片搜索排名。
- 示例:
```xml
<url>
<loc>https://www.example.com/book/123</loc>
<image:image>
<image:loc>https://www.example.com/images/book123.jpg</image:loc>
<image:title>小说封面</image:title>
</image:image>
</url>
```
---
### 六、注意事项
1. **章节页面数量庞大**
- 如果每部小说有数百章节,章节页面可能占主导。建议只包含最新或热门章节,或完全排除章节页面,依靠目录页面引导爬虫。
2. **抓取预算**
- 小说站点 URL 数量多,需优化 Sitemap 避免浪费搜索引擎的抓取预算。
3. **动态更新**
- 小说站点内容更新频繁(如新章节发布),建议动态生成 Sitemap 或频繁更新。
4. **验证 Sitemap**
- 提交 `sitemap_index.xml` 到 Google Search Console、Bing Webmaster Tools检查是否被正确解析。
- 使用 GSC 的“索引覆盖率”报告,确认重要页面(如详情页)是否被索引。
---
### 七、示例 Sitemap 配置
#### 索引文件(`sitemap_index.xml`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.example.com/sitemap-main.xml</loc>
<lastmod>2025-04-21</lastmod>
</sitemap>
<sitemap>
<loc>https://www.example.com/sitemap-books.xml</loc>
<lastmod>2025-04-21</lastmod>
</sitemap>
</sitemapindex>
```
#### 主 Sitemap`sitemap-main.xml`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.example.com/</loc>
<lastmod>2025-04-21</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.example.com/category/xuanhuan</loc>
<lastmod>2025-04-21</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.example.com/male</loc>
<lastmod>2025-04-21</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.example.com/rank/hot</loc>
<lastmod>2025-04-21</lastmod>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
</urlset>
```
#### 小说 Sitemap`sitemap-books.xml`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.example.com/book/123</loc>
<lastmod>2025-04-21</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://www.example.com/book/123/chapters</loc>
<lastmod>2025-04-21</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
</urlset>
```
---
### 八、结论
- **不需包含所有 URL**:小说站点应优先包含首页、分类列表、男生/女生频道、排行榜、详情页面和目录页面。章节页面可根据需要部分包含或完全排除。
- **精选策略**:重点包含 SEO 价值高的页面(如详情页),排除分页、动态参数、低价值页面。
- **大型站点处理**:使用 Sitemap 索引文件和子 Sitemap按页面类型分组动态生成以应对大量 URL。
- **SEO 优化**:设置合理的 `<priority>` 和 `<changefreq>`,定期更新 Sitemap验证索引效果。
如果你需要针对小说站点的具体脚本(生成 Sitemap 或伪静态配置、CMS 插件推荐,或其他细节(如图片 Sitemap、robots.txt 优化),请告诉我!

View File

@@ -0,0 +1,38 @@
# 允许的搜索引擎
User-agent: Baiduspider
Allow: /
User-agent: 360Spider
Allow: /
User-agent: Sogou web spider
Allow: /
User-agent: Sogou inst spider
Allow: /
User-agent: YisouSpider
Allow: /
User-agent: Quarkbot
Allow: /
User-agent: Googlebot
Allow: /
# 禁止其他爬虫AI 爬虫常见 UA
User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: *
Disallow: /
Sitemap: https://{$DomainModel->d_domain}/sitemap_index.xml

View File

@@ -0,0 +1,20 @@
{novel:pagerexp page="$Request.route.intPage" limit="40000"
sort_type="news"
d_key="key"
d_val="Novel"
cache_life="3600" func="generateCategoryPager" export_name="resData" /}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- // 根据分页查询,按顺序 每页 50000个小说 -->
{foreach $resData.data as $key=>$Novel}
<url>
<loc>https://www.{$DomainModel->d_domain}{site:nclurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" order="zheng" page="1"/}</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
{/foreach}
<!-- 最多 50,000 个 <url> 条目 -->
</urlset>

View File

@@ -0,0 +1,20 @@
{novel:pagerexp page="$Request.route.intPage" limit="40000"
sort_type="news"
d_key="key"
d_val="Novel"
cache_life="3600" func="generateCategoryPager" export_name="resData" /}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- // 根据分页查询,按顺序 每页 50000个小说 -->
{foreach $resData.data as $key=>$Novel}
<url>
<loc>https://www.{$DomainModel->d_domain}{site:nurl n_id="$Novel->n_id" n_py="$Novel->n_name_pinyin"/}</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
{/foreach}
</urlset>

View File

@@ -0,0 +1,18 @@
{novel:pagerexp page="$Request.route.intPage" limit="40000"
sort_type="news"
d_key="key"
d_val="Novel"
cache_life="3600" func="generateCategoryPager" export_name="resData" /}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{foreach $resData.data as $key=>$Novel}
<url>
<loc>https://www.{$DomainModel->d_domain}{site:lcpurl n_id="$Novel.n_id" n_py="$Novel.n_name_pinyin" /}</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
{/foreach}
</urlset>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.{$DomainModel->d_domain}/</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<url>
<loc>https://www.{$DomainModel->d_domain}{$strRankUrlTemp}</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
<!-- 分类 -->
{novel:category d_key="strCategoryPinyin" d_val="strCategoryName"}
<!-- 排序 -->
{novel:sort d_key="sort_key" d_val="strSortName"}
<!-- 状态 -->
{novel:status d_key="status_key" d_val="strStatusName"}
<url>
<loc>https://www.{$DomainModel->d_domain}{site:nflurl category="$strCategoryPinyin" order="$sort_key" status="$status_key" /}</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
{/novel:status}
{/novel:sort}
{/novel:category}
<!-- 注意 所有链接不要分页,有分页的取第一页即可 -->
</urlset>

View File

@@ -0,0 +1,39 @@
{novel:pagerexp page="1" limit="40000"
sort_type="news"
d_key="d_key"
d_val="Novel"
cache_life="3600" func="generateCategoryPager" export_name="resData" /}
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.{$DomainModel->d_domain}/sitemap-main.xml</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
</sitemap>
<!--小说总数量/50000 得出 sitemap-books 一共有多少个 -->
{for start="0" end="$resData.p_data.pages"}
<sitemap>
<loc>https://www.{$DomainModel->d_domain}/sitemap-books-{$i+1}.xml</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
</sitemap>
{/for}
<!-- 小说总数量/50000 得出 sitemap-books-catalog一共有多少个,每个小说只取一个目录链接,分页不需要加入去 -->
{for start="0" end="$resData.p_data.pages"}
<sitemap>
<loc>https://www.{$DomainModel->d_domain}/sitemap-books-catalog-{$i+1}.xml</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
</sitemap>
{/for}
<!-- 小说章节取最新章节 -->
{for start="0" end="$resData.p_data.pages"}
<sitemap>
<loc>https://www.{$DomainModel->d_domain}/sitemap-chapters-{$i+1}.xml</loc>
<lastmod>{:date('Y-m-d')}</lastmod>
</sitemap>
{/for}
</sitemapindex>

View File

@@ -0,0 +1,104 @@
{extend name="base" /}
{block name="get-data"}
{site:grm page_code="h5_video_search" diff="$Request.url" num="30" g_key="arrGrm" /}
{/block}
{block name="title"}我的观看记录{/block}
{block name="keywords"}我的观看记录{/block}
{block name="description"}我的观看记录{/block}
{block name="head"}
{/block}
{block name="head-css"}
{/block}
{block name="head-js"}
{/block}
{block name="main"}
<div class="a0395c container" style="margin-top:10px">
<div class="a0f98b row">
<div class="fd0958 col-md-wide-75 col-sm-wide-1 pt-xs-0 pr-xs-5 mt-xs-0 main-left">
<div class="f96105 pannel-box mt-xs-0 clearfix">
<div class="cd1b0f box-title">
<h2 class="a1100b title"> 观看记录 </h2>
</div>
<div class="ca586e clearfix" id="content">
<ul class="fb3c38 img-list clearfix news-list hide-hits" id="historyContainer">
</ul>
</div>
</div>
</div>
<div class="fb44a5 col-md-wide-25 pt-xs-0 main-right hidden-sm hidden-xs" style="position:sticky;top:-10px;">
<div class="dfb7d2 pannel-box mt-xs-0 clearfix">
<div class="e3a1c3 box-title "><span class="dea086 title-lb"></span>
<h2>热门影视</h2>
</div>
<ul class="d6b451 txt-list txt-list-hot p-xs-0">
{video:ranklist count="20"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{include file="public/video-list-phb" start="80"/}
{/video:ranklist}
</ul>
</div>
</div>
</div>
</div>
{/block}
{block name="customize"}
<script>
const strVideoUrlTemp = `{site:replace code="VIDEO_INFO_URL"}`;
const strVideoPlayUrlTemp = `{site:replace code="VIDEO_PLAY_URL"}`;
const strSearchUrlTemp = `{site:replace code="VIDEO_SEARCH_LIST_URL"}`;
// 调用展示书架功能
document.addEventListener("DOMContentLoaded", function () {
const secondTemplate = `
<li class="col-md-6 col-sm-4 col-xs-3">
<div class="stui-vodlist__box">
<a class="stui-vodlist__thumb lazyload-bg"
href='{{videoUrl}}'
title="{{videoName}}"
style="background-image: url(&quot;{{videoPic}}&quot;);">
<span class="play hidden-xs"></span>
<span class="pic-text text-right">{{videoRemarks}}</span>
</a>
<div class="stui-vodlist__detail">
<h3 class="title text-overflow">
<a href='{{videoUrl}}' >
{{videoName}}
</a>
</h3>
<p class="text text-overflow text-muted hidden-xs">
{{videoActor}}
</p>
</div>
</div>
</li>
`;
// 调用展示书架功能
displayHistory(secondTemplate);
})
</script>
{/block}

View File

@@ -0,0 +1,135 @@
{extend name="base" /}
{block name="get-data"}
{video:pagerexp page="$Request.route.intPage" limit="30" button_num="10" cache_life="3600"
key="$Request.get.keyword"
v_parent_category_en="$Request.route.strParentCategory"
v_category_en="$Request.route.strCategory"
v_lang_en="$Request.route.strLang"
v_area_en="$Request.route.strArea"
v_year="$Request.route.strYear"
sort_type="$Request.route.strOrder"
d_key="d_key" d_val="Video" p_val="page_data" func="generateVideoPager" export_name="resData" /}
{site:grm page_code="h5_category_list_type" diff="$Request.route.intPage" num="100" g_key="arrGrm" /}
{site:helper func="initVideoCategoryTKD" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETCATEGORY@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETCATEGORY@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETCATEGORY@DESCRIPTION"}{/block}
{block name="head"}
{// 社交媒体标签}
<meta property="og:title" content='{site:replace code="VIDEO@GETCATEGORY@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETCATEGORY@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
{/case}
{case 'dian-shi-ju' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'zong-yi' }
<meta property="og:type" content="video.tv_show" />
{/case}
{case 'dong-man' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'duan-ju-da-quan' }
<meta property="og:type" content="video.episode" />
{/case}
{default /}
<meta property="og:type" content="video.movie" />
{/switch}
{// 结构化数据}
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
"url": "https://{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{volist name="resData.data" id="Video" key="key"}
{if $key < 5 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/volist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "分类首页",
"item": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}"
},
{
"@type": "ListItem",
"position": 3,
"name": "分类列表",
"item": "https://{$DomainModel->d_domain}{site:vclurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" area="$Request.route.strArea" lang="$Request.route.strLang" year="$Request.route.strYear" order="$Request.route.strOrder" page="$Request.route.intPage"}"
}
]
},
]
</script>
{/block}
{block name="main"}
<section class="section">
<h2 class="page-title">{$typename}</h2>
<div class="grid">
{volist name="list" id="vo"}
<a class="card" href="/detail/{$vo.id}.html">
<div class="card-img">
<img src="{$vo.pic}">
</div>
<div class="card-title">{$vo.title}</div>
</a>
{/volist}
</div>
<div class="pager">{$pages|raw}</div>
</section>
{/block}
{block name="customize"}
{/block}

View File

@@ -0,0 +1,257 @@
{extend name="base" /}
{block name="get-data"}
{site:grm page_code="h5_category_type" diff="$Request.route.strParentCategory" num="100" g_key="arrGrm" /}
{site:helper func="initVideoCategoryTypeTKD" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETCATEGORYINDEX@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETCATEGORYINDEX@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}{/block}
{block name="head"}
<!-- 社交媒体标签 -->
<meta property="og:title" content='{site:replace code="VIDEO@GETCATEGORYINDEX@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
{switch $Request.route.strParentCategory }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
{/case}
{case 'dian-shi-ju' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'zong-yi' }
<meta property="og:type" content="video.tv_show" />
{/case}
{case 'dong-man' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'duan-ju-da-quan' }
<meta property="og:type" content="video.episode" />
{/case}
{default /}
<meta property="og:type" content="video.movie" />
{/switch}
<!-- 结构化数据 -->
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新{site:getval code="strVideoParentCategoryName" /}推荐",
"url": "https://{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@GETCATEGORYINDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{video:ranklist count="5"
v_category_en="$Request.route.strParentCategory"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{if $key < 5 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/video:ranklist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "分类首页",
"item": "https://{$DomainModel->d_domain}{site:vciurl parent_category="$Request.route.strParentCategory" /}"
}
]
},
]
</script>
{/block}
{block name="head-css"}{/block}
{block name="head-js"}{/block}
{block name="main"}
<div class="container">
<h1 class="view-title">
{site:replace code="VIDEO@GETCATEGORYINDEX@H1"}
</h1>
<h4 class="view-description">{site:replace code="VIDEO@GETCATEGORYINDEX@TEXT"}</h4>
<nav class="breadcrumb" aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li>当前位置:</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="/" itemprop="item">
<span itemprop="name">首页</span>
</a>
<meta itemprop="position" content="1" />
</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href='{site:vciurl parent_category="$Request.route.strParentCategory" /}' itemprop="item">
<span itemprop="name">{site:getval code="strVideoParentCategoryName" /}</span>
</a>
<meta itemprop="position" content="2" />
</li>
</ol>
</nav>
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<h3 class="title"><img src="/template/videonunu/icon/icon_24.png">最近更新</h3>
</div>
</div>
<div class="stui-pannel_bd clearfix">
<ul class="stui-vodlist clearfix cs-list-r">
{video:list count="12"
v_parent_category_en="$Request.route.strParentCategory"
sort_type="update" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-shu" start="10" col-md="6"/}
{/video:list}
</ul>
</div>
</div>
</div>
</div>
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
{if $val.v_category_en == $Request.route.strParentCategory}
{foreach $val.children as $intChildrenKey=>$arrChildrenCategory }
<div class="stui-pannel stui-pannel-bg clearfix row">
<div class="stui-pannel-box clearfix">
<div class="stui-pannel_hd">
<div class="stui-pannel__head clearfix">
<a class="more text-muted pull-right"
href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'>
更多
<i class="icon iconfont icon-more"></i>
</a>
<h2 class="title">
<a href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'>
{$arrChildrenCategory.v_category}
</a>
</h2>
</div>
</div>
<div class="stui-pannel_bd clearfix">
<div class="col-md-wide-4 col-xs-1 padding-0">
<div class="carousel carousel_default carousel_default2 col-pd is-draggable" style="height: 250px;"
tabindex="0">
{video:ranklist count="1"
v_category_en="$arrChildrenCategory.v_category_en"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
<div class="wide is-selected" >
<a href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
class="stui-vodlist__thumb active lazyload-bg"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看"
style="background-image: url(/template/videolaoniu/images/pic.png) no-repeat; background-position:50% 50%; background-size: cover; padding-top: 65%;">
<span class="play hidden-xs"></span>
<span class="pic-tag pic-tag-h">推荐</span>
<span class="pic-text pic-text-silde text-center">{$Video.v_name}</span>
</a>
</div>
{/video:ranklist}
</div>
<div class="hidden-sm hidden-xs clearfix">
<ul class="col-xs-wide-45 stui-vodlist col-pd clearfix">
{video:ranklist count="1"
v_category_en="$arrChildrenCategory.v_category_en"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
<li>
<a class="stui-vodlist__thumb lazyload-bg"
href='{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}'
title="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
style="background-image: url(&quot;/template/videolaoniu/images/pic.png&quot;);">
<img class="lazyload-img" src="/template/videolaoniu/images/pic.png" style="display: none;"
data-src="{site:cfg code='PUBLIC_COVER_DOMAIN' encode='false'/}{$Video.v_pic}"
alt="{$Video.v_name ?? ''} - {$Video.v_parent_category ?? ''}{$Video.v_category ?? ''}免费高清电影在线观看">
<span class="play active hidden-xs"></span>
<span class="pic-tag pic-tag-h">Top1</span>
</a>
</li>
{/video:ranklist}
</ul>
<ul class="col-xs-wide-55 stui-vodlist__rank col-pd clearfix">
{video:ranklist count="12"
v_category_en="$arrChildrenCategory.v_category_en"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{include file="public/video-list-phb" start="80"/}
{/video:ranklist}
</ul>
</div>
</div>
<div class="col-md-wide-6 col-xs-1 padding-0">
<ul class="stui-vodlist clearfix cs-list-r">
{video:list count="8" v_category_en="$arrChildrenCategory.v_category_en" sort_type="news" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-shu" start="27" col-md="4"/}
{/video:list}
</ul>
<ul class="stui-vodlist__text col-pd hidden-xs clearfix">
{video:list count="12" v_category_en="$arrChildrenCategory.v_category_en" sort_type="news" d_key="key"
d_val="Video" cache_life="3600"}
{include file="public/video-list-text" start="10" /}
{/video:list}
</ul>
</div>
</div>
<div class="stui-pannel_ft top-line visible-xs clearfix"><a class="text-muted"
href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'>
查看更多{$val.v_category}<i class="icon iconfont icon-more"></i></a></div>
</div>
</div>
{/foreach}
{/if}
{/video:categorytype}
</div>
{/block}
{block name="customize"}
{/block}

View File

@@ -0,0 +1,146 @@
{extend name="base" /}
{block name="get-data"}
{video:pagerexp page="$Request.get.page" limit="12"
key="$Request.get.keyword"
d_key="d_key"
d_val="Video"
p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" export_name="resData" /}
{site:grm page_code="h5_video_search" diff="0" num="30" g_key="arrGrm" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETSEARCHVIDEO@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETSEARCHVIDEO@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}{/block}
{block name="head"}
<meta property="og:title" content='{site:replace code="VIDEO@GETSEARCHVIDEO@TITLE"}'>
<meta property="og:description" content='{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}'>
<meta property="og:url" content='https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}'>
<meta property="og:type" content="website">
<meta property="og:site_name" content='{$DomainModel->d_name}'>
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content='{site:replace code="VIDEO@GETSEARCHVIDEO@TITLE"}'>
<meta name="twitter:description" content='{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}'>
<meta name="twitter:image:alt" content="动作电影 搜索结果第1页">
{// 结构化数据}
<script type="application/ld+json">
[
{
"@type": "WebSite",
"name": "{$DomainModel->d_name}",
"url": "https://{$DomainModel->d_domain}",
"alternateName": "{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@INDEX@INDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}',
"query-input": "required name=search_term_string"
}
},
{
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - {$DomainModel->d_logo_text}",
"url": "https://{$DomainModel->d_domain}",
"alternateName": "{$DomainModel->d_domain}",
"description": '{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}',
"mainEntity": {
"@type": "ItemList",
"itemListElement": [
{volist name="resData.data" id="Video" key="key"}
{if $key < 5 }
{
"@type": "ListItem",
"position": {$key},
"item": {
"@type": "Movies",
"name": "{$Video.v_name}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
"description": "{$Video.v_description}",
"actor": [
{foreach $Video.v_actor as $strActorKey=>$strActor }
{if $strActorKey < 5 }
{ "@type": "Person", "name": "{$strActor}" },
{/if}
{/foreach}
],
"numberOfEpisodes": {$Video.v_play_url|count},
"image": "{$Video.v_pic}",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$Video.v_score}",
}
}
},
{/if}
{/volist}
]
}
}
]
</script>
{/block}
{block name="head-css"}
{/block}
{block name="head-js"}
{/block}
{block name="main"}
<div class="container">
<div class=" layout-box top-weizhi hidden-xs">
<label>当前位置:</label>
<a href="/">{$DomainModel->d_name}</a><i>&gt;</i><a href="/sitemap.html">网站地图</a>
</div>
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
<div class=" layout-box">
<div class="box-title">
<!-- <span class="title-lb"></span> -->
<h2>
<a class=" font16" href='{site:vciurl parent_category="$val.v_category_en" /}'>{$val.v_category}</a>
</h2>
<a class=" box-more pull-right" href='{site:vciurl parent_category="$val.v_category_en" /}' title="{$val.v_category}">
<span class=" iconfont icon-weizhi"></span>
更多
<i>&gt;
</i>
</a>
</div>
<div class=" sitemap">
<ul class=" clearfix">
<li class=" title"><span class=" text-color">类型</span></li>
{foreach $val.children as $intChildrenKey=>$arrChildrenCategory }
<li>
<a target="_blank"
href='{site:vclurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" area="all" lang="all" year="all" order="all" page="1"}'
title="{$arrChildrenCategory.v_category}">
{$arrChildrenCategory.v_category}
</a>
</li>
{/foreach}
</ul>
</div>
</div>
{/video:categorytype}
</div>
{/block}
{block name="customize"}
{/block}

View File

@@ -0,0 +1,169 @@
{extend name="base" /}
{block name="get-data"}
{site:grm page_code="h5_rank_type" diff="0" num="100" g_key="arrGrm" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETVIDEORANKINDEX@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETVIDEORANKINDEX@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETVIDEORANKINDEX@DESCRIPTION"}{/block}
{block name="head"}
{// 社交媒体标签}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEORANKINDEX@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEORANKINDEX@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:type" content="video.movie" />
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新排行榜推荐",
"url": "https://{$DomainModel->d_domain}",
"headline": '{site:replace code="VIDEO@GETVIDEORANKINDEX@TITLE"}',
"description": '{site:replace code="VIDEO@GETVIDEORANKINDEX@DESCRIPTION"}',
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{video:ranklist count="5"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{if $key < 10 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/video:ranklist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "排行榜首页",
"item": "https://{$DomainModel->d_domain}{$strRankUrlTemp}"
}
]
},
]
</script>
{/block}
{block name="head-css"}
{/block}
{block name="head-js"}
{/block}
{block name='body-class'}rank-index{/block}
{block name="main"}
<div class="container">
<nav class="breadcrumb" aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="/" itemprop="item">
<span itemprop="name">首页</span>
</a>
<meta itemprop="position" content="1" />
</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href='{$strRankUrlTemp}' itemprop="item">
<span itemprop="name">排行榜</span>
</a>
<meta itemprop="position" content="2" />
</li>
</ol>
</nav>
<h1 class="view-title">
{site:replace code="VIDEO@GETVIDEORANKINDEX@H1"}
</h1>
<h4 class="view-description">{site:replace code="VIDEO@GETVIDEORANKINDEX@TEXT"}</h4>
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li>
<a class="text-muted">分类:</a>
</li>
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
<li
class="{if $Request.route.strParentCategory == $val.v_category_en}active{/if} ">
<a
href='{site:vrlurl parent_category="$val.v_category_en" category="all" sort_type="daily" page="1"/}'>
{$val.v_category}
</a>
</li>
{/video:categorytype}
</ul>
</div>
</div>
</div>
</div>
<div class="ee356a layout-box">
<div class="e3c2c3 row">
{video:ranksort d_key="key" d_val="val"}
<div class="fb44a5 col-md-wide-25 pt-xs-0 main-right " style="position:sticky;top:-10px;padding: 10px;background: #fff;">
<div class="dfb7d2 pannel-box mt-xs-0 clearfix">
<div class="e3a1c3 box-title "><span class="dea086 title-lb"></span>
<h2>{$val}排行榜</h2>
</div>
<ul class="d6b451 txt-list txt-list-hot p-xs-0">
{video:ranklist count="20"
sort_type="weekly"
d_key="key" d_val="Video" cache_life="3600"}
{include file="public/video-list-phb" start="80"/}
{/video:ranklist}
</ul>
</div>
</div>
{/video:ranksort}
</div>
</div>
</div>
{/block}
{block name="customize"}
{/block}

View File

@@ -0,0 +1,203 @@
{extend name="base" /}
{block name="get-data"}
{video:ranklistexp page="1" limit="30"
v_parent_category_en="$Request.route.strParentCategory"
v_category_en="$Request.route.strCategory"
sort_type="$Request.route.strSortType"
d_key="key"
d_val="Video"
p_val="page_data" button_num="10" cache_life="3600" export_name="arrVideoRankList" /}
{site:grm page_code="h5_rank_list_type" diff="$Request.route.intPage" num="100" g_key="arrGrm" /}
{site:helper func="initVideoRankListTKD" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETVIDEORANKLIST@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETVIDEORANKLIST@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETVIDEORANKLIST@DESCRIPTION"}{/block}
{block name="head"}
{// 社交媒体标签}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEORANKLIST@TITLE"}' />
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEORANKLIST@DESCRIPTION"}' />
<meta property="og:url" content="https://{$DomainModel->d_domain}" />
<meta property="og:type" content="video.movie" />
<!-- 结构化数据 -->
<script type="application/ld+json">
[
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - 最新排行榜推荐",
"url": "https://{$DomainModel->d_domain}",
"headline": '{site:replace code="VIDEO@GETVIDEORANKLIST@TITLE"}',
"description": '{site:replace code="VIDEO@GETVIDEORANKLIST@DESCRIPTION"}',
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}",
"query-input": "required name=search_term_string"
}
"hasPart": [
{volist name="arrVideoRankList" id="Video" key="key"}
{if $key < 10 }
{
"@type": "VideoObject",
"name": "{$Video.v_name}",
"description": "{$Video.v_description}",
"thumbnailUrl": '{$Video.v_pic}',
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
},
{/if}
{/volist}
]
},
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://{$DomainModel->d_domain}"
},
{
"@type": "ListItem",
"position": 2,
"name": "排行榜",
"item": "https://{$DomainModel->d_domain}{$strRankUrlTemp}"
},
{
"@type": "ListItem",
"position": 3,
"name": "{site:getval code="strVideoParentCategoryName" /}{site:getval code="strVideoCategoryName" /}{site:getval code="strOrderName" /}排行榜",
"item": "https://{$DomainModel->d_domain}{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$Request.route.strSortType" page="1"/}"
}
]
},
]
</script>
{/block}
{block name="head-css"}
{/block}
{block name="head-js"}
{/block}
{block name="main"}
<div class="container">
<nav class="breadcrumb" aria-label="breadcrumb">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="/" itemprop="item">
<span itemprop="name">首页</span>
</a>
<meta itemprop="position" content="1" />
</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href='{$strRankUrlTemp}' itemprop="item">
<span itemprop="name">排行榜</span>
</a>
<meta itemprop="position" content="2" />
</li>
<li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href='{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$Request.route.strSortType" page="1"/}'
itemprop="item">
<span itemprop="name">{site:getval code="strVideoParentCategoryName" /}{site:getval
code="strVideoCategoryName" /}{site:getval code="strOrderName" /}排行榜</span>
</a>
<meta itemprop="position" content="2" />
</li>
</ol>
</nav>
<h1 class="view-title">
{site:replace code="VIDEO@GETVIDEORANKLIST@H1"}
</h1>
<h4 class="view-description">{site:replace code="VIDEO@GETVIDEORANKLIST@TEXT"}</h4>
<div class="row">
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li>
<a class="text-muted">按分类</a>
</li>
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
<li class="{if $Request.route.strParentCategory == $val.v_category_en}active{/if} ">
<a
href='{site:vrlurl parent_category="$val.v_category_en" category="all" sort_type="daily" page="1"/}'>
{$val.v_category}
</a>
</li>
{/video:categorytype}
</ul>
<ul class="stui-screen__list type-slide bottom-line-dot clearfix">
<li>
<a class="text-muted">按类型</a>
</li>
{video:categorytype category_type="ONE" d_key="key" d_val="val"}
{if $val.v_category_en == $Request.route.strParentCategory}
{foreach $val.children as $intChildrenKey=>$arrChildrenCategory }
<li class="{if $Request.route.strCategory == $arrChildrenCategory.v_category_en}active{/if}">
<a
href='{site:vrlurl parent_category="$Request.route.strParentCategory" category="$arrChildrenCategory.v_category_en" sort_type="$Request.route.strSortType" page="1"/}'>{$arrChildrenCategory.v_category}</a>
</li>
{/foreach}
{/if}
{/video:categorytype}
</ul>
</div>
</div>
</div>
<div class="stui-pannel stui-pannel-bg clearfix">
<div class="stui-pannel-box">
<div class="stui-pannel_hd">
<div class="stui-pannel__head active bottom-line clearfix">
<ul class="nav nav-head">
{video:ranksort d_key="key" d_val="val"}
<li class="{if $Request.route.strSortType == $key}active{/if}">
<a href='{site:vrlurl parent_category="$Request.route.strParentCategory" category="$Request.route.strCategory" sort_type="$key" page="1"/}'
>
{$val}{site:getval code="strVideoParentCategoryName" /}
</a>
</li>
{/video:ranksort}
</ul>
</div>
</div>
<div class="stui-pannel_bd">
<ul class="stui-vodlist clearfix cs-list-r">
{foreach $arrVideoRankList as $key=>$Video}
{include file="public/video-list-shu" start="0" col-md="6"/}
{/foreach}
</ul>
</div>
</div>
</div>
</div>
</div>
{/block}
{block name="customize"}
{/block}

View File

@@ -0,0 +1,122 @@
{extend name="base" /}
{block name="get-data"}
{video:pagerexp page="$Request.get.page" limit="12"
key="$Request.get.keyword"
d_key="d_key"
d_val="Video"
p_val="page_data" button_num="5" cache_life="3600" func="generateSearchPager" export_name="resData" /}
{site:grm page_code="h5_video_search" diff="0" num="30" g_key="arrGrm" /}
{/block}
{block name="title"}{site:replace code="VIDEO@GETSEARCHVIDEO@TITLE"}{/block}
{block name="keywords"}{site:replace code="VIDEO@GETSEARCHVIDEO@KEYWORDS"}{/block}
{block name="description"}{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}{/block}
{block name="head"}
<meta property="og:title" content='{site:replace code="VIDEO@GETSEARCHVIDEO@TITLE"}'>
<meta property="og:description" content='{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}'>
<meta property="og:url" content='https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}'>
<meta property="og:type" content="website">
<meta property="og:site_name" content='{$DomainModel->d_name}'>
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content='{site:replace code="VIDEO@GETSEARCHVIDEO@TITLE"}'>
<meta name="twitter:description" content='{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}'>
<meta name="twitter:image:alt" content="动作电影 搜索结果第1页">
{// 结构化数据}
<script type="application/ld+json">
[
{
"@type": "WebSite",
"name": "{$DomainModel->d_name}",
"url": "https://{$DomainModel->d_domain}",
"alternateName": "{$DomainModel->d_domain}",
"description": "{site:replace code="VIDEO@INDEX@INDEX@DESCRIPTION"}",
"potentialAction": {
"@type": "SearchAction",
"target": 'https://{$DomainModel->d_domain}{site:vsurl key="search_term_string" p="1"/}',
"query-input": "required name=search_term_string"
}
},
{
"@type": "CollectionPage",
"name": "{$DomainModel->d_name} - {$DomainModel->d_logo_text}",
"url": "https://{$DomainModel->d_domain}",
"alternateName": "{$DomainModel->d_domain}",
"description": '{site:replace code="VIDEO@GETSEARCHVIDEO@DESCRIPTION"}',
"mainEntity": {
"@type": "ItemList",
"itemListElement": [
{volist name="resData.data" id="Video" key="key"}
{if $key < 5 }
{
"@type": "ListItem",
"position": {$key},
"item": {
"@type": "Movies",
"name": "{$Video.v_name}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$Video.v_id" v_py="$Video.v_name_en"/}',
"description": "{$Video.v_description}",
"actor": [
{foreach $Video.v_actor as $strActorKey=>$strActor }
{if $strActorKey < 5 }
{ "@type": "Person", "name": "{$strActor}" },
{/if}
{/foreach}
],
"numberOfEpisodes": {$Video.v_play_url|count},
"image": "{$Video.v_pic}",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$Video.v_score}",
}
}
},
{/if}
{/volist}
]
}
}
]
</script>
{/block}
{block name="head-css"}
{/block}
{block name="head-js"}
{/block}
{block name="main"}
{include file="header" /}
<section class="section">
<h2 class="page-title">搜索结果:{$wd}</h2>
<div class="grid">
{volist name="list" id="vo"}
<a class="card" href="/detail/{$vo.id}.html">
<div class="card-img">
<img src="{$vo.pic}">
</div>
<div class="card-title">{$vo.title}</div>
</a>
{/volist}
</div>
</section>
{include file="footer" /}
{/block}
{block name="customize"}
{/block}

View File

@@ -0,0 +1,219 @@
{extend name="base" /}
{block name="get-data"}
{if $Request.route.intVId && $Request.route.intVForgeId}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" v_fid="$Request.route.intVForgeId" /}
{elseif $Request.route.intVId}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" /}
{else}
{video:info v_id="$DomainModel->info_id" n_key="arrVideo" /}
{/if}
{site:grm page_code="h5_video_info" diff="$arrVideo.v_id" num="120" g_key="arrGrm" /}
{/block}
{block name="title"}
{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}
{site:replace code="VIDEO@INDEX@INDEX@TITLE"}
{else}
{site:replace code="VIDEO@GETVIDEOINFO@TITLE" diff="$Request.route.intVId" /}
{/if}
{/block}
{block name="keywords"}
{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}
{site:replace code="VIDEO@INDEX@INDEX@KEYWORDS"}
{else}
{site:replace code="VIDEO@GETVIDEOINFO@KEYWORDS" diff="$Request.route.intVId"}
{/if}
{/block}
{block name="description"}
{if $DomainModel->info_id == $Request.route.intVId || empty($Request.route.intVId)}
{site:replace code="VIDEO@INDEX@INDEX@DESCRIPTION"}
{else}
{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION" diff="$Request.route.intVId"}
{/if}
{/block}
{block name="head"}
{// Open Graph 协议用于Facebook、LinkedIn等}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
{switch $arrVideo.v_parent_category_en }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
{/case}
{case 'dian-shi-ju' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'zong-yi' }
<meta property="og:type" content="video.tv_show" />
{/case}
{case 'dong-man' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'duan-ju-da-quan' }
<meta property="og:type" content="video.episode" />
{/case}
{default /}
<meta property="og:type" content="video.movie" />
{/switch}
<meta property="og:url"
content='https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}'>
<meta property="og:image" content="{$arrVideo.v_pic}">
<meta property="og:site_name" content="{$DomainModel->d_name}">
<meta property="og:video:type" content="video/m3u8">
{// Twitter Card用于Twitter/X}
<meta name="twitter:card" content="player">
<meta name="twitter:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta name="twitter:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
<meta name="twitter:image" content="{$arrVideo.v_pic}">
{if $Request.route.intVId && $Request.route.intVForgeId}
<link rel="canonical"
href='https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}'>
{/if}
{// 结构化数据}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "{$arrVideo.v_name}",
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
"genre": ["动作", "科幻"],
"keywords": '{site:replace code="VIDEO@GETVIDEOINFO@KEYWORDS"}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
"{$strVideoLang}",
{/volist}
],
"contentLocation": [
{volist name='$arrVideo.v_area' id='strVideoArea' key='index'}
{
"@type": "Place",
"name": "{$strVideoArea}"
},
{/volist}
],
"director": [
{volist name='$arrVideo.v_director' id='strVideoDirector' key='index'}
{
"@type": "Person",
"name": "{$strVideoDirector}"
}
{/volist}
],
"actor": [
{volist name='$arrVideo.v_actor' id='strVideoActor' key='index'}
{
"@type": "Person",
"name": "{$strVideoActor}"
},
{/volist}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$arrVideo.v_score}",
},
"publisher": {
"@type": "Organization",
"name": "{$DomainModel->d_name}",
}
}
</script>
{/block}
{block name='body-class'}video-info-page{/block}
{block name="strPageCode"}
<?php $strPageCode = 'info'; ?>
{/block}
{block name="main"}
<section class="detail">
<div class="detail-head">
<div class="detail-cover">
<img src="{$info.pic}">
</div>
<div class="detail-info">
<h1>{$info.title}</h1>
<div class="detail-sub">{$info.year} · {$info.area} · {$info.type}</div>
<!-- 伪原创简介 -->
<p class="detail-intro">
{php}$desc = \app\common\helper\TextSpin::spin($info['intro'], $style['theme_id']);{/php}
{$desc}
</p>
<a class="btn" href="/play/{$info.id}-1-1.html">开始播放</a>
</div>
</div>
<h3 class="sec-title">剧集列表</h3>
<div class="episode-list">
{volist name="episodes" id="vo"}
<a href="/play/{$info.id}-{$vo.n}-1.html">第{$vo.n}集</a>
{/volist}
</div>
</section>
<script>
const strVideoId = `{$arrVideo.v_id}`;
const arrVideo = {
'v_id': `{$arrVideo['v_id']}`,
'v_name_en': `{$arrVideo['v_name_en']}`,
'v_pic': `{$arrVideo['v_pic']}`,
'v_name': `{$arrVideo['v_name']}`,
'v_description': `{$arrVideo['v_description']}`,
'v_publish_date': `{$arrVideo['v_publish_date']}`,
'v_remarks': `{$arrVideo['v_remarks']}`,
'v_category': `{$arrVideo['v_category']}`,
'v_year': `{$arrVideo['v_year']}`,
};
var strPlayType = 'default'
var boolIsPlayPage = false
document.addEventListener('DOMContentLoaded', function () {
const trigger = document.querySelector('.check-desc-btn');
if (!trigger) return; // 页面没有按钮就不继续
trigger.addEventListener('click', function () {
const parent = trigger.closest('.lvshicms-vodlist__box') || trigger.parentElement;
const description = parent.querySelector('p.v-description-centent');
if (description) {
description.classList.toggle('txt-hidden');
const icon = trigger.querySelector('.iconfont');
if (icon) {
icon.classList.toggle('icon-down');
icon.classList.toggle('icon-up');
}
trigger.setAttribute('aria-expanded', !description.classList.contains('txt-hidden'));
}
});
});
</script>
{/block}
{block name="customize"} {/block}

View File

@@ -0,0 +1,191 @@
{extend name="base" /}
{block name="get-data"}
{video:info v_id="$Request.route.intVId" v_key="arrVideo" /}
{site:grm page_code="h5_video_info" diff="$arrVideo.v_id" num="120" g_key="arrGrm" /}
{/block}
{block name="title"}
{site:replace code="VIDEO@GETVIDEOPLAY@TITLE" diff="$Request.route.intVId" /}
{/block}
{block name="keywords"}
{site:replace code="VIDEO@GETVIDEOPLAY@KEYWORDS" diff="$Request.route.intVId"}
{/block}
{block name="description"}
{site:replace code="VIDEO@GETVIDEOPLAY@DESCRIPTION" diff="$Request.route.intVId"}
{/block}
{block name="head"}
{// Open Graph 协议用于Facebook、LinkedIn等}
<meta property="og:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta property="og:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
{switch $arrVideo.v_parent_category_en }
{case 'dian-ying' }
<meta property="og:type" content="video.movie" />
{/case}
{case 'dian-shi-ju' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'zong-yi' }
<meta property="og:type" content="video.tv_show" />
{/case}
{case 'dong-man' }
<meta property="og:type" content="video.episode" />
{/case}
{case 'duan-ju-da-quan' }
<meta property="og:type" content="video.episode" />
{/case}
{default /}
<meta property="og:type" content="video.movie" />
{/switch}
<meta property="og:url"
content='https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}'>
<meta property="og:image" content="{$arrVideo.v_pic}">
<meta property="og:site_name" content="{$DomainModel->d_name}">
<meta property="og:video:type" content="video/m3u8">
{// Twitter Card用于Twitter/X}
<meta name="twitter:card" content="player">
<meta name="twitter:title" content='{site:replace code="VIDEO@GETVIDEOINFO@TITLE"}'>
<meta name="twitter:description" content='{site:replace code="VIDEO@GETVIDEOINFO@DESCRIPTION"}'>
<meta name="twitter:image" content="{$arrVideo.v_pic}">
{if $Request.route.intVId && $Request.route.intVForgeId}
<link rel="canonical"
href='https://{$DomainModel->d_domain}{site:vpurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en" play_type="default" play_index="1" /}'>
{/if}
{// 结构化数据}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "{$arrVideo.v_name}",
"description": "{$arrVideo.v_description}",
"thumbnailUrl": "{$arrVideo.v_pic}",
"uploadDate": "{:date('Y-m-d')}",
"url": 'https://{$DomainModel->d_domain}{site:vurl v_id="$arrVideo.v_id" v_py="$arrVideo.v_name_en"/}',
"inLanguage": [
{volist name='$arrVideo.v_lang' id='strVideoLang' key='index'}
"{$strVideoLang}",
{/volist}
],
"contentLocation": [
{volist name='$arrVideo.v_area' id='strVideoArea' key='index'}
{
"@type": "Place",
"name": "{$strVideoArea}"
},
{/volist}
],
"director": [
{volist name='$arrVideo.v_director' id='strVideoDirector' key='index'}
{
"@type": "Person",
"name": "{$strVideoDirector}"
}
{/volist}
],
"actor": [
{volist name='$arrVideo.v_actor' id='strVideoActor' key='index'}
{
"@type": "Person",
"name": "{$strVideoActor}"
},
{/volist}
],
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{$arrVideo.v_score}",
},
"publisher": {
"@type": "Organization",
"name": "{$DomainModel->d_name}",
}
}
</script>
{/block}
{block name="head-css"}
<link rel="stylesheet" href="/public/video/DPlayer.min.css">
<style type="text/css">
</style>
{/block}
{block name='body-class'}video-play-page{/block}
{block name="strPageCode"}
<?php $strPageCode = 'play'; ?>
{/block}
{block name="main"}
<section class="play">
<div class="player-box">
{$player_code|raw}
</div>
<h3 class="sec-title">选集</h3>
<div class="episode-list">
{volist name="episodes" id="vo"}
<a href="/play/{$info.id}-{$vo.n}-1.html" class="{eq name='now' value='$vo.n'}active{/eq}">
第{$vo.n}集
</a>
{/volist}
</div>
</section>
<script>
const strMaxPlayHeight = '600px'
const strVideoId = `{$arrVideo.v_id}`;
const arrVideo = {
'v_id': `{$arrVideo['v_id']}`,
'v_name_en': `{$arrVideo['v_name_en']}`,
'v_pic': `{$arrVideo['v_pic']}`,
'v_name': `{$arrVideo['v_name']}`,
'v_description': `{$arrVideo['v_description']}`,
'v_publish_date': `{$arrVideo['v_publish_date']}`,
'v_remarks': `{$arrVideo['v_remarks']}`,
'v_category': `{$arrVideo['v_category']}`,
};
var intPlayUrlIndex = '{$Request.route.intPlayIndex}'
var strPlayType = '{$Request.route.strPlayType}'
var intJumpTimeFirst = 1;
var intJumpTimeTwoStart = 1;
var intJumpTimeTwoEnd = 1;
var arrPlayUrl = {$arrVideo.v_play_url | json_encode | raw};
var strPlayUrl = ""
var boolIsPlayPage = true
</script>
{/block}
{block name="customize"}
{/block}
{block name="footer-js"}
<script type="text/javascript" src="/public/video/hls.min.js" defer></script>
<script type="text/javascript" src="/public/video/DPlayer.min.js" defer></script>
{/block}

View File

@@ -0,0 +1,292 @@
以下是对提供的视频站点首页(`video2.com`SEO优化的分析和建议重点针对中国大陆的浏览搜索排名如百度结合同行影视站点的常见优化策略确保排名提升至首页。分析涵盖现有代码的优点、不足并提供具体改进建议。
---
### 现有SEO优点
1. **TKDTitle, Keywords, Description设置**
- 标题包含核心关键词如“大地资源网在线观看免费官网”“2024大地影院免费高清电视剧大全”长度适中约60字符符合百度要求。
- 关键词和描述包含热门搜索词(如“免费视频”“高清电视剧”),与影视站点用户搜索习惯高度相关。
- 使用`{{{video_type}}}`占位符,动态插入内容(如“动作片”),提升页面相关性。
2. **结构化数据**
- 包含`WebSite``VideoObject``CollectionPage`的JSON-LD结构化数据增强百度富媒体展示如视频缩略图、评分
- `ItemList`列出具体影片,包含名称、描述、演员、图片等,利于搜索引擎理解内容。
3. **站内链接**
- 导航链接(如`/vodtype/dian-ying`)和内容链接(如`/voddetail/wu-ren-guo-jing-140361`结构清晰URL规范化利于爬虫抓取。
- 提供“更多”链接(如`/vodtype-dian-ying/all-all-all-all/all-page1`),引导用户深入浏览,增加页面权重。
4. **Sitemap和Robots**
- 提供多种地图链接XML、RSS、百度Sitemap等便于搜索引擎快速收录。
- `robots.txt`支持,明确爬虫规则。
5. **响应式设计**
- 使用`meta viewport`和响应式网格(如`col-lg-4 col-md-4`适配PC和移动端提升用户体验和移动端排名。
6. **社交媒体标签**
- `og:title``og:description`等Open Graph标签支持社交媒体分享增加外部流量来源。
---
### SEO不足及优化建议
以下是首页SEO的不足之处及具体改进建议针对中国大陆影视站点特点如百度算法偏好优化。
#### 1. **标题Title优化**
**问题**
- 标题过长约70字符含“https://video1.com-大地”),可能被截断,影响展示效果。
- 包含重复关键词(如“大地”出现多次),降低关键词密度效率。
- 包含无关域名(`https://video1.com`),与实际域名(`video2.com`)不一致,易引起搜索引擎混淆。
**建议**
- 精简标题控制在60字符以内突出核心关键词避免重复。
- 移除无关域名,使用实际域名(`video2.com`)增强品牌一致性。
- 示例优化标题:
```html
<title>大地影视-2024免费高清电影电视剧在线观看-video2.com</title>
```
#### 2. **关键词Keywords优化**
**问题**
- 关键词列表较长,部分词(如“短视频”“预告片”)与主站内容(电影、电视剧)相关性较低。
- 关键词堆砌(如“大地影院大全在线观看”“大地”),可能被百度视为过度优化。
- 未包含长尾关键词如“免费电影在线观看”“2024最新电视剧”错失精准流量。
**建议**
- 精选5-8个高相关性关键词包含品牌词如“大地影视”和长尾词。
- 避免重复和无关词,突出用户搜索意图。
- 示例优化关键词:
```html
<meta name="keywords" content="大地影视,免费电影,2024最新电视剧,高清综艺,动漫在线观看,短剧大全,video2.com">
```
#### 3. **描述Description优化**
**问题**
- 描述过长约180字符可能被截断影响点击率。
- 包含无效URL`www.https://video1.com`),格式错误,降低可信度。
- 关键词堆砌(如“大地影视”重复出现),未突出独特卖点(如“无广告”)。
- `{{{video_type}}}`占位符在首页可能未正确替换,导致描述不完整。
**建议**
- 控制描述在120-160字符简洁突出免费、高清、无广告等卖点。
- 修正URL为`video2.com`,确保一致性。
- 确保`{{{video_type}}}`在首页有默认值(如“电影”)或移除。
- 示例优化描述:
```html
<meta name="description" content="大地影视(video2.com)提供2024最新免费高清电影、电视剧、综艺、动漫和短剧无广告在线观看每日更新畅享极致影视体验">
```
#### 4. **URL规范化**
**问题**
- 页面URL`https://video2.com`)与描述中的`https://video1.com`不一致,可能导致权重分散。
- 部分链接(如`/news/52050.html`)指向非视频内容,降低页面主题相关性。
- 热门搜索链接(如`/news/52050.html`)重复指向同一页面,浪费爬虫资源。
**建议**
- 统一使用`https://video2.com`作为规范URL添加`rel="canonical"`标签:
```html
<link rel="canonical" href="https://video2.com">
```
- 将热门搜索链接改为视频详情页(如`/voddetail/gu-mu-li-ying-guo-yu-140357`),提高相关性。
- 检查站内链接确保无404或重定向错误。
#### 5. **结构化数据改进**
**问题**
- `VideoObject`的`thumbnailUrl`指向详情页URL而非图片URL格式错误。
- `uploadDate`格式为`25-05-08`不符ISO 8601标准如`2025-05-08`)。
- 部分影片描述为空如“铁鹰战士4”影响富媒体展示效果。
- `aggregateRating`的`ratingValue`多为`0.0`,缺乏真实评分数据。
**建议**
- 修正`thumbnailUrl`为实际图片URL如`/img/video/2025/01/27/22/wu-ren-guo-jing.webp`)。
- 规范化`uploadDate`为`YYYY-MM-DD`格式。
- 为每部影片补充简短描述50-100字提高信息完整性。
- 若无真实评分,移除`aggregateRating`或用默认值(如`5.0`)。
- 示例优化片段:
```json
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "大地影视热门推荐预告片",
"description": "观看大地影视最新电影和电视剧的精彩预告片!",
"thumbnailUrl": "https://video2.com/img/video/2025/01/27/22/wu-ren-guo-jing.webp",
"uploadDate": "2025-05-08",
"publisher": {
"@type": "Organization",
"name": "大地影视"
}
}
```
#### 6. **内容优化**
**问题**
- 首页内容偏少,部分模块(如“最新电视剧”“最新综艺”)的`<ul>`为空,降低页面信息量。
- 影片简介过长如“无人过境”超300字可能影响加载速度和用户体验。
- 缺少关键词密度优化,核心词(如“免费观看”“高清影视”)出现频率低。
**建议**
- 填充空模块至少展示3-5条内容增加页面信息量。
- 简介控制在100-150字超出部分移至详情页首页仅展示摘要。
- 在`<h2>`、`<p>`中适度插入关键词(如“免费高清电影”),但避免堆砌。
- 示例优化影片项:
```html
<div class="dbbcf6 lvshicms-vodlist__detail">
<h2 class="c9c8c4 title text-overflow">
<a href="/voddetail/wu-ren-guo-jing-140361" title="无人过境免费观看">无人过境</a>
</h2>
<p class="ed925a text text-overflow text-muted hidden-xs">
简介: 西北小镇混混老姜欲雇凶杀人,高启义为筹医药费假冒杀手,引发连环追杀。免费高清在线观看,精彩公路冒险!
</p>
</div>
```
#### 7. **导航优化**
**问题**
- 导航下拉菜单(如“电影”“电视剧”)的子项链接(如`/vodtype-all/dong-zuo-pian-all-all-all/all-page1`)层级过深,增加爬虫抓取难度。
- 热门搜索模块的链接指向`/news`而非视频详情页,降低转化率。
- 导航未使用面包屑导航影响用户体验和SEO权重传递。
**建议**
- 简化URL层级如将`/vodtype-all/dong-zuo-pian-all-all-all/all-page1`改为`/movie/action/page1`。
- 将热门搜索链接指向视频详情页(如`/voddetail/gu-mu-li-ying-guo-yu-140357`)。
- 添加面包屑导航:
```html
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="/">首页</a></li>
<li class="breadcrumb-item"><a href="/vodtype/dian-ying">电影</a></li>
<li class="breadcrumb-item active" aria-current="page">动作片</li>
</ol>
</nav>
```
#### 8. **图片优化**
**问题**
- 图片未使用`alt`属性(如`<img>`或背景图),错失关键词优化机会。
- 图片URL如`/img/video/2025/01/27/22/wu-ren-guo-jing.webp`)未压缩,增加加载时间。
- 懒加载属性(`data-src`)未全面覆盖,可能影响首屏加载。
**建议**
- 为所有图片添加`alt`属性,包含关键词:
```html
<a class="d0ff14 lvshicms-vodlist__thumb lazyload" ...>
<img src="/img/video/2025/01/27/22/wu-ren-guo-jing.webp" alt="无人过境免费高清电影海报" style="display:none;">
</a>
```
- 使用工具如TinyPNG压缩图片减少文件大小。
- 确保所有图片使用`data-src`和`data-original`,并验证懒加载脚本有效。
#### 9. **加载速度优化**
**问题**
- 加载多个CSS文件`plugins.css`、`global.css`等增加HTTP请求。
- JS文件如`jquery-3.7.1.min.js`未使用defer或async阻塞渲染。
- 百度推送脚本重复加载(`<head>`和`<body>`各一次)。
**建议**
- 合并CSS文件为单一文件减少请求
```html
<link rel="stylesheet" href="/template/videodingzhu/css/combined.css" type="text/css">
```
- 为非关键JS添加`defer`或`async`
```html
<script src="/public/jquery/jquery-3.7.1.min.js" defer></script>
```
- 删除重复的百度推送脚本,仅保留`<head>`中的:
```html
<script src="http://push.zhanzhang.baidu.com/push.js"></script>
```
#### 10. **移动端体验**
**问题**
- 移动端搜索表单的占位符(“输入主演名或影片名”)未突出免费观看优势。
- 部分模块(如“好莱坞榜单”)在移动端隐藏(`hidden-xs`),减少信息量。
- 未启用AMP加速移动页面或PWA渐进式Web应用
**建议**
- 修改搜索占位符,突出卖点:
```html
<input class="d1f534 mobile-search-input" name="keyword" placeholder="搜索免费高清电影或主演">
```
- 在移动端显示简版榜单如前3项增加内容
```html
<div class="a51b92 col-md-wide-25 hidden-md hidden-lg">
<!-- 简版榜单 -->
</div>
```
- 考虑引入AMP版本如`/amp/index.html`或PWA提升移动端加载速度和用户留存。
#### 11. **外部链接与友链**
**问题**
- 友情链接模块(`<ul class="a085fb lvshicms-link__text">`)为空,错失权重传递机会。
- 未利用站外链接(如知乎、微博)引导流量。
**建议**
- 添加5-10个高质量友情链接优先选择影视相关站点
```html
<ul class="a085fb lvshicms-link__text clearfix">
<li><a href="https://example.com" target="_blank">影视资源站</a></li>
</ul>
```
- 在社交媒体(如微博)创建官方账号,发布视频预告,添加`video2.com`链接。
#### 12. **其他细节**
**问题**
- `<html lang="zh">`未指定具体语言(如`zh-CN`可能影响区域化SEO。
- 部分影片评分(`ratingValue: 0.0`)不可信,降低用户信任。
- 未设置HSTSHTTP严格传输安全影响安全性评分。
**建议**
- 修改语言为`zh-CN`
```html
<html lang="zh-CN">
```
- 为热门影片添加真实评分(如基于豆瓣或用户评分)。
- 启用HSTS
```html
<meta http-equiv="Strict-Transport-Security" content="max-age=31536000; includeSubDomains">
```
---
### 综合优化后的首页TKD示例
```html
<title>大地影视-2024免费高清电影电视剧在线观看-video2.com</title>
<meta name="keywords" content="大地影视,免费电影,2024最新电视剧,高清综艺,动漫在线观看,短剧大全,video2.com">
<meta name="description" content="大地影视(video2.com)提供2024最新免费高清电影、电视剧、综艺、动漫和短剧无广告在线观看每日更新畅享极致影视体验">
<link rel="canonical" href="https://video2.com">
```
---
### 实施优先级
1. **高优先级**(立即修复,影响排名):
- 修正标题、关键词、描述(精简、统一域名)。
- 规范化URL添加`rel="canonical"`。
- 填充空模块,优化简介长度。
2. **中优先级**1-2周内优化
- 改进结构化数据(修正`thumbnailUrl`、`uploadDate`)。
- 压缩图片合并CSS/JS。
- 添加面包屑导航和友情链接。
3. **低优先级**(长期优化):
- 引入AMP/PWA。
- 建立社交媒体账号。
- 启用HSTS。
---
### 同行对比分析
通过分析中国大陆影视站点如爱奇艺、腾讯视频、免费影视站常见SEO策略包括
- **关键词聚焦**突出“免费”“高清”“在线观看”长尾词覆盖广泛如“2024最新动作片免费观看”
- **内容丰富**:首页展示多类型内容(电影、电视剧、综艺等),每日更新。
- **技术优化**CDN加速、图片压缩、懒加载全面应用。
- **外部引流**:通过微博、抖音、贴吧发布短视频或预告,引导流量。
**建议**参考爱奇艺的动态TKD和内容密度结合免费站点的关键词策略如“无广告”在首页增加短视频预告模块吸引用户停留。
---
### 总结
当前首页SEO基础良好但存在标题冗长、URL不统一、内容空缺等问题。通过精简TKD、规范化URL、填充内容、优化图片和加载速度可显著提升百度排名。建议优先实施高优先级优化并结合社交媒体引流1-2个月内有望进入首页。
若需具体代码调整(如某个模块的实现)或进一步分析(如竞争对手关键词),请提供更多细节!

View File

@@ -11,6 +11,7 @@ use app\model\CategoryModel;
use app\model\ChapterModel;
use app\model\NovelClicksModel;
use app\model\NovelModel;
use app\common\helper\SiteStyle;
use think\facade\Request;
use think\facade\Config;
use think\exception\HttpException;
@@ -161,7 +162,9 @@ class SiteContext
// View::assign("strVideoHistoryUrlTemp", $strVideoHistoryUrlTemp);
$TpStyle = SiteStyle::getConfig();
View::assign('TpStyle', $TpStyle);
View::assign('Request', $this->Request);
View::assign('DomainModel', $this->DomainModel);
View::assign('TemplatesModel', $this->TemplatesModel);

View File

@@ -85,7 +85,58 @@ $arrSiteData = [
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
[
'd_id' => 1007,
'd_domain' => 'video7.com',
'd_name' => 'gpt1',
't_id' => '1007',
'd_keywords' => 'video7',
'd_description' => '欢迎来到蜂鸟影视 - 蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧',
'd_index_title' => '蜂鸟影视资源网在线观看免费官网-2024蜂鸟影视影院免费高清电视剧大全-https://video6.com-蜂鸟影视',
'd_index_keywords' => '蜂鸟影视资源网在线观看免费官网,2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视影院大全在线观看,短视频,搞笑视频,视频分享,免费视频,在线视频,预告片-蜂鸟影视',
'd_index_description' => '蜂鸟影视资源网在线观看免费官网(https://video7.com)2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧、日剧等蜂鸟影视中文在线观看提供2024最新电视剧免费观看-蜂鸟影视',
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
[
'd_id' => 1008,
'd_domain' => 'video8.com',
'd_name' => 'gpt1',
't_id' => '1007',
'd_keywords' => 'video8',
'd_description' => '欢迎来到蜂鸟影视 - 蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧',
'd_index_title' => '蜂鸟影视资源网在线观看免费官网-2024蜂鸟影视影院免费高清电视剧大全-https://video6.com-蜂鸟影视',
'd_index_keywords' => '蜂鸟影视资源网在线观看免费官网,2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视影院大全在线观看,短视频,搞笑视频,视频分享,免费视频,在线视频,预告片-蜂鸟影视',
'd_index_description' => '蜂鸟影视资源网在线观看免费官网(https://video7.com)2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧、日剧等蜂鸟影视中文在线观看提供2024最新电视剧免费观看-蜂鸟影视',
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
[
'd_id' => 1009,
'd_domain' => 'video9.com',
'd_name' => 'gpt1',
't_id' => '1007',
'd_keywords' => 'video9',
'd_description' => '欢迎来到蜂鸟影视 - 蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧',
'd_index_title' => '蜂鸟影视资源网在线观看免费官网-2024蜂鸟影视影院免费高清电视剧大全-https://video6.com-蜂鸟影视',
'd_index_keywords' => '蜂鸟影视资源网在线观看免费官网,2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视影院大全在线观看,短视频,搞笑视频,视频分享,免费视频,在线视频,预告片-蜂鸟影视',
'd_index_description' => '蜂鸟影视资源网在线观看免费官网(https://video7.com)2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧、日剧等蜂鸟影视中文在线观看提供2024最新电视剧免费观看-蜂鸟影视',
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
[
'd_id' => 1010,
'd_domain' => 'video10.com',
'd_name' => 'gpt1',
't_id' => '1007',
'd_keywords' => 'video10',
'd_description' => '欢迎来到蜂鸟影视 - 蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧',
'd_index_title' => '蜂鸟影视资源网在线观看免费官网-2024蜂鸟影视影院免费高清电视剧大全-https://video6.com-蜂鸟影视',
'd_index_keywords' => '蜂鸟影视资源网在线观看免费官网,2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视影院大全在线观看,短视频,搞笑视频,视频分享,免费视频,在线视频,预告片-蜂鸟影视',
'd_index_description' => '蜂鸟影视资源网在线观看免费官网(https://video7.com)2024蜂鸟影视影院免费高清电视剧大全,蜂鸟影视电影资源第二页,最新高清电影电视剧、伦理片、综艺、美剧、韩剧、英剧、日剧等蜂鸟影视中文在线观看提供2024最新电视剧免费观看-蜂鸟影视',
'd_text_logo' => '热门影视平台',
't_cfg' => [],
],
];

View File

@@ -46,6 +46,13 @@ $arrVideoTemplateData = [
't_path' => '/app/home/view/videoFengNiao/',
't_cfg_template' => [],
],
[
't_id' => 1007,
't_default' => 0,
't_code' => 'videoGpt1',
't_path' => '/app/home/view/videoGpt1/',
't_cfg_template' => [],
],
];

View File

@@ -0,0 +1,160 @@
/* 全局 */
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif;
background: #fff;
color: #111;
}
a { color: inherit; text-decoration: none; }
/* 容器形态H5 100% + PC 居中 */
.main, .section {
width: 94%;
max-width: 1200px;
margin: auto;
}
/* 顶部导航 */
.nav {
background: #fff;
border-bottom: 1px solid #eee;
}
.nav-inner {
display: flex;
align-items: center;
justify-content: space-between;
height: 54px;
padding: 0 12px;
}
.logo {
font-size: 20px;
font-weight: bold;
color: var(--primary-color);
}
.search input {
height: 32px;
width: 120px;
border-radius: 6px;
border: 1px solid #ddd;
padding: 0 10px;
}
/* 菜单 */
.menu-pc { display: none; }
.menu-h5 { display: none; flex-direction: column; padding: 10px; }
.menu-h5 a { padding: 10px 0; border-bottom: 1px solid #eee; }
.menu-h5.show { display: flex; }
.menu-btn { font-size: 22px; cursor: pointer; }
/* PC 时显示 pc 菜单 */
@media(min-width: 768px){
.menu-pc { display: flex; }
.menu-pc a { margin-left: 20px; }
.menu-btn { display: none; }
.menu-h5 { display: none !important; }
}
/* banner */
.banner {
background: linear-gradient(135deg,var(--primary-color),var(--secondary-color));
padding: 60px 20px;
color: #fff;
border-radius: 12px;
margin: 20px auto;
text-align: center;
}
/* 网格布局 */
.grid {
display: grid;
grid-template-columns: repeat(3,1fr);
gap: 16px;
}
@media(min-width: 600px){
.grid { grid-template-columns: repeat(5,1fr); }
}
@media(min-width: 992px){
.grid { grid-template-columns: repeat(6,1fr); }
}
.card-img img {
width: 100%;
border-radius: 10px;
}
.card-title { margin-top: 8px; font-size: 14px; }
/* 详情页 */
.detail-head {
display: flex;
flex-direction: column;
gap: 20px;
margin: 20px auto;
}
@media(min-width: 768px){
.detail-head { flex-direction: row; }
}
.detail-cover img {
width: 180px;
border-radius: 12px;
}
.detail-info { flex: 1; }
.btn {
display: inline-block;
padding: 10px 16px;
background: var(--primary-color);
color: #fff;
border-radius: 6px;
}
/* 选集 */
.episode-list {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.episode-list a {
padding: 6px 12px;
border: 1px solid #ddd;
border-radius: 6px;
}
.episode-list a.active {
background: var(--primary-color);
color: #fff;
border-color: var(--primary-color);
}
/* 播放器 */
.player-box iframe,
.player-box video {
width: 100%;
height: 220px;
}
@media(min-width: 768px){
.player-box iframe,
.player-box video {
height: 500px;
}
}
/* footer */
.footer {
margin-top: 40px;
padding: 20px 0;
text-align: center;
font-size: 13px;
color: #777;
border-top: 1px solid #eee;
}