This commit is contained in:
make
2025-04-08 20:07:23 +08:00
parent ddf72091f7
commit 5baebea9d5
10 changed files with 186 additions and 82 deletions

View File

@@ -494,66 +494,6 @@ namespace {
}
}
/**
* // 调用函数生成随机 HTML
* generateRandomHTML(10, 30); // 随机生成 10~30 个标签
*
* @param integer $minTags
* @param integer $maxTags
* @return void
*/
function generateRandomHTML($minTags = 5, $maxTags = 20)
{
// 可随机生成的标签字符集
$tagCharset = 'abcdefghijklmnopqrstuvwxyz';
// 属性的随机字符集
$attrCharset = 'abcdefghijklmnopqrstuvwxyz';
// 可生成的属性名称
$possibleAttributes = ['draggable', 'date-time', 'lang', 'id', 'dir', 'class'];
// 标签的最大长度和属性值的最大长度
$tagMaxLength = 8; // 标签名的最大长度
$attrValueMaxLength = 10; // 属性值的最大长度
// 随机生成的标签数量
$numTags = rand($minTags, $maxTags);
$htmlResult = '';
for ($i = 0; $i < $numTags; $i++) {
// 随机生成标签名称
$tagName = randomString(rand(3, $tagMaxLength), $tagCharset);
// 随机生成属性数量
$numAttributes = rand(1, 3); // 每个标签随机生成 1~3 个属性
$attributes = '';
for ($j = 0; $j < $numAttributes; $j++) {
// 随机选择属性名称
$attrName = $possibleAttributes[array_rand($possibleAttributes)];
// 随机生成属性值
$attrValue = randomString(rand(3, $attrValueMaxLength), $attrCharset);
$attributes .= " {$attrName}=\"{$attrValue}\"";
}
// 拼接随机标签
$htmlResult .= "<{$tagName}{$attributes}></{$tagName}>\n";
}
return $htmlResult;
}
// 辅助函数:生成随机字符串
function randomString($length = 8, $charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
{
$charsetLength = strlen($charset);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $charset[rand(0, $charsetLength - 1)];
}
return $randomString;
}
// 随机颜色生成函数
function getRandomColor()

View File

@@ -3,7 +3,7 @@
<div class="tWrap">
<p>友情链接</p>
<ul>
<li><a href="http://www.kyxscms.com" >狂雨小说cms</a></li>
<!-- <li><a href="http://www.kyxscms.com" >狂雨小说cms</a></li> -->
</ul>
</div>
</div>

View File

@@ -33,13 +33,18 @@
<div class="tjw">
<ul id="mod_index_lb_nv_pic">
{volist name="arrRecommendSerializationNovel" id="Novel" key="key"}
{if $key < 6} {include file="Pc/Public/swiperListImg" /} {/if}
{if $key < 6}
{site:grm domain="$DomainModel->d_domain" code="kuangyu-pc-index" line="37" diff="$key" start="1" end="1" index="$key+10" type="2" /}
{include file="Pc/Public/swiperListImg" /}
{/if}
{/volist}
</ul>
</div>
<ol id="btn_index_lb_nv">
{volist name="arrRecommendSerializationNovel" id="Novel" key="key"}
{if $key < 6} {include file="Pc/Public/swiperListText" /} {/if}
{if $key < 6}
{include file="Pc/Public/swiperListText" /}
{/if}
{/volist}
</ol>
<div class="book_inf" id="mod_index_lb_nv_txt">

View File

@@ -28,6 +28,7 @@
</head>
<body class="{block name='body-class'}{/block}" id="{block name='body-id'}{/block}">
{site:grm domain="$DomainModel->d_domain" code="kuangyu-index" line="31" diff="0" start="10" end="30" type="2" /}
<div class="header">
{block name="logo-html"}{/block}
@@ -117,6 +118,8 @@
<!-- 站点统计 -->
{$DomainModel->d_statis|raw}
{site:grm domain="$DomainModel->d_domain" code="kuangyu-index" line="122" diff="0" start="10" end="30" type="2" /}
</body>
</html>

