添加新模板
This commit is contained in:
100
code/app/common/helper/SiteStyle.php
Normal file
100
code/app/common/helper/SiteStyle.php
Normal 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)
|
||||
);
|
||||
}
|
||||
}
|
||||
24
code/app/common/helper/TextSpin.php
Normal file
24
code/app/common/helper/TextSpin.php
Normal 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;
|
||||
}
|
||||
}
|
||||
100
code/app/home/view/videoGpt1/base.html
Normal file
100
code/app/home/view/videoGpt1/base.html
Normal 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>
|
||||
|
||||
58
code/app/home/view/videoGpt1/index.md
Normal file
58
code/app/home/view/videoGpt1/index.md
Normal 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标签内容 模板
|
||||
因为我后面需要部署大量域名站点 都使用同一个模板
|
||||
|
||||
分类列表分页:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
46
code/app/home/view/videoGpt1/index/index.html
Normal file
46
code/app/home/view/videoGpt1/index/index.html
Normal 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}
|
||||
|
||||
56
code/app/home/view/videoGpt1/public/footer.html
Normal file
56
code/app/home/view/videoGpt1/public/footer.html
Normal 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>
|
||||
10
code/app/home/view/videoGpt1/public/module-banner.html
Normal file
10
code/app/home/view/videoGpt1/public/module-banner.html
Normal 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}
|
||||
17
code/app/home/view/videoGpt1/public/module-newest.html
Normal file
17
code/app/home/view/videoGpt1/public/module-newest.html
Normal 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>
|
||||
17
code/app/home/view/videoGpt1/public/module-recommend.html
Normal file
17
code/app/home/view/videoGpt1/public/module-recommend.html
Normal 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>
|
||||
17
code/app/home/view/videoGpt1/public/module-trending.html
Normal file
17
code/app/home/view/videoGpt1/public/module-trending.html
Normal 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>
|
||||
18
code/app/home/view/videoGpt1/public/video-list-phb.html
Normal file
18
code/app/home/view/videoGpt1/public/video-list-phb.html
Normal 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>
|
||||
23
code/app/home/view/videoGpt1/public/video-list-shu-pf.html
Normal file
23
code/app/home/view/videoGpt1/public/video-list-shu-pf.html
Normal 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>
|
||||
26
code/app/home/view/videoGpt1/public/video-list-shu.html
Normal file
26
code/app/home/view/videoGpt1/public/video-list-shu.html
Normal 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>
|
||||
12
code/app/home/view/videoGpt1/public/video-list-text.html
Normal file
12
code/app/home/view/videoGpt1/public/video-list-text.html
Normal 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>
|
||||
@@ -0,0 +1 @@
|
||||
v_parent_category_en="$val.v_category_en"
|
||||
55
code/app/home/view/videoGpt1/public/video-panel.html
Normal file
55
code/app/home/view/videoGpt1/public/video-panel.html
Normal 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>
|
||||
40
code/app/home/view/videoGpt1/rss/baidu.xml
Normal file
40
code/app/home/view/videoGpt1/rss/baidu.xml
Normal 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>
|
||||
18
code/app/home/view/videoGpt1/rss/so.xml
Normal file
18
code/app/home/view/videoGpt1/rss/so.xml
Normal 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>
|
||||
294
code/app/home/view/videoGpt1/sitemap/index.md
Normal file
294
code/app/home/view/videoGpt1/sitemap/index.md
Normal 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 优化),请告诉我!
|
||||
38
code/app/home/view/videoGpt1/sitemap/robots.txt
Normal file
38
code/app/home/view/videoGpt1/sitemap/robots.txt
Normal 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
|
||||
@@ -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>
|
||||
20
code/app/home/view/videoGpt1/sitemap/sitemap-books.xml
Normal file
20
code/app/home/view/videoGpt1/sitemap/sitemap-books.xml
Normal 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>
|
||||
18
code/app/home/view/videoGpt1/sitemap/sitemap-chapters.xml
Normal file
18
code/app/home/view/videoGpt1/sitemap/sitemap-chapters.xml
Normal 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>
|
||||
35
code/app/home/view/videoGpt1/sitemap/sitemap-main.xml
Normal file
35
code/app/home/view/videoGpt1/sitemap/sitemap-main.xml
Normal 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>
|
||||
39
code/app/home/view/videoGpt1/sitemap/sitemap_index.xml
Normal file
39
code/app/home/view/videoGpt1/sitemap/sitemap_index.xml
Normal 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>
|
||||
104
code/app/home/view/videoGpt1/user/getHistory.html
Normal file
104
code/app/home/view/videoGpt1/user/getHistory.html
Normal 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("{{videoPic}}");">
|
||||
<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}
|
||||
135
code/app/home/view/videoGpt1/video/getCategory.html
Normal file
135
code/app/home/view/videoGpt1/video/getCategory.html
Normal 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}
|
||||
257
code/app/home/view/videoGpt1/video/getCategoryType.html
Normal file
257
code/app/home/view/videoGpt1/video/getCategoryType.html
Normal 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("/template/videolaoniu/images/pic.png");">
|
||||
<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}
|
||||
146
code/app/home/view/videoGpt1/video/getMap.html
Normal file
146
code/app/home/view/videoGpt1/video/getMap.html
Normal 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>></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>>
|
||||
</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}
|
||||
169
code/app/home/view/videoGpt1/video/getRankIndex.html
Normal file
169
code/app/home/view/videoGpt1/video/getRankIndex.html
Normal 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}
|
||||
203
code/app/home/view/videoGpt1/video/getRankList.html
Normal file
203
code/app/home/view/videoGpt1/video/getRankList.html
Normal 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}
|
||||
122
code/app/home/view/videoGpt1/video/getSearchVideo.html
Normal file
122
code/app/home/view/videoGpt1/video/getSearchVideo.html
Normal 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}
|
||||
219
code/app/home/view/videoGpt1/video/getVideoInfo.html
Normal file
219
code/app/home/view/videoGpt1/video/getVideoInfo.html
Normal 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}
|
||||
191
code/app/home/view/videoGpt1/video/getVideoPlayUrl.html
Normal file
191
code/app/home/view/videoGpt1/video/getVideoPlayUrl.html
Normal 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}
|
||||
292
code/app/home/view/videoGpt1/推广优化记录/首页/上先前ai排查.md
Normal file
292
code/app/home/view/videoGpt1/推广优化记录/首页/上先前ai排查.md
Normal file
@@ -0,0 +1,292 @@
|
||||
以下是对提供的视频站点首页(`video2.com`)SEO优化的分析和建议,重点针对中国大陆的浏览搜索排名(如百度),结合同行影视站点的常见优化策略,确保排名提升至首页。分析涵盖现有代码的优点、不足,并提供具体改进建议。
|
||||
|
||||
---
|
||||
|
||||
### 现有SEO优点
|
||||
1. **TKD(Title, 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`)不可信,降低用户信任。
|
||||
- 未设置HSTS(HTTP严格传输安全),影响安全性评分。
|
||||
|
||||
**建议**:
|
||||
- 修改语言为`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个月内有望进入首页。
|
||||
|
||||
若需具体代码调整(如某个模块的实现)或进一步分析(如竞争对手关键词),请提供更多细节!
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user