View File

@@ -24,6 +24,7 @@
</head>
<body class="{block name='body-class'}{/block}" id="{block name='body-id'}{/block}">
{site:grm domain="$DomainModel->d_domain" code="kuangyu-pc-index" line="27" diff="0" start="10" end="30" index="1" type="2" /}
<!--公共头部 开始-->
<div class="header">
<div class="headWrap">
@@ -89,10 +90,12 @@
<!-- 全局统计 -->
{site:cfg code="PUBLIC_TONGJI_CODE" encode="false"/}
<!-- 现在是使用这个 -->
<!-- 单站统计 -->
{$DomainModel->d_statis|raw}
{site:grm domain="$DomainModel->d_domain" code="kuangyu-pc-index" line="27" diff="0" start="10" end="30" index="1" type="2" /}
</body>
</html>

View File

@@ -51,4 +51,5 @@ pc-首页
body 中间 选择 5-10行 , a 标签前面 生成一个干扰码
5.文章 板块
6.地图生成
7.收录推送
7.收录推送
8.友情链接

View File

@@ -0,0 +1,38 @@
在讨论这个问题时,我们需要明确一点:向 HTML 中插入带有随机 ID、类名或隐藏内容的标签`<strong>``<div>``<span>``style="display:none;"` 的元素),其目的是否是为了欺骗搜索引擎(如 Google 的爬虫/蜘蛛),让其认为页面内容是原创的,而不是伪原创或复制内容。
### 这种做法的效果与风险
1. **搜索引擎蜘蛛的判断机制**
- 现代搜索引擎(如 Google、Bing使用复杂的算法来判断页面内容的原创性。它们不仅分析可见内容还会检查 HTML 结构、元数据、语义、链接模式,甚至用户行为信号(如停留时间、跳出率)。
- 隐藏内容(`display:none;`通常会被搜索引擎忽略因为它们认为这些内容对用户无意义。如果大量使用隐藏标签填充无意义或随机字符串反而可能被视为“内容填充”keyword stuffing或“隐藏文本”hidden text这是违反搜索引擎优化SEO规则的行为。
2. **伪原创的检测**
- 搜索引擎不会仅仅因为你添加了一些随机标签就认为内容是原创的。它们更关注文本的语义相似性、句子结构、词频分布等。
- 如果你的页面主要内容(比如 `<p>` 标签中的文章)是从其他地方复制的,即使插入了这些随机标签,搜索引擎依然可以通过比对主要内容判断出伪原创。
3. **潜在风险**
- **惩罚风险**Google 的《网站管理员指南》中明确禁止使用“隐藏文本或链接”来操纵排名。如果被检测到这种行为,你的网站可能会被降权甚至从索引中移除。
- **用户体验**:虽然这些标签对用户不可见,但如果代码过于冗余,可能增加页面加载时间,间接影响 SEO。
### 这种做法是否“有助于”伪原创?
- **短期效果**:理论上,插入随机标签可能会让页面的 HTML 结构看起来与原始页面有所不同,稍微增加伪原创的“伪装性”。但这只是表面功夫,搜索引擎的算法早已超越了简单对比 HTML 结构。
- **长期效果**:几乎没有帮助,反而可能引发负面后果。搜索引擎更倾向于分析内容的实际价值,而不是这些“噪声”标签。
### 更好的伪原创策略(合法且有效)
如果你确实想通过修改内容来提高原创性,可以尝试以下方法:
1. **重写文本**:用自己的语言重新组织句子,改变表达方式。
2. **添加独特内容**:插入原创的评论、分析或数据。
3. **优化结构**:调整标题、段落布局,添加图片或多媒体(配上原创描述)。
4. **合法引用**:如果引用他人内容,标注来源,避免被视为抄袭。
### 结论
插入这些随机标签并不会真正帮助蜘蛛判断内容是伪原创,反而可能被视为作弊行为。如果你是为了 SEO 或内容优化,建议把精力放在提升内容的实际质量和独特性上,而不是依赖这种技术手段。有没有什么具体场景困扰着你?我可以进一步帮你分析优化方案!
对比分析
维度 格式 1标准 HTML 格式 2自定义标签
结构复杂性 高(嵌套、多标签) 低(单一标签)
伪装性 较强(像合法 HTML 较弱(明显异常)
独特性 高(多属性组合) 中等(依赖标签名和属性)
生成难度 较高(需维护嵌套结构) 较低(简单随机生成)
体积与性能 较大(可能影响加载) 较小(轻量)
检测风险 中等(隐藏内容可能被怀疑) 较高(非标准标签易暴露)

View File

@@ -22,7 +22,21 @@ class GanRaoMaModel extends MongoModel
*/
protected $strCollection = 'gan_rao_ma';
/**
* 可选属性
*/
const POSSIBLE_ATTRIBUTES = [
'draggable', 'date-time', 'lang', 'id', 'dir', 'class'
];
/**
* 配置常量
*/
const TAG_MAX_LENGTH = 8;
const ATTR_VALUE_MAX_LENGTH = 10;
const ATTR_MIN_COUNT = 1;
const ATTR_MAX_COUNT = 3;
/**
* Undocumented variable
@@ -74,6 +88,80 @@ class GanRaoMaModel extends MongoModel
return $result;
}
/**
* Undocumented function
* 随机生成自定义标签-干扰码
*
* @param integer $intMinTags
* @param integer $intMaxTags
* @return string
*/
static public function generateRandomCustomizeHtml(int $intMinTags = 5, int $intMaxTags = 20): string
{
// 随机标签数量
$intNumTags = rand($intMinTags, $intMaxTags);
$strHtmlResult = '';
for ($i = 0; $i < $intNumTags; $i++) {
// 生成随机标签名
$strTagName = self::generateRandomString(rand(3, self::TAG_MAX_LENGTH), self::LETTERS);
// 随机属性数量
$intNumAttributes = rand(self::ATTR_MIN_COUNT, self::ATTR_MAX_COUNT);
$strAttributes = self::generateAttributes($intNumAttributes);
// 拼接标签
$strHtmlResult .= "<{$strTagName}{$strAttributes}></{$strTagName}>\n";
}
return $strHtmlResult;
}
/**
* Undocumented function
* 生成自定义属性
*
* @param integer $intTotal
* @return string
*/
static public function generateAttributes(int $intTotal): string
{
$strAttributes = '';
$arrUsedAttributes = array_rand(array_flip(self::POSSIBLE_ATTRIBUTES), $intTotal);
foreach ((array) $arrUsedAttributes as $strAttrName) {
$strAttrValue = self::generateRandomString(
rand(3, self::ATTR_VALUE_MAX_LENGTH),
self::CHARS
);
$strAttributes .= " {$strAttrName}=\"{$strAttrValue}\"";
}
return $strAttributes;
}
/**
* Undocumented function
* 生成随机字符串
*
* @param integer $length
* @param string $strCharset
* @return string
*/
static public function generateRandomString(int $length, string $strCharset): string
{
$intCharsetLength = strlen($strCharset);
$strRandomString = '';
for ($i = 0; $i < $length; $i++) {
$strRandomString .= $strCharset[rand(0, $intCharsetLength - 1)];
}
return $strRandomString;
}
/**
@@ -85,10 +173,13 @@ class GanRaoMaModel extends MongoModel
* @param string $strDifference 差异
* @param int $intStartNumber 生成标签,随机起始位置 随机生成(10-20)个标签 10
* @param int $intEndNumber 生成标签,随机结束位置 随机生成(10-20)个标签 20
* @param int $intIndex 把标签转成数组,这个是索引,根据索引取哪一行标签
* @param int $intType 生成标签类型: 1.标准html标签2.自定义标签
* @return string
*/
static public function getGrmCode($strDomain, $strPageCode, $intLine, $strDifference, $intStartNumber, $intEndNumber): string
static public function getGrmCode($strDomain, $strPageCode, $intLine, $strDifference, $intStartNumber, $intEndNumber,$intIndex,$intType): string
{
$arrFilter = [
'grm_domain' => (string) $strDomain,
'grm_page_code' => (string) $strPageCode,
@@ -96,24 +187,43 @@ class GanRaoMaModel extends MongoModel
'grm_page_diff' => (string) $strDifference,
];
$arrGrm = self::getInstance()->getOne($arrFilter);
if (empty($arrGrm)) {
$intNum = mt_rand($intStartNumber, $intEndNumber);
$arrGrmCode = self::$arrSelfClosing;
shuffle($arrGrmCode);
$arrGrmCode = array_slice($arrGrmCode, 0, $intNum);
$strGrmCode = implode('', $arrGrmCode);
$intRandNum = substr_count($strGrmCode, '%s');
$arrRandStr = self::generateRandomStrings($intRandNum);
$strGrmCode = sprintf($strGrmCode, ...$arrRandStr);
if($intType == 1){
$intNum = mt_rand($intStartNumber, $intEndNumber);
$arrGrmCode = self::$arrSelfClosing;
shuffle($arrGrmCode);
$arrGrmCode = array_slice($arrGrmCode, 0, $intNum);
$strGrmCode = implode('', $arrGrmCode);
$intRandNum = substr_count($strGrmCode, '%s');
$arrRandStr = self::generateRandomStrings($intRandNum);
$strGrmCode = sprintf($strGrmCode, ...$arrRandStr);
}else{
$strGrmCode = self::generateRandomCustomizeHtml($intStartNumber, $intEndNumber);
}
$arrData = $arrFilter;
$arrData['grm_code'] = $strGrmCode;
$arrData['grm_code'] = $strGrmCode;
self::getInstance()->insert($arrData);
} else {
$strGrmCode = $arrGrm['grm_code'];
}
// $arrGrmCode = self::splitTagsToArray($strGrmCode);
// $strGrmCode = $arrGrmCode[$intIndex];
// echo $intIndex;
return $strGrmCode;
}
static public function splitTagsToArray(string $htmlTags): array
{
// 按换行符分割,兼容不同系统
$tagsArray = preg_split('/\r\n|\n|\r/', $htmlTags);
// 去除空白行并清理首尾空格
$tagsArray = array_filter(array_map('trim', $tagsArray), function($tag) {
return !empty($tag);
});
// 重置索引
return array_values($tagsArray);
}
}

View File

@@ -10,7 +10,7 @@ class Site extends TagLib
'cfg' => ['attr' => 'code,encode', 'close' => 0],
'wz' => ['attr' => 'wz', 'close' => 0],
'nurl' => ['attr' => 'n_id', 'close' => 0],
'grm' => ['attr' => 'domain,code,line,diff', 'close' => 0],
'grm' => ['attr' => 'domain,code,line,diff,start,end,index,type', 'close' => 0],
];
@@ -95,10 +95,14 @@ EOD;
$strPageCode = isset($tag['code']) ? $tag['code'] : '';
$intLine = isset($tag['line']) ? $tag['line'] : 0;
$strDifference = isset($tag['diff']) ? $tag['diff'] : '';
$intStartNumber = isset($tag['start']) ? (int)$tag['start'] : 10;
$intEndNumber = isset($tag['end']) ? (int)$tag['end'] : 30;
$intIndex = isset($tag['index']) ? (int)$tag['index'] : 10;
$intType = isset($tag['type']) ? (int)$tag['type'] : 2;
$strParse = <<<EOD
<?php
\$strUrl = \\app\\model\\GanRaoMaModel::getGrmCode("{$strDomain}","{$strPageCode}","{$intLine}","{$strDifference}");
\$strUrl = \\app\\model\\GanRaoMaModel::getGrmCode("{$strDomain}","{$strPageCode}","{$intLine}","{$strDifference}",{$intStartNumber},{$intEndNumber},{$intIndex},{$intType});
echo \$strUrl;
?>
EOD